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