まず,キャラクタを配置します.
Main
new Chara1{x=100,y=100};
Chara1をアニメーションをさせる方法は次の二通りがあります。
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);
}
}