さて、ActionScript 3.0 を練習するためにこの素晴らしいアイデアを以前に思いついたので、ゆるい鳥のクローンを作成することにしました。私は基本的な鳥の動きを下に持っているので、鳥は適切に上下に動くことができ、回転し、とても滑らかに見えます.
しかし、ブール変数と if ステートメントに問題があります。そこにあるコードを実際に気にすることはありませんが、なぜそれが何をしているのか知りたいです。以下のコードを、bird という独自のシンボルを使用してフラッシュで実行すると、問題なく動作します。任意のボタンを押すと、鳥が飛んで戻ってきます。
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;
...
何が起こるかを正確に知る必要がある場合は、鳥がとてつもなく速く動き、ボタンを押すたびに速く動くことを除いて、ほとんど同じように機能します.
助けてください、私はまだ学んでいます、私は一週間前のように始めました.