我正在用javascript / html5编写一个简单的游戏,我正在尝试实现“引力”。
我的代码有点像这样:
gravity = 4;
acceleration = 1.1;
function gameLoop() {
gravity = gravity*acceleration;
if (characterPositionY < 600)
characterPositionY = characterPositionY + gravity;
setTimeout(gameLoop,1000/30);
}
数字“600”是屏幕的底部,“地面”,如果你愿意的话,玩家应该停止下降。
不幸的是,由于重力使得角色在每个循环周期中下降至少4个像素(并且增加)......角色通常会停止过去,或者在地面之前。像这样,例如:
[1] characterPositionY是590
-add 4 -
[2] characterPositionY是594
-add 4 -
[3] characterPositionY是598
-add 4 -
[4] characterPositionY是602
......过去了。
我以前从来没有真正做过任何游戏,而我只是随着时间的推移而全力以赴。可能有更好的方法来解决这个问题。
答案 0 :(得分:5)
将您的测试更改为:
if (characterPositionY + gravity < 600)
characterPositionY = characterPositionY + gravity;
else
characterPositionY = 600;
答案 1 :(得分:0)
function gameLoop(){
gravity = gravity*acceleration;
if (characterPositionY < 600-gravity)
characterPositionY = characterPositionY + gravity;
setTimeout(gameLoop,1000/30);
}
也许这会有所帮助?
答案 2 :(得分:0)
if (characterPositionY < 600) {
characterPositionY = characterPositionY + gravity;
if (characterPositionY > 600) characterPositionY = 600;
}
答案 3 :(得分:0)
gravity = 0; /* rate of change of position due to grav*/
acceleration = .4; /* rate of change of grav*/
function gameLoop(){
if (characterPositionY < 600)/* above ground*/
{
gravity = gravity + acceleration; /*increase speed of drop*/
characterPositionY = characterPositionY + gravity; /*apply speed to position*/
}
if (characterPositionY >= 600)/*at or below ground*/
{
characterPositionY = 600; /*set on ground if character has 'clipped' through*/
gravity = 0; /*touching the ground has stopped Y movement due to gravity*/
}
setTimeout(gameLoop,1000/30);
}
重力变量确实代表重力对Y运动的贡献。考虑将其重命名为fallSpeed。
另外,请注意var,加速度添加到重力。这更准确地表示恒定加速度。您也可以考虑将加速重命名为gravAcceleration。
我希望这会有所帮助。