2014-03-30 56 views
1

我目前面临的一个问题是,如果没有设置边界,我的玩家或以其他方式称为加农炮就被允许移出屏幕。我试图实现一些界限,但我无法弄清楚逻辑,它目前不工作。使用Javascript创建玩家边界

为了澄清我希望一旦大炮到达任何一边的墙(它只能从左到右),它是不允许超过游戏的界限。

我目前的界限功能。

function playerBounds() { 
    //This will check the position of the spaceship and if it hits the boundaries of the canvas will not let it go further. 

    if (spaceShip.x < 0) { 
     spaceShip.x = 0; 
    } 
    else if (spaceShip.x > canvas.width || spaceShip.x < canvas.width ) { 
     spaceship.x = canvas.wdith - spaceShip.width; 
    } 

} 

回答

1

的一个问题是这种说法

else if (spaceShip.x > canvas.width || spaceShip.x < canvas.width ) { 
     spaceship.x = canvas.wdith - spaceShip.width; 
    } 

逻辑因此,让我们说你的画布是100像素宽。如果船舶的x位置为100,默认情况下,这是要在画布上绘制的图像的左侧(除非您有一些代码将其锚定点更改为中间的某个)。有关更多信息,请参阅MDN's page。所以画布会从这一点开始向右画,然后去18px,这意味着船将从100-118px,这将是离屏。

另外,你说宇宙飞船的宽度是18,并且我将假设你的画布比18px宽,所以在这个例子中,第二部分或者语句spaceShip.x < canvas.width评估为18 < 100是真实的,因此对于逻辑或者是不必要的。作为一个令人讨厌的副作用,它总是会将你的飞船抓到屏幕的右侧,因为它总是如此。

的解决方案可能是这样的:

// outside of playerBounds function 
// stored in a variable so this doesn't have to be recalculated every time 
var rightBorder = canvas.width - spaceShip.width; 

function playerBounds() { 
    if (spaceShip.x < 0) { 
     spaceShip.x = 0; 
    } 

    if (spaceShip.x > rightBorder) { 
     spaceship.x = rightBorder; 
    } 
} 

一件事,你在顶部宣布var Time;,但你引用time其他地方一样,只是这是一个意外情况。

+0

感谢您的输入,在尝试您的解决方案时,它修复了之前由于我的逻辑陈述而出现疯狂跳跃的问题,但它仍然让玩家仅在右侧出现屏幕。 –

+1

更新您的小提琴http:// jsfiddle。净/ Q4U2w/3 /一对夫妇修复(我评论他们),主要的是在第二个错字,如果。太空船与太空船。我还注意到,在几个地方你有一个赋值运算符(=)而不是一个相等运算符(===)。 – prokopcm

+0

太棒了!从Vb.net转换到Javascript一直很混乱,有时我忘记了正确的语法。 –

0

两个问题:

else if (spaceShip.x > canvas.width || spaceShip.x < canvas.width ) { 
    spaceship.x = canvas.wdith - spaceShip.width; 
} 
  1. spaceShip.x > canvas.width || spaceShip.x < canvas.width将 始终评估为真(除非spaceShip.x等于 canvas.width),所以你的飞船将有效地锁定在一个位置 永远。
  2. 你有一个错字在你的任务:canvas.wdith应该 canvas.width

您需要调整您的条件,使其只在飞船熄灭的画布的右侧边缘捕捉的情况。不过,它看起来像是在正确的轨道上。

+0

谢谢!我纠正了这个错字,尽管它仍然不能纠正我的整体问题。 –

+0

您是否也修复了其他部分?你需要删除

+0

我在prokopcm的回答后想到了这一切,我完全用错误的思维去解决问题。无论如何,谢谢。 –