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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0204
ラクタンシェ追い越し弾処理9解決


ラクタンシェ

リンク

2012/2/4(Sat) 11:18:57|NO.44711

こんにちは。
HSPDXFIXでゲームを作ってます。
追い越し弾を作ってみて下のようなスクリプトを書いて成功したんですけど、
実際に作成中のゲームのスクリプトに入れてみたらうまく追い越してくれません。
具体的には角度がずれてくれません。一直線で弾が追い越してる感じです。
どこかに不備があるか診断お願いします。
↓追い越し弾 自機弾などは省略してあります


;メインルーチン---------------------------------- x=300:y=220 ;自機座標の初期値設定 ex=300:ey=50 jts=9//一気に出せる自機弾の数。ポイントアップで増やしていくよう frame=0 tsp=0 ang=0 tspeed=0 stopper=0 ef=0 *メイン es_cls ;画面クリア es_set 0,x,y,0,1 ;スプライト描画準備 frame=frame+1 getkey zkey , 90 gosub*自機 gosub*自機弾 if frame>500:ef=2 gosub*敵機 if stopper=0:gosub*敵弾 getkey b,27 ;Escキーが押されていればbに1を代入 if b=1:es_bye:end ;b=1なら終了 es_mes ""+frame es_draw ;スプライト描画 es_sync 16 ;画面更新 await 0 ;CPUタスク空け goto*メイン *敵機 es_new tk,0 es_set tk,ex+50,ey+50,3,1,0 e++ es_set 1,ex,ey,2,1,6 ;自機スプライト描画準備 es_effect 1,128,128,0,0,180+e,$FF00FF return *敵弾 if frame\6=0{ if ef=2{ count++ ang++ tspeed+=10 repeat 5 es_exnew td es_set td,ex+10,ey+30,4,1 ;敵弾スプライト設置 es_adir td,0+10*cnt,tspeed+100 ;移動方向 es_effect td,,,0,0,10*ang;弾のエフェクト方向 loop if tspeed>100:tspeed=0 } } return
↓実際に作成中のゲームにいれて失敗したスクリプト 自機弾処理などは省いてあります


;メインルーチン---------------------------------- x=220.0:y=500.0 ;自機座標の初期値設定 ex=180.0:ey=-100.0 ef=0 jts=3//一気に出せる自機弾の数。ポイントアップで増やしていくよう ehp=0//敵のhp frame=0 ssp=5 scr=0 es_area 0,0,480,600 es_window 0,0,480,600 xf=1 eg=10.0 hp=3 ang=0 tspeed=0 ecnt=4 count=0 stopper=0 *メイン es_cls ;画面クリア color 0,0,0 es_boxf 480,0,800,600 gosub*自機描画 frame++ gosub*背景スクロール getkey zkey , 90 gosub*自機 gosub*自機弾 gosub*敵機 gosub*敵機移動 gosub*使用中のスプライト if ef=2:gosub*敵弾 gosub*当たり判定 getkey b,27 ;Escキーが押されていればbに1を代入 if b=1:es_bye:end ;b=1なら終了 pos 500,50 es_mes "フレーム数    "+frame es_getfps fps pos 500,100 es_mes "FPS   "+fps pos 500,150 es_mes "自機数   "+hp pos 350,100 es_mes ""+ehp pos 500,450 es_mes ""+spcnt//スプライト数 color 255,255,0 es_boxf 10,10,eg,24;ボスゲージ表示 es_draw ;スプライト描画 es_sync 16 ;画面更新 await 0 ;CPUタスク空け goto*メイン *使用中のスプライト spno=0 spcnt=0 repeat es_find spno,0,spno if spno<0 {break} spcnt+ spno+ loop *背景スクロール mapd1+=5;スクロール速度 es_exput 0,mapd1,4 es_exput 0,mapd1-643,4//643のところは元の画像のyサイズ if mapd1>643 : mapd1=0 return *敵機 if ef!=0{ es_type 1,8 es_set 1,ex+50,ey+50,3,1,0 } if ef=2{ e++ es_set 2,ex,ey,2,1,6 ;自機スプライト描画準備 es_effect 2,128,128,0,0,180+e,$FF00FF } return *敵機移動 if frame>100{ ef=1 ey++ if ey>50.0{ ey=50.0 ef=2 if egf!=1:goto*ボスゲージ } } return *敵弾 if frame\6=0{ if ef=2{ count++ ang++ tspeed+=10 repeat 5 es_exnew td es_set td,ex+10,ey+30,7,1 ;敵弾スプライト設置 es_adir td,0+10*cnt,tspeed+100 ;移動方向 es_effect td,,,0,0,10*ang;弾のエフェクト方向 loop if tspeed>100:tspeed=0 } } return *当たり判定 es_check jhit,0,24 if jhit !=-1{ hp-- if hp<0:hp=0 pos 500,300 es_mes "ヒット!" es_kill jhit } es_check ehit,1,6 if ehit!=-1{ if ef=2{ ehp=ehp-atk if eg>10:eg=eg-atkg if ehp<0:ecnt--:goto*ボスゲージ if ecnt<0:egf=0 es_kill ehit } } return *ボスゲージ if ef=2{ eg+=2 ehp+=10 if ehp>2000:ehp=2000 if eg>410.0:eg=410.0:egf=1 } return



この記事に返信する


暇人

リンク

2012/2/4(Sat) 18:30:03|NO.44714

