好的,所以我早先想出了这个绝妙的主意来练习 ActionScript 3.0,我决定创建一个 flappy bird 克隆。我有基本的鸟向下运动,所以鸟可以适当地上下移动,他会旋转,看起来很光滑。
但是我对布尔变量和 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;
...
如果您需要确切地知道发生了什么,它的功能几乎相同,除了鸟会飞快地移动并且每次按下按钮时都会移动得更快。
请帮忙,我还在学习,我一周前就开始了。