2011-11-03 49 views
2

我正在观看有关构建帆布游戏的ThinkVitamin截屏视频,但它似乎最后一部分不见了,我不得不自己弄清了很多东西。Canvas游戏:我的食物消失

我成功地构建了游戏,但是有两个bug一直在弹出。

编辑:把第一个错误转移到另一个问题,因为这一点有点回答!

另一个缺陷是食物有时不会出现。我无能为力,为什么会发生这种情况,但我唯一能想到的就是食物真正出现在蛇里面。不过,我已经实现了这个藏汉一张支票,它仍然发生:

inSnake = (x, y) -> 
    for part in Snake.position    # check if the food is being placed inside the snake 
     if x == part.x && y == part.y 
      true 
    false 

placeFood = -> 
    x = Math.round Math.random() * MAX_X - 1 
    y = Math.round Math.random() * MAX_Y - 1 

    if inSnake x, y          # if so, run placeFood() again 
     placeFood() 

    Food.position = { x: x, y: y } 

这种食品应随意摆放在我的画布(我指定MAX_X和MAX_Y),所以我只能认为这是蛇里面的..我在调试这个问题时遇到了麻烦。

该应用程序的演示可以找到here

在此先感谢!

+0

你确定它不是由于食物中毒(丢失食物)吗?

回答

4
inSnake = (x, y) -> 
    for part in Snake.position    
     if x == part.x && y == part.y 
      true 
    false 

看起来像你想说的return true。否则它将始终运行整个循环,并在函数结束时返回false

+0

我得到'未捕获RangeError:最大调用堆栈大小超过'当我改变它;似乎它一直呼吁placeFood()然后。 – cabaret

+0

尝试打印出x和y。并看看编译的JS。没有括号,我不知道'Math.round Math.random()* MAX_X - 1 '的含义。 – Thilo

+0

哦,你说得对。我需要括号(MAX_X - 1)。我想这可以修复食物消失的错误。谢谢! – cabaret