HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0423
たまってベルトスクロールACT用のキャラ描画順に関して5解決


たまって

リンク

2012/4/23(Mon) 23:58:28|NO.46241

ファイナルファイトTypeのACTゲームの雛形を作っているのですが
キャラ同士(自機and敵)の描画順(ソート順)をどうやって組み込んだら良いのかわからず
ココに質問をしにきました
(過去のソースは検索で見つけたのですが、古いverのソースで、理解できませんでした)
よろしくお願いいたします

(以下のソースは、基本部分だけを抜粋したものです)

screen 0,480,320 //ウィンドウID 0を初期化 dim EX,TEKIKAZU //敵の座標 dim EY,TEKIKAZU dim ELIVE,TEKIKAZU //敵の生存フラグ //----------------------------------------------------- //■初期設定 *START gmode 2 //画面コピーモード 透明色付きコピー gosub *SETMAP //map初期設定 //----------------------------------------------------- //■メインループ *DRAWLOOP1 redraw 0 //仮想画面を書き換えるだけ gosub *MOVEME //自機の移動 gosub *DRAWMAP //画面表示 redraw 1 //実際の画面にも反映 await 16 goto *DRAWLOOP1 //----------------------------------------------------- //■マップ表示 *DRAWMAP color 128,128,128 :boxf 0,0,479,479 //480*480灰色box表示 //敵の表示 repeat TEKIKAZU if ELIVE(cnt)=1{ //敵の生存flag判定 //敵01の影描画 pos EX(cnt),EY(cnt) color 0,0,0 circle EX(cnt),EY(cnt),EX(cnt)+32,EY(cnt)+16 //敵01の描画 pos EX(cnt),EY(cnt)-64 color 255,0,0 boxf EX(cnt),EY(cnt)-64,EX(cnt)+32,EY(cnt)-10 } //敵の当たり判定描画 color 255,255,255 line EX(cnt),EY(cnt),EX(cnt)+32,EY(cnt) line EX(cnt),EY(cnt)+16,EX(cnt)+32,EY(cnt)+16 line EX(cnt),EY(cnt),EX(cnt),EY(cnt)+16 line EX(cnt)+32,EY(cnt),EX(cnt)+32,EY(cnt)+16 loop //自機の影描画 pos MX,MY color 0,0,0 :circle MX,MY,MX+32,MY+16 //自機の描画 pos MX,MY-64 color 255,255,255 :boxf MX,MY-64,MX+32,MY-10 //自機の当たり判定描画 color 255,255,255 line MX,MY,MX+32,MY :line MX,MY+16,MX+32,MY+16 line MX,MY,MX,MY+16 :line MX+32,MY,MX+32,MY+16 //debug color 0,0,0 :font "MS ゴシック",12,1 pos 32,0 :mes "MX=" + MX :pos 96,0 :mes "MY=" + MY return //----------------------------------------------------- //■自機の移動(dot化) *MOVEME MDX=0 :MDY=0 //自機の移動量の初期化 stick KY,15,0 //キー入力情報取得 if KY=1 :MDX=-4 :HOUKOU=4 //カーソルキー左(←) if KY=4 :MDX=4 :HOUKOU=6 //カーソルキー右(→) if KY=2 :MDY=-4 //カーソルキー上(↑) if KY=8 :MDY=4 //カーソルキー下(↓) MX=MX+MDX :MY=MY+MDY //自機の移動先の座標 //MAP端の処理 if MX<0 :MX=0 :if MX>448 :MX=448 if MY<64 :MY=64 :if MY>304 :MY=304 return //===========================================================// //■マップ初期化 *SETMAP dim MAP,16,11 MAP(0,0) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,1) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,2) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,3) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,4) =0,0,0,0,4,0,0,0,0,0,0,0,0,0,0 MAP(0,5) =0,0,0,0,0,0,4,0,0,0,0,0,0,0,0 MAP(0,6) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,7) =0,0,0,0,0,0,0,4,0,0,0,0,0,0,0 MAP(0,8) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MAP(0,9) =0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 repeat 11 //縦幅 RCNT=cnt repeat 15 //横幅 if MAP(cnt,RCNT)=4 { //敵を配置 EX(TEKIKAZU)=cnt*32 //敵の座標 EY(TEKIKAZU)=RCNT*32 ELIVE(TEKIKAZU)=1 //敵の生存フラグ TEKIKAZU=TEKIKAZU+1 //敵の数を設定していく } loop loop return



