我使用Flash CS6和AS2。
我参加了高中的游戏设计课程,我们学到了一些基本的编码。我目前正在尝试添加一个"速度提升"按下shift键时功能。你应该能够按下它,这会给你5秒的速度提升。在这5秒钟之后,您将恢复到正常速度。这些是我所做的变数:
speed = 6;
boost = 16;
boost_timer = 0;
我已将速度设置为6,并且我调用了16(Shift键的ASCII代码)" boost"。当我在主代码中调用它时,我还在计时器中添加了计数到5秒的计时器。这部分代码在这里:
if(Key.isDown(boost))
{
speed = 0;
boost_timer++;
speed = 12
}
-
if(boost_timer >= 5)
{
boost_timer = 0;
speed = 6;
}
现在,我在这里尝试做的是,当我按下" boost"时,它会设置我的" boost_timer"为0(只有当它不在0时才会有效)。然后,它将开始增加我的" boost_timer"并设定我的速度"使原始速度加倍。
在第二段代码中,我将它设置为一旦达到5,它应该将计时器设置回0.但是,因为" boost_timer ++"已经设定,即使它已经回到0,它仍然会增加。但是,即使它达到5,它也只是重新启动计时器并继续将速度重置为6.下次我按下" boost"按钮,它应该设置" boost_timer"回到0并重新完成整个事情。
我打算稍后添加一些上电功能,这将限制你可以使用增强的次数,但是现在,我首先要确保我的游戏实际上能够使用增强多次。
到目前为止,我对编码的实际问题是每当我按下" boost"事实上,它确实提高了速度。然而,它保持在提升的速度,永远不会自行回归。出于某种原因,每当我按下"提升"再次按下按钮,同时已经提升,它恢复到原始速度。好像"提升"按钮正在作为激活和取消激活按钮用于提升,但我不知道为什么以及我的代码的哪一部分导致了这一点。
非常感谢您提供任何帮助!
答案 0 :(得分:0)
从newgrounds找到答案:
If you just want to test if the key isnt pressed at the time, just use: if(Key.isDown(Key.UP) == false) or if(!Key.isDown(Key.UP))
但是,如果你想测试确切的点,那么只需要解除密钥,你必须使用一个latch sysetm:
if(Key.isDown(Key.UP)){ latch = true; } if(!Key.isDown(Key.UP) && latch){ latch = false; // put your actions here }
你可以看到它只会是那个!Key.isDown(Key.UP)&&按下键后锁定一次,这样它就会执行动作 将等到按下该键然后再次释放以执行该操作 再次采取行动。
你可能会在钥匙抬起的位置运行一些功能,以降低速度和存储速度,提升剩余价值。
此锁存变量也应该在不再有函数的每一帧上设置为false,因此在事件程序进入下一帧后,其值为false
UMH!已经有了事件监听器:adobeMX