アニメーション自体がどのように発生しているかは、コードからはあまり明確ではありません (別の場所にレンダリング関数があることは明らかです) が、AS3 で関数の実行に遅延を追加するには、setTimeout
関数またはTimer
クラスのいずれかを使用できます。
ここにありsetTimeout
ます:
import flash.utils.setTimeout; //To be added with your other imports
// start animated swap of two pieces
public function makeSwap(piece1:Piece,piece2:Piece):void
{
swapPieces(piece1,piece2);
//check to see if move works
if (lookForMatches().length == 0)
{
setTimeout(swapPieces, 500, piece1, piece2); //Swap the piece back, after delay of 500 milliseconds
}
else
{
isSwapping = true;
}
}
// swap two pieces
public function swapPieces(piece1:Piece,piece2:Piece):void
{
// swap row and col values
var tempCol:uint = piece1.col;
var tempRow:uint = piece1.row;
piece1.col = piece2.col;
piece1.row = piece2.row;
piece2.col = tempCol;
piece2.row = tempRow;
// swap grid positions
grid[piece1.col][piece1.row] = piece1;
grid[piece2.col][piece2.row] = piece2;
}
そして、ここにありますTimer
:
import flash.utils.Timer; //To be added with your other imports
import flash.events.TimerEvent; //To be added with your other imports
private var _swapBackTimer:Timer = new Timer(500, 1); //Delay of 500 milliseconds, timer running 1 time
private var _delaySwapPiece1:Piece;
private var _delaySwapPiece2:Piece;
// start animated swap of two pieces
public function makeSwap(piece1:Piece,piece2:Piece):void
{
swapPieces(piece1,piece2);
//check to see if move works
if (lookForMatches().length == 0)
{
_swapBackTimer.reset();
_swapBackTimer.addEventListener(TimerEvent.TIMER, swapBackTimer_complete);
_swapPiece1 = piece1;
_swapPiece2 = piece2;
_swapBackTimer.start();
}
else
{
isSwapping = true;
}
}
private function swapBackTimer_complete(evt:TimerEvent):void
{
_swapBackTimer.removeEventListener(TimerEvent.TIMER, swapBackTimer_complete);
swapPieces(_delaySwapPiece1, _delaySwapPiece2);
}
// swap two pieces
public function swapPieces(piece1:Piece,piece2:Piece):void
{
// swap row and col values
var tempCol:uint = piece1.col;
var tempRow:uint = piece1.row;
piece1.col = piece2.col;
piece1.row = piece2.row;
piece2.col = tempCol;
piece2.row = tempRow;
// swap grid positions
grid[piece1.col][piece1.row] = piece1;
grid[piece2.col][piece2.row] = piece2;
}
これに関して心に留めておくべきことの 1 つは、ユーザーが遅延期間中にゲームの状態を変更し、遅延したアクションを無効にし、バグを導入するリスクです。あなたはすでにこれを管理しているかもしれませんが、念のために、遅延アクション中にフラグを設定し、その間の後続の入力を無視するという 1 つの方法があります。もう 1 つの方法は、遅延アクションをキャンセルしてすぐに実行し、その時点から新しいユーザー アクションを処理することです。