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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0225
ラクタンシェスプライト有効範囲 directx17解決


ラクタンシェ

リンク

2012/2/25(Sat) 22:54:19|NO.45050

STGのスコア部分に画像を使用したいんですが
今はx座標範囲の160~480がゲーム画面で0~160、480~800がスコア画面としていて、スコア画面の下画像をes_exputで表示しています
そこで質問なのですが、今まではスプライトの表示範囲をes_areaやes_windowを使ってゲーム画面だけにしていたのですが
スコア画面でもスプライトを使うため画面全体を表示範囲にしたら自機弾や敵弾がスコア画面まで来るようになってしまいます
弾などのゲーム画面スプライトの表示範囲はゲーム画面のみにしたいんですけど…
説明下手ですみません



この記事に返信する


ORZ

リンク

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



ORZ

リンク

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

>>暇人さん
できました!
丁寧なご指導、ありがとうございました。
またよろしくおねがいします



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