'重力'在Javascript / HTML5游戏中无法正常工作

时间:2009-11-22 13:46:49

标签: javascript

我正在用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

......过去了。

我以前从来没有真正做过任何游戏,而我只是随着时间的推移而全力以赴。可能有更好的方法来解决这个问题。

4 个答案:

答案 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。

我希望这会有所帮助。