我只是想用HTML5和JS创建一个非常简单的游戏,现在我有一艘可以发射子弹的船。如果你拿着备用杆,子弹正确移动并正常工作。但是如果你在一个镜头中间按空格键,它将创建一个新的子弹,但速度将加倍。这是代码
function Bullet(x,y)
{
this.xPos = x;
this.yPos = y;
this.speed = 5;
this.alive = true;
this.lifeTimer = 0;
}
tempBullet = new Bullet( -100, -100);
bullets[0] = tempBullet;
if (32 in keysDown && player.fired == false) //space
{
//Create new bullet
var bulletDone = false;
player.fired = true;
player.firedTimer = 1;
tempBullet = new Bullet( player.xPos + 14, player.yPos);
for( i = 0; i < bullets.length; i++ )
{
if( bullets[i].alive == false )
{
bulletDone = true;
bullets[i] = tempBullet;
}
}
if( bulletDone == false )
{
bullets[bullets.length] = tempBullet;
}
}
if( player.firedTimer >= 1 )
{
player.firedTimer++;
}
if( player.firedTimer >= 60 )
{
player.firedTimer = 0;
player.fired = false;
}
这些是代码片段,其余的东西会妨碍你。我是否错误地使用了我的子弹阵列中的旧资产?
欢呼帮助并阅读
答案 0 :(得分:1)
tempBullet = new Bullet( player.xPos + 14, player.yPos);
请使用本地变量,您似乎忘记了var tempBullet
for ( i = 0; i < bullets.length; i++ )
if( bullets[i].alive == false ) {
bulletDone = true;
bullets[i] = tempBullet;
}
。虽然我猜不是你问题的原因。
tempBullet
请注意,在此循环中,您将所有死子弹重新分配给相同的 bullets
。这意味着当您遍历tempBullet
集合以动画(移动)所有这些集合时,您将多次访问var bulletDone = false;
for (var i = 0; i < bullets.length; i++ ) {
if ( ! bullets[i].alive ) {
bulletDone = true;
bullets[i] = new Bullet( player.xPos + 14, player.yPos);
}
}
if ( ! bulletDone ) {
bullets.push( new Bullet( player.xPos + 14, player.yPos) );
}
。当你每次增加它的位置时,这将总结并导致非正常的速度。
要解决此问题,请在每次要替换死弹时创建新的项目符号对象:
{{1}}