上も下も弾は同じ実行結果なので質問が意味不明に・・・
5方向(均等な角度じゃない)に追い越し弾が飛んでく

後、数行の追加削除でそのまま動かせるようになるんだから
どうせならコピペして直ぐに動かせるようにするべき
こちらで動くように出来ても必要な部分が削除されてて
不具合が再現できない可能性も出てくる

上のは弾が出るまでに500以上敵を出してるから
動く様にしただけじゃテストにならなかった



KA

リンク

2012/2/4(Sat) 18:30:35|NO.44715

単独でうまくいくのなら、どこかで間違っています。
それくらいは自分で探せるようになりましょう。



ラクタンシェ

リンク

2012/2/4(Sat) 20:06:28|NO.44720

すみません
スクリプトを実行できる範囲にしました
敵が上から降りてきて追い越し弾を撃つ…って感じにしたくて作ったんですけどできません…


;初期化---------------------------------------------------- #include "hspdxfix.as" #include "hsp3util.as" es_ini 1000,1000,360 dialog "フルスクリーンで起動しますか?",2,"スクリーン設定" if stat=6:scrsyz=0 if stat=7:scrsyz=1 es_screen 800,600,32,,scrsyz,1 if stat : dialog"HSPDXFIX : DirectXの初期化に失敗":end *start gsel 0:mmstop:es_cls:es_draw:es_sync:wait 100 ;---------------------------------------------------------- buffer 1 picload "_shot3黒.bmp" es_buffer 1,0,$000000 ;転送失敗時 if stat=1 { es_bye dialog "転送に失敗しました。",1,"Error" end } ;キャラクタ登録 //敵 es_size 30,30,100,0 es_pat 3,160,0 //敵弾 es_size 20,20,100,0 es_pat 4,0,20,0 ;メインルーチン---------------------------------- x=220.0:y=500.0 ;自機座標の初期値設定 ex=180.0:ey=-100.0 ef=0 jts=3//一気に出せる自機弾の数。ポイントアップで増やしていくよう ehp=0//敵のhp frame=0 ssp=5 scr=0 es_area 0,0,480,600 es_window 0,0,480,600 xf=1 eg=10.0 hp=3 ang=0 tspeed=0 ecnt=4 count=0 stopper=0 *メイン es_cls ;画面クリア color 0,0,0 es_boxf 480,0,800,600 frame++ gosub*敵機 gosub*敵機移動 if ef=2:gosub*敵弾 getkey b,27 ;Escキーが押されていればbに1を代入 if b=1:es_bye:end ;b=1なら終了 pos 500,50 es_mes "フレーム数    "+frame es_getfps fps pos 500,100 es_mes "FPS   "+fps pos 500,150 es_mes "自機数   "+hp pos 350,100 es_mes ""+ehp pos 500,450 es_draw ;スプライト描画 es_sync 16 ;画面更新 await 0 ;CPUタスク空け goto*メイン *敵機 if ef!=0{ es_type 1,8 es_set 1,ex+50,ey+50,3,1,0 } return *敵機移動 if frame>100{ ef=1 ey++ if ey>50.0{ ey=50.0 ef=2 if egf!=1 } } return *敵弾 if frame\6=0{ if ef=2{ count++ ang++ tspeed+=10 repeat 5 es_exnew td es_set td,ex+10,ey+30,4,1 ;敵弾スプライト設置 es_adir td,0+10*cnt,tspeed+100 ;移動方向 es_effect td,,,0,0,10*ang;弾のエフェクト方向 loop if tspeed>100:tspeed=0 } } return



暇人

リンク

2012/2/4(Sat) 20:40:07|NO.44721

いやそうじゃ無くて
そのスクリプトだけで実行できるように
そのスクリプトじゃ画像も必要でしょ

まぁ、picloadをコメントアウトして動かしたけど何が問題なのか分からない
右下5方向に追い越し弾が出てる



ラクタンシェ

リンク

2012/2/4(Sat) 21:17:46|NO.44724

>>暇人さん
角度もずれてますか?
自分がやるとスピードはうまくできてますが角度がずれなくて…



暇人

リンク

2012/2/4(Sat) 21:38:43|NO.44726

>角度もずれてますか?
5方向の追い越し弾で
後から出た玉が少しずつ
飛んでく角度が変わる
ってーのがやりたい事?

それなら最初に出した上側のスクリプトでも出来て無いんじゃ?

> es_adir td,0+10*cnt,tspeed+100 ;移動方向

毎回10*cntしか角度を変えてないんだから当然の結果でしょ
移動スピードは毎フレーム変える事が出来てるのに
何故移動する方向の方はやってないの・・・



ラクタンシェ

リンク

2012/2/4(Sat) 21:49:50|NO.44727

>>暇人さん
上側ではできたんですよね…なぜかはわかりませんが

>es_adir td,0+10*cnt,tspeed+100
10度づつの間隔で5つだしてes_effectでずらせるんじゃないかと思ったんですけど…



暇人

リンク

2012/2/4(Sat) 22:07:12|NO.44728

>es_effectでずらせるんじゃないかと思ったんですけど…
それは画像の角度でしょ?
実際に画像の角度は最初から発射毎にずれてるし



ラクタンシェ

リンク

2012/2/4(Sat) 22:39:14|NO.44732

>>暇人さん
es_effectを読み違えてました…
何とかなりそうです
未熟者ですみません



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