この記事に返信する


晩御飯

リンク

2012/4/24(Tue) 00:39:07|NO.46242

ファイナルファイトがどうかはわからないんだけど
ベルトスクロールアクションって奥にいるキャラほどキャラと地面の接している位置が高くて
手前に来るほど低くなるよね
足元の高さでソートしたらいいんじゃないかな



たまって

リンク

2012/4/25(Wed) 00:56:32|NO.46258

はい、足元で判別するというのはわかったのですが
ソートの処理をこのソースにどうやって入れ込んだら良いかわからなくて
質問させていただきました
よろしくお願いいたします



暇人

リンク

2012/4/25(Wed) 07:03:58|NO.46261

ソートの方法はいろいろあるから
プラグン使って楽する方法

sortval、sortgetを使うから最初の方に#include "hspda.as" を追加して

//----------------------------------------------------- //■マップ表示 *DRAWMAP color 128,128,128 :boxf 0,0,479,479 //480*480灰色box表示 //敵ソート準備 dim ey_cpy,TEKIKAZU+1//sortvalにソートする配列要素数を指定できないから毎回確保(自分の座標を追加するから+1) memcpy ey_cpy, EY,TEKIKAZU*4 //ソート用にY座標をコピー(ソートにしか使わない、必要なのはどの要素が何番目に移動したか、sortgetで取り出し) ey_cpy(TEKIKAZU)=MY //敵座標と一緒にソートするから最後尾に自分の座標をセット(最後に自分の座標がソートされるから同じY座標なら敵を先に描画できて都合が良い) sortval ey_cpy,0 //ソート EX(TEKIKAZU)=MX //自分の座標(敵の表示を利用するから要素数オバーのエラーが出ないように自分の分を確保) EY(TEKIKAZU)=MY ELIVE(TEKIKAZU)=-1 //自分識別フラグ(同じように障害物とかも追加してけば全ての優先度の処理ができる) //敵の表示 repeat TEKIKAZU+1//一時的に自分の分を追加してるから+1 sortget cn,cnt //ソート元のインデックスを取得 if ELIVE(cn)=1{ //敵01の影描画 pos EX(cn),EY(cn) color 0,0,0 circle EX(cn),EY(cn),EX(cn)+32,EY(cn)+16 //敵01の描画 pos EX(cn),EY(cn)-64 color 255,0,0 boxf EX(cn),EY(cn)-64,EX(cn)+32,EY(cn)-10 }else{ if ELIVE(cn)=-1 {//自分識別フラグ検出(自分のフラグを入れた要素数で見ても良い TEKIKAZU=cn) //自機の影描画 pos MX,MY color 0,0,0 :circle MX,MY,MX+32,MY+16 //自機の描画 pos MX,MY-64 color 255,255,255 :boxf MX,MY-64,MX+32,MY-10 ELIVE(TEKIKAZU)=0 //念のため自分識別フラグクリア } } //敵の当たり判定描画 color 255,255,255 line EX(cn),EY(cn),EX(cn)+32,EY(cn) line EX(cn),EY(cn)+16,EX(cn)+32,EY(cn)+16 line EX(cn),EY(cn),EX(cn),EY(cn)+16 line EX(cn)+32,EY(cn),EX(cn)+32,EY(cn)+16 loop //debug color 0,0,0 :font "MS ゴシック",12,1 pos 32,0 :mes "MX=" + MX :pos 96,0 :mes "MY=" + MY return



暇人

リンク

2012/4/25(Wed) 07:07:47|NO.46262

あ、NO.46241の
//■マップ表示の部分を全てNO.46261のと置き換えね



たまって

リンク

2012/4/26(Thu) 00:25:40|NO.46271

無事にソート処理で動きました
わかりやすいコメント付きで、大変勉強になりました
ありがとうございます



ONION software Copyright 1997-2023(c) All rights reserved.