気が向くまま何か作るよ!

  スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

  画面切り替えとキャラチェンジ

キャラチップ一部
メイン部分は完成。
でも、なんとかできたと思ったら、もう月末…
今からテストプレイして細かい修正を加えていくことになるので、公開は3月に入ってからになりそうですorz

今回は、主人公キャラを画面上で移動させる動作があるので、その周辺のスクリプトになかなか手間取りましたが、その辺はかなり初めに処理したので。
その後はサクサク作れてたので、何に時間を取ったのか不明です。
ちなみに自機の移動方式は、画面の端まで行ったら背景が切り替わり、自機が反対側の端に移動するといやつ。
そこに移動アニメやキャラのチェンジ、他のキー操作の処理が加わって、後から見るとなんのこっちゃ状態ですが(汗)
骨子は、以下の感じで。

//スプライト
map:背景画像
hitmap:当たり判定用の画像
chara:キャラチップを入れ、自機スプライト内に配置

//変数
zx:自機のx座標
zy:自機のy座標
n:自機の向き

自機スプライトに以下を記述。

onClipEvent(load){
c=0;
push=0;//キーを押す度に移動
i=1;
m=0;//歩行アニメを表示するかしないか
down=0;//何かのキーを押した
speed=3;//自機の動く速さ
roomN=0;//マップ番号

//キャラチェンジ用(キャラチップを使う場合)
charaN=0;//キャラ番号
chara_x=new Array();//画像のx座標
chara_y=new Array();//画像のy座標
chara_xs=new Array();//画像の左右反転
chara_x[0]=new Array();
//キャラ番号0の画像位置を指定(チェンジするキャラの分、配列を用意)
chara_x[0][0]=[0,0,0,0];//左
chara_x[0][1]=[0,0,0,1*32-2];//上
chara_x[0][2]=[1*32-2,1*32-2,1*32-2,1*32-2];//右
chara_x[0][3]=[0,0,0,0];//下
chara_y[0]=new Array();
chara_y[0][0]=[3,4,3,5];
chara_y[0][1]=[6,7,6,7];
chara_y[0][2]=[3,4,3,5];
chara_y[0][3]=[0,1,0,2];
chara_xs[0]=new Array();
chara_xs[0][0]=[1,1,1,1];
chara_xs[0][1]=[1,1,1,-1];
chara_xs[0][2]=[-1,-1,-1,-1];
chara_xs[0][3]=[1,1,1,1];
}
-
onClipEvent(enterFrame){
//移動
if(_parent.hitmap.hitTest(_x+16,_y,true)){//当たり判定
if(c==0){
if(Key.isDown(37)){//←
_x-=16;
n=0;
m=1;
if(_parent.hitmap.hitTest(_x+16,_y,true)){}else{ _x+=16;}
}else if(Key.isDown(38)){//↑
_y-=16;
n=1;
m=1;
if(_parent.hitmap.hitTest(_x+16,_y,true)){}else{ _y+=16;}
}else if(Key.isDown(39)){//→
_x+=16;
n=2;
m=1;
if(_parent.hitmap.hitTest(_x+16,_y,true)){}else{ _x-=16;}
}else if(Key.isDown(40)){//↓
_y+=16;
n=3;
m=1;
if(_parent.hitmap.hitTest(_x+16,_y,true)){}else{ _y-=16;}
}

//キャラ座標取得
zx=_x/16;
zy=_y/16;

//アニメ
if(m==1){//矢印キー以外を押した時にアニメが表示されないように
chara._x=chara_x[charaN][n][i];
chara._y=-32*chara_y[charaN][n][i];
chara._xscale=chara_xs[charaN][n][i]*100;
i++;
if(i>3){ i=0;}
this["door"+roomN]();//マップ移動
}
}

//キーを押下中の移動速度制限
if(m==1){ c++; if(c>speed){ c=0;}}
if(c!=0){ push++;}
//キーを押す度に移動させる
if(push>=speed){ c=0; push=0;}
}
}
-
onClipEvent(keyDown){
if(down==0){
down=1;//キーを押し続けても反応させない
}
}
-
onClipEvent(keyUp){
//移動
i=1;
m=0;

//アニメを直立に戻す
chara._x=chara_x[charaN][n][0];
chara._y=-32*chara_y[charaN][n][0];
chara._xscale=chara_xs[charaN][n][0]*100;

down=0;
}

//マップ切り替え(マップの数だけ同様の関数を用意)
function door0(){//マップナンバー0
if(zx==6&&zy==12&&n==3){//マップナンバー1のマップへ移動
roomN=1;//マップナンバー代入
_root.map.gotoAndPlay("map1");//マップ画像の入ったスプライトで指定のマップへジャンプ
_y=16*3;//自機の座標を移動
}
}

…たぶん、この辺りを書いておけば適当に作動するはず。
キャラチップはflashの性質上、無駄げなのですが、画像の用意という点でかなり楽なのでこの方法です。
めんどくさい処理をがんばったので、主人公は終盤のみですが、かなり変身する仕様になっております。
肝心の画面切り替えの処理は、例えば自機が画面の左端まで来たら自動的に背景が切り替わり、自機のx座標のみ画面の右端へ移動する、というような内容。
初め、移動した先の座標の指定に失敗して、マップ移動した直後に元のマップに戻ってしまうという出戻り現象に悩まされたり。
矢印キーで一回押せば一歩移動、というような処理もしてみたのですが…移動速度の絡みから微妙な感じに。
まあ、この辺りの課題は次回持ち越しで今回は勘弁です。
スポンサーサイト

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://sunadorinekotyan.blog10.fc2.com/tb.php/286-ca5d0499

 | HOME | 


プロフィール


    sabatoraseijin

    Author:sabatoraseijin



月別アーカイブ



検索フォーム







カウンター


  • RSS 1.0
  • HTML 4.01
  • RSS FEED
  • FC2Ad

    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。