当前位置:   article > 正文

球球大作战c语言源代码,《球球大作战》源码解析:移动算法

球球大作战源代码

系列文章

《球球大作战》源码解析(7):游戏循环

《球球大作战》源码解析(8):消息广播

服务端处理了游戏的各种游戏逻辑,怎样让小球移动是重点之一。若想做服务端运算的游戏,这一部分代码是很值得参考的。

SetInterval

nodejs中的setInterval是定时器,如下的代码表示每隔1秒执行一次myfunc方法。

setInterval(myfunc,1000);

function myfunc(){

console.log("hehe");

};复制代码

3个定时器

源码中设置了3个定时器,分别是moveloop、gameloop和sendUpdates。其中moveloop每秒执行60次,它主要处理小球的移动计算。

setInterval(moveloop, 1000 / 60);

setInterval(gameloop, 1000);

setInterval(sendUpdates, 1000 / c.networkUpdateFactor);复制代码

moveloop

Moveloop方法的代码如下,它对每个玩家执行tickPlayer,处理每个小球的移动。

function moveloop() {

for (var i = 0; i < users.length; i++) {

tickPlayer(users[i]);

}

for (i=0; i < massFood.length; i++) {

if(massFood[i].speed > 0) moveMass(massFood[i]);

}

}复制代码

moveMass

moveMass就是移动质量,小球可以喷射身体的一部分出去,喷出去的部分变成了食物。每个喷射出去的“质量”都会被保存在massFood列表里。moveMass会处理这些“质量”的运动轨迹,先是喷射出去、然后减速、停止。

efbefb30e871d7423b9b78d517030581.gif

image001.png (39.99 KB, 下载次数: 6)

2019-3-6 16:50 上传

moveMass的代码比较简单,先看看这一部分。Mass的运动分是个减速过程,喷射时Mass带有较高的初速度,然后每一帧减速0.5,直到停止。代码后半部分还对Mass撞上边缘的情况做处理。

function moveMass(mass) {

var deg = Math.atan2(mass.target.y, mass.target.x);

var deltaY = mass.speed * Math.sin(deg);

var deltaX = mass.speed * Math.cos(deg);

mass.speed -= 0.5;

if(mass.speed < 0) {

mass.speed = 0;

}

if (!isNaN(deltaY)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/984589
推荐阅读
相关标签
  

闽ICP备14008679号