|
 |
|
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以上敵を出してるから
動く様にしただけじゃテストにならなかった
|
|
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を読み違えてました…
何とかなりそうです
未熟者ですみません
|
|