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

本文深入解析了《球球大作战》游戏中小球移动的算法,包括游戏循环中的定时器设置,核心的moveloop、gameloop和sendUpdates,特别是小球移动的详细计算过程,涉及分身、合并和边界处理等关键逻辑。通过C语言源代码分析,展示了小球如何在服务器端进行精确的运动计算。
摘要由CSDN通过智能技术生成

系列文章

《球球大作战》源码解析(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))

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值