用途別リファレンス

キャラクターを歩いているように見せる

まず,キャラクタを配置します.

Main

new Chara1{x=100,y=100};

Chara1をアニメーションをさせる方法は次の二通りがあります。

キャラクターが動く処理と描画処理を一つのwhileの中で行う

Chara1


//下方向を向いているときのpの値の配列
pListDown=[0,0,0,0,1,1,1,1,0,0,0,0,2,2,2,2];
//同じ値が連続しているのは,毎フレーム画像を変更すると動きが速すぎるため.
//上方向を向いているときのpの値の配列
pListUp=[5,5,5,5,6,6,6,6,5,5,5,5,7,7,7,7];
//左か右方向を向いているときのpの値の配列
pListLR=[3,3,3,3,4,4,4,4];

counter=0;
p=$pat_neko+0;

//状態の初期値
dir="stop";

while(true){
    dir="stop";
    if(getkey("down")){
        y+=2;
     //状態の設定
        dir="down";
    }
    if(getkey("up")){
        y-=2;
        //状態の設定
        dir="up";
    }
    if(getkey("left")){
        x-=2;

        //左に向いているpの値がないので、右に向いているのをscaleXを-1にし反転させる
        scaleX=-1;
        //scaleXを変更した場合、scaleYもそれに合わせて-1に変化するので、scaleYは1に設定しておく

        scaleY=1;

        //状態の設定
        dir="lr";
    }
    if(getkey("right")){
        scaleX=1;
        x+=2;
        //状態の設定
        dir="lr";
    }

    if(dir=="down"){
        //下方向を向いてるアニメーションの表示
        p=$pat_neko+pListDown[counter%16];
    }else if(dir=="up"){
        //上方向を向いてるアニメーションの表示
        p=$pat_neko+pListUp[counter%16];
    }else if(dir=="lr"){
        //左か右方向を向いてるアニメーションの表示
        p=$pat_neko+pListLR[counter%8];
    }
    counter++;
    update();
}

キャラクターが動く処理とアニメーションの処理を別々に書く

parallelという並列処理を行うメソッドを使用して,アニメーションの処理のためのメソッド(animate)を平行して実行させます.

Chara1

//ここでは毎フレーム画像の変更をしていないので、配列の値を4つずつ設定する必要はない
//pの値の配列
pListDown=[0,1,0,2];
pListUp=[5,6,5,7];
pListLR=[3,4];

dir="stop";
p=$pat_neko+0;

parallel("animate");
while(true){
    dir="stop";
    if(getkey("down")){
        y+=2;
        dir="down";
    }
    if(getkey("up")){
        y-=2;
        dir="up";
    }
    if(getkey("left")){
        x-=2;
        scaleX=-1;
        scaleY=1;
        dir="lr";
    }
    if(getkey("right")){
        scaleX=1;
        x+=2;
        dir="lr";
    }
    update();
}
\animate(){
    counter=0;
    // アニメーションの処理
    while(true){
        if(dir=="down"){
            p=$pat_neko+pListDown[counter%4];
        }else if(dir=="up"){
            p=$pat_neko+pListUp[counter%4];
        }else if(dir=="lr"){
            p=$pat_neko+pListLR[counter%2];
        }else{
            //p=$pat_neko+0;
        }
        counter++;
        //4フレームごとにupdateを行う
        updateEx(4);
    }
}