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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0908
マッキーアクションゲームでの描画順番について2解決


マッキー

リンク

2006/9/8(Fri) 19:26:39|NO.2323

初めまして、アクションゲームを作っているマッキーと言います。

自分の作っているアクションゲームは
フィールド上を上下左右に動けて、プラスジャンプ出来るタイプのアクションゲームです。
変数は横X,高さY,奥行きZと三つ使っています。

そこで、たくさん敵を表示するまでは出来たのですが
キャラの重なり方がおかしいので、調べている内に
グラフィックを描画する順番が原因なのがわかりました。

取り合えずバブルソートを使って、Zの値が低い順にグラフィックを描画しました。
この様にして見たのですが



repeat max kari.cnt = z.cnt loop //ソート開始 バブルソート repeat max,1 repeat max - 1,1 if (kari.(cnt-1) > kari.cnt){ kari.(cnt-1)=kari.(cnt-1)^kari.cnt kari.cnt=skari.cnt^kari.(cnt-1) kari.(cnt-1)=kari.(cnt-1)^kari.cnt } loop loop //50まで repeat max switch sortkari.cnt //主人公 case z.0 pos x.0,(z.0 + y.0) gcopy g.0,sx.0,sy.0,size.0,size.0 swbreak //↑ //これを.0の部分を50まで増やして同じ風に書いています。 ・・・ swend loop return
これだと、Z値が同じグラフィック同士が並ぶと
主人公では無い方が消えてしまいます。

敵を出現させる変数として、主人公から敵の終わりの番号までフラグを作ってあるので
それを使えないか考えたのですが、キャラのZ値とそのフラグの関係がわかりませんでした。

どう言う風にやるとキャラ同士のZ値が同じでも片方が消えないで済むでしょうか。
また、もしこれより簡単で良い方法があったとしたら教えて欲しいです。



この記事に返信する


KIMU

リンク

2006/9/9(Sat) 02:55:04|NO.2331

>フィールド上を上下左右に動けて、プラスジャンプ出来るタイプのアクションゲームです。
ファイナルファイト(古…)とかみたいなのかな?

>それを使えないか考えたのですが、キャラのZ値とそのフラグの関係がわかりませんでした。
z値の場所をソートしたなら一緒にキャラ管理番号も同じ順番に変える
(z値を1000倍とかして1000未満ににキャラ識別番号を入れるとか)


max=4 dim kari,max:dim z,max:dim y,max:dim x,max:dim c,max:dim cno,max:dim col,max col=$00ff00,$ff0000,$0000ff,0 //■が自分 カーソルキーでxz移動 chr="■","A","B","C" randomize repeat max c(cnt)=cnt ;キャラナンバー x(cnt)=16*cnt+300 y(cnt)=400 z(cnt)=rnd(10) loop repeat redraw 0 color 255,255,255:boxf stick ky,$ff:if ky&128{end} if ky&1{x-2}else{if ky&4{x+2}} if ky&2{z-1}else{if ky&8{z+1}} memcpy kari,z,4*max memcpy cno,c,4*max repeat max,1 repeat max - 1,1 if (kari(cnt-1) > kari(cnt)){ a=kari(cnt) ;HSPでは普通に入れ替え用変数使った方が早い kari(cnt)=kari(cnt-1) kari(cnt-1)=a a=cno(cnt) ;ナンバーも一緒に移動 cno(cnt)=cno(cnt-1) cno(cnt-1)=a } loop loop repeat max chno=cno(cnt) pos 0,cnt*16 color 100,100,100 mes str(chr(chno))+" z="+z(chno) switch kari(cnt) case z color col(chno)>>16,(col(chno)>>8)&$ff,col(chno)&$ff pos x(chno),y(chno)+z(chno) mes chr(chno) swbreak case z(1) color col(chno)>>16,(col(chno)>>8)&$ff,col(chno)&$ff pos x(chno),y(chno)+z(chno) mes chr(chno) swbreak case z(2) color col(chno)>>16,(col(chno)>>8)&$ff,col(chno)&$ff pos x(chno),y(chno)+z(chno) mes chr(chno) swbreak case z(3) color col(chno)>>16,(col(chno)>>8)&$ff,col(chno)&$ff pos x(chno),y(chno)+z(chno) mes chr(chno) swbreak swend loop wait 1 redraw 1 loop



マッキー

リンク

2006/9/9(Sat) 10:18:27|NO.2335

貴重なサンプルをどうもありがとうございました。
とてもためになりました。
z値と一緒にキャラナンバーもソートすると言う事がわかって、解決しました。
キャラナンバーは今まで中身は1か0だったのですが
chara.3だったら生存してたら中身は3と言う風に変えて
z値と一緒にソートしたキャラナンバー順に描画する方式に変えました。
また壁にぶつかったら質問させて下さい。

こんな様な感じになりました。


repeat max kari.cnt = z.cnt kari2.cnt = number.cnt loop //ソート開始 バブルソート repeat max,1 repeat max - 1,1 if (kari.(cnt-1) > kari.cnt){ a = kari(cnt) kari(cnt) = kari(cnt-1) kari(cnt) = a a = kari2(cnt) kari2(cnt) = kari2(cnt-1) kari2(cnt) = a } loop loop //50まで repeat max switch kari2.cnt //主人公 case number.0 pos x.0,(z.0 + y.0) gcopy g.0,sx.0,sy.0,size.0,size.0 swbreak //↑ //これを.0の部分を50まで増やして同じ風に書いています。 ・・・ swend loop return



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