好的,所以我早些时候提出了这个很棒的想法来练习ActionScript 3.0,我决定创建一个脆弱的鸟类克隆。我有基本的鸟类动作,所以鸟可以适当地上下移动,他会旋转,看起来很光滑。
但是我遇到了布尔变量和if语句的问题。它并没有真正困扰那里的代码,但我想知道为什么它正在做它正在做的事情。如果您使用自己的名为bird的符号在flash中运行此代码,它将正常工作。你可以按任何按钮,鸟儿会飞起来,然后倒下来。
var hasGameStarted:Boolean=false
//input stuff
stage.addEventListener(TouchEvent.TOUCH_TAP, tap1);
stage.addEventListener(KeyboardEvent.KEY_DOWN, tap1);
function tap1(event):void{
if (!hasGameStarted){
startGame();
}
}
function startGame():void{
hasGameStarted=true;
var jumpLevel:int=10
var jumpLevelCap:int=36
removeEventListener(KeyboardEvent.KEY_DOWN, tap1);
removeEventListener(TouchEvent.TOUCH_TAP, tap1);
stage.addEventListener(Event.ENTER_FRAME, update);
stage.addEventListener(TouchEvent.TOUCH_TAP, tap2);
stage.addEventListener(KeyboardEvent.KEY_DOWN, tap2);
function update(event):void{
bird.y+=jumpLevel;
//gravity
if (jumpLevel<jumpLevelCap){
jumpLevel+=6;
}
//rotation
if (bird.rotation<100 && bird.rotation>-90 && jumpLevel>0){
bird.rotation+=jumpLevel;
}
if (bird.rotation<100 && bird.rotation>-100 && jumpLevel<0){
bird.rotation+=jumpLevel*2;
}
if (bird.rotation>=100){
bird.rotation=99;
}
if (bird.rotation<-90){
bird.rotation=-89;
}
//out of bounds
if (bird.y<1){
killBird();
}
}
function tap2(event):void{
jumpLevel=-30;
}
function killBird():void{
}
}
但是,如果您运行完全相同的代码,并且从代码中删除了与布尔变量hasGameStarted
相关的所有内容或进行了注释,则程序将变得非常快。根据此布尔值,没有其他变量,根本不需要它。
//var hasGameStarted:Boolean=false
//input stuff
stage.addEventListener(TouchEvent.TOUCH_TAP, tap1);
stage.addEventListener(KeyboardEvent.KEY_DOWN, tap1);
function tap1(event):void{
//if (!hasGameStarted){
startGame();
//}
}
function startGame():void{
//hasGameStarted=true;
...
如果你需要确切地知道发生了什么,除了鸟会快速移动并且每次按下按钮时移动速度更快,它几乎都会起作用。
请帮助,我还在学习,我一周前就开始了。
答案 0 :(得分:1)
您已将tap1
的听众TouchEvent.TOUCH_TAP
添加到Stage
,但在startGame
中您将其从当前对象中删除,而不是Stage
(第17和18行)。如果您没有该布尔值,则每次点按都会调用startGame
。
解决方案是正确删除以前的侦听器:
stage.removeEventListener(KeyboardEvent.KEY_DOWN, tap1);
stage.removeEventListener(TouchEvent.TOUCH_TAP, tap1);