|
|
2012/2/25(Sat) 22:54:19|NO.45050
STGのスコア部分に画像を使用したいんですが
今はx座標範囲の160~480がゲーム画面で0~160、480~800がスコア画面としていて、スコア画面の下画像をes_exputで表示しています
そこで質問なのですが、今まではスプライトの表示範囲をes_areaやes_windowを使ってゲーム画面だけにしていたのですが
スコア画面でもスプライトを使うため画面全体を表示範囲にしたら自機弾や敵弾がスコア画面まで来るようになってしまいます
弾などのゲーム画面スプライトの表示範囲はゲーム画面のみにしたいんですけど…
説明下手ですみません
|
|
2012/2/25(Sat) 23:34:10|NO.45051
(;゚д゚)……
た、弾の座標をチェックして、x座標がゲーム画面から外れたらその弾を消す
という処理は思いつかなかったのか? それとも何かの理由でそれができないのか?
俺が質問の意味を全く取り違えている可能性もあるかもしれない。だったらごめん。
もしくはいま日本のチルドレンたちの中で、俺の知らない何かが起きているのか?
頼むから誰か教えてくれ。
|
|
2012/2/26(Sun) 00:26:42|NO.45052
>>ORZさん
弾は座標で管理してません…
弾はes_adirなどで動かしているので…
|
|
2012/2/26(Sun) 00:34:47|NO.45053
使用用途でスプライトNOを使い分ける
ゲーム画面用は100番以降を使うとか
es_area 0,0,800,480
es_window 0,0,800,480
es_draw 0,100//スコア画面用のスプライトNO
es_area 160-100,0-100,400,480
es_window 160,0,400,480
es_draw 100//ゲーム画面用のスプライトNO
|
|
2012/2/26(Sun) 01:53:15|NO.45055
普段管理していなかろうと、es_getでスプライトの座標は取得できるんでないの?
|
|
2012/2/26(Sun) 09:47:34|NO.45060
>>ORZさん
es_get命令見逃してました;;
*敵弾消去
es_get etamax,td,3
if etamax<160|etamax>640:es_kill etamax
return
こんな感じで書いたんですけどうまく消えてくれません
どこかおかしいでしょうか?
>>暇人さん
>> es_area 0,0,800,480
>> es_window 0,0,800,480
>> es_draw 0,100//スコア画面用のスプライトNO
>>
>> es_area 160-100,0-100,400,480
>> es_window 160,0,400,480
>> es_draw 100//ゲーム画面用のスプライトNO
これはメインループ内でやりますか?それてもメインループ外でしょうか?
|
|
2012/2/26(Sun) 10:10:12|NO.45061
>これはメインループ内でやりますか?それてもメインループ外でしょうか?
今までes_drawとだけしてたところと置き換え
領域設定とes_drawをセットで毎フレーム実行する
|
|
2012/2/26(Sun) 11:11:38|NO.45062
>>暇人さん
書いてみましたがうまくいきません
*メイン
es_cls
es_area 160,0,640,600
es_window 160,0,640,600
gosub*自機描画
frame++
getkey zkey , 90
gosub*自機
gosub*自機弾
gosub*敵機
gosub*敵弾
gosub*当たり判定
getkey b,27
if b=1:es_bye:end
es_draw 0,500
es_area 0,0,160,600
es_window 0,0,160,600
gosub*フレーム数
gosub*敵hp
es_draw 500,600
es_area 640,0,800,600
es_window 640,0,800,600
gosub*背景スクロール
gosub*スコア描画
gosub*HP描画
es_draw 600
es_sync 16
await 0
goto*メイン
左サイドが描画されないのと
スプライトがうまく消えてないのか弾切れ、スプライト切れをおこします
|
|
2012/2/26(Sun) 12:19:06|NO.45063
明らかに間違ってるのは
>es_draw 500,600
p2は指定したNOから何個描画するか
後、es_syncの前に全部並べた方が良い
es_area 160,0,640,600//開始位置は-領域まで指定しないと画面上に見えてるのに消えるよ
es_window 160,0,640,600
es_draw 0,500
es_area 0,0,800,600//ゲームメイン画面とそれ以外に分けられるから二回で済む
es_window 0,0,800,600
es_draw 500
es_sync
これでも上手く行かないなら他に原因がある
|
|
2012/2/26(Sun) 21:21:10|NO.45081
>>暇人さん
書きなおしてみましたがやはり同じ症状が出ます…
どこか間違ってますか?
es_syncの前に全部並べてみました
*メイン
es_cls ;画面クリア
gosub*自機描画
gosub*背景スクロール
frame++
getkey zkey , 90
gosub*自機
gosub*自機弾
gosub*敵機
gosub*敵機移動
gosub*敵弾種類
gosub*使用中のスプライト
gosub*敵弾
gosub*フレーム
gosub*敵hp
gosub*スコア描画
gosub*HP描画
es_area 160,0,640,600
es_window 160,0,640,600
es_draw 0,500
es_area 0,0,160,600
es_window 0,0,160,600
es_draw 500
es_area 640,0,800,600
es_window 640,0,800,600
es_draw 550
es_sync 16
await 0
goto*メイン
|
|
2012/2/26(Sun) 23:46:22|NO.45082
es_area 0,0,160,600
es_window 0,0,160,600
es_draw 500
es_area 640,0,800,600
es_window 640,0,800,600
es_draw 550
es_draw 500ここで500番以降の使用中のスプライトが全て表示されて
0,0,160,600のエリア外は削除されてる可能性が有る
やるならes_draw 500,50
NO.45063でも言った通り
es_area 0,0,800,600
es_window 0,0,800,600
es_draw 500//600何以降は表示処理したくないなら500,100になる
で良いはず
ダメなら他に原因がある
一度es_area、es_windowの設定を全て無くして
es_draw 0,500
es_draw 500
だけで表示されるか確かめる
これで表示できるならes_draw 500だけやってメインゲーム画面以外のスプライトが出てるかたしかめる
表示できるならメインゲーム画面以外のes_area、es_windowの設定だけして確かめる
みたいな感じで何処で表示できなくなるか自分で確かめる
#include "hspdx.as"
es_ini
onexit *owari
screen 0,800,600
es_screen 800,600,32,,1,1
buffer 3
color:boxf:color 255,255,255
mes "0123456789■○"
mes "-"
es_buffer 1,2
es_size 16,18,60
es_pat 0, 8*10,0
es_pat 1, 8*12,0
NumberSP=100//数字用スプライト開始NO
NumberPAT=50//数字用キャラクタ開始NO
es_size 8,18
es_pat NumberPAT, 0,18//-キャラクタ
repeat 10,NumberSP
es_pat NumberPAT+3+b, 8*b,0//数字用キャラクタ
es_exnew a,cnt,cnt//左側10桁数字用スプライト
es_set a,130-b*8,50,NumberPAT+3
es_exnew a,cnt+20,cnt+20//右側10桁数字用スプライト
es_set a,780-b*8,50,NumberPAT+3
b+
loop
gsel 0,1
es_cls
es_sync
wait 100
myx=400:myy=400
es_set 0,myx,myy,0 ; メインのスプライト
repeat
stick ky,$1f
if ky&$10 : gosub *ringo//スペース弾発射
if ky&$80 : goto *owari
es_cls 0,0,255
t=strf("%010d",cnt)
tc=strf("%010d",c)
repeat 10
es_setp cnt+NumberSP,ESI_CHRNO,peek(t,9-cnt)-'-'+NumberPAT//フレーム数(左側表示)
es_setp cnt+NumberSP+20,ESI_CHRNO,peek(tc,9-cnt)-'-'+NumberPAT//弾で使用した最新スプライトNO(右側表示)
loop
es_area 160-100,0-100,640,600
es_window 160,0,640,600
es_draw 0,NumberSP//ゲーム画面用のスプライト描画
es_area 0,0,800,480
es_window 0,0,800,480
es_draw NumberSP//数字用のスプライト描画
es_sync 16
await 0
loop
*ringo
es_exnew c,1,NumberSP-1//弾
if c<0{return}
es_set c,myx,myy,1
es_adir c,rnd(64),400
return
*owari
es_bye
end
方法に問題は無い
| |
|
2012/3/2(Fri) 20:14:11|NO.45176
>>暇人さん
返事遅くなってすみません
自分で色々試してみましたができません…
手軽そうな方法にしようとes_getとes_killで敵弾を消す方法にしようと思うのですが
*敵弾消去
es_get etamax,td,3
if etamax<160|etamax>640:es_kill etamax
return
これで消えてくれないんですがどこか間違ってますか?
|
|
2012/3/2(Fri) 20:36:03|NO.45177
どの変数が何に使われて
何に使ってる変数を命令に渡してるか
良く見て
>自分で色々試してみましたができません…
順番に試してく事も出来ないのか・・・
|
|
2012/3/2(Fri) 20:59:55|NO.45178
>>暇人さん
すみません。自分の悪い癖がでました。
es_window,es_areaをとったところ、両サイドきちんと画像が表示され、敵弾もゲーム画面内だけ動き、弾切れもありませんでした
|
|
2012/3/2(Fri) 21:40:09|NO.45181
>es_window,es_areaをとったところ、両サイドきちんと画像が表示され、敵弾もゲーム画面内だけ動き、弾切れもありませんでした
何故そこで止めてしまうのか・・・
どの条件で表示されなかったり弾切れ起すのかとか色々試せば良いのに・・・
|
|
2012/3/2(Fri) 22:41:50|NO.45185
>>暇人さん
最後の
es_area 460,0,600,600
es_window 460,0,600,600
gosub*スコア描画
gosub*HP描画
es_draw 850//550から変えました
この es_area 460,0,600,600
es_window 460,0,600,600
を入れると両サイドの画像が表示されません
また、敵が弾を発射するとfpsが激的に下がり、動きが遅くなります
|
|
2012/3/2(Fri) 23:53:49|NO.45191
あ、es_exput使ってるならes_windowの順番は考える必要がある
スプライトより下(奥)に表示させたいだけならループの始めの方で
es_window 0,0,800,600(ウィンドサイズ) を実行をして(es_exputにes_areaは関係ない)
スプライトの表示エリアはes_sync前に並べる
NO.45081の場合
*メイン
es_cls ;画面クリア
es_window 0,0,800,600
gosub*自機描画
gosub*背景スクロール
frame++
getkey zkey , 90
gosub*自機
gosub*自機弾
gosub*敵機
gosub*敵機移動
gosub*敵弾種類
gosub*使用中のスプライト
gosub*敵弾
gosub*フレーム
gosub*敵hp
gosub*スコア描画
gosub*HP描画
es_area 0,0,800,600
es_window 0,0,800,600
es_draw 850
es_area 160-128,-128,640,600
es_window 160,0,640,600
es_draw 0,500
es_sync 16
await 0
goto*メイン
な、感じになる
>また、敵が弾を発射するとfpsが激的に下がり、動きが遅くなります
es_area をウィンドウサイズで設定した場合を見る
弾のスプライトが何個使用中になってるのかとか
色々表示させて原因を突き止める
|
|
2012/3/3(Sat) 00:59:13|NO.45193
>>暇人さん
できました!
丁寧なご指導、ありがとうございました。
またよろしくおねがいします
|
|