|
 |
|
2020/1/2(Thu) 19:42:15|NO.89149
新年あけましておめでとうございます。これからもよろしくおねがいします。
さて、いつもどおりhspdxfix.asプラグインで作った、STGゲームの質問になります。
アイテムが画面外に行ってから、新しくアイテムを出現させると、
アイテムを自動回収できなくって困っております。
っていうかそもそも、アイテムが画面外に行ってから、新しくアイテムを出現させると、
「TEKI_AI_SOTO_f」のフラグに「1」が立たないので処理の仕方が悪いです・・・
その処理の仕方がよくなれば多分自動回収もうまくいくと思っております。
少しでもアドバイスがいただければ幸いです。
■仕様■
・敵を撃破すると1匹につき1個のアイテムを倒した敵から出す
・アイテムが一定時間上に移動後、下に移動する
・自機が画面上部に移動したとき、画面内にあるアイテムを自機に引き寄せる
・アイテムが画面外に行ったら、そのアイテムは引き寄せ発生させない
#include "hspdxfix.as" ;DXライブラリ使用
width ,,130,200 ;ウィンドウの位置
es_ini 750,800,360 ;スプライトの最大数、キャラクタ定義の最大数,周の精度(180*2)
es_screen 640,480 ,0,0,1,1 ;スクリーン
es_window 0,0, 415,480 ;スプライト表示エリア設定
es_area -15,-50, 610,490 ;スプライト有効エリア設定
;---アイテム---
es_size 12,12, 100
es_pat 300, 523,26
;---自機---
es_size 28,42, 100
es_pat 150, 0,0
JIKI_x = 186 : JIKI_y = 302
JIKISpd = 4 ;自機のスピード
;---自機弾---
es_size 11,11, 150
es_pat 51, 1,43
;---敵---
es_size 18,19, 50
es_pat 60, 0,0
;敵配置
TEKI_MAX = 5 ;最大数
;アイテム
AI_MAX = 5 ;最大数
dim TEKI_AI_SOTO_f,AI_MAX ;アイテム枠外フラグ(デバック用)
dim TK_AI_TUNZ,AI_MAX ;アイテムのカウントを収納する(デバック用)
;▼▼▼▼▼敵配列▼▼▼▼▼
TEKI_x = 200,200,200,200,200
TEKI_y = 90,130,170,210,250
;■■■■■敵配置■■■■■
repeat TEKI_MAX ;敵の最大数(5)
es_exnew TEKI, 80,84 ;新規スプライトNo (敵:80~84)
es_set TEKI, TEKI_x(cnt),TEKI_y(cnt), 60 ;スプライトNo, X,Y座標 ,キャラNo
es_type TEKI,4096
loop
;************メインループ***************
*メイン
es_cls
es_draw
pos 420,30 : es_mes "高いエリアフラグ " + AI_ERIA_JK_f
pos 420,50 : es_mes "自機y " + JIKI_y
pos 420,70 : es_mes "アイテムターン数 " + AI_JSY
pos 420,90 : es_mes "アイテム取得数 " + AI_HIT
pos 420,110 : es_mes "上昇カウントストップ " + TK_AI_STOP_c
pos 420,140 : es_mes "TEKI_AI_SOTO_f(0) " + TEKI_AI_SOTO_f(0)
pos 420,160 : es_mes "TEKI_AI_SOTO_f(1) " + TEKI_AI_SOTO_f(1)
pos 420,180 : es_mes "TEKI_AI_SOTO_f(2) " + TEKI_AI_SOTO_f(2)
pos 420,200 : es_mes "TEKI_AI_SOTO_f(3) " + TEKI_AI_SOTO_f(3)
pos 420,220 : es_mes "TEKI_AI_SOTO_f(4) " + TEKI_AI_SOTO_f(4)
pos 420,250 : es_mes "TK_AI_TUNZ(0) " + TK_AI_TUNZ(0)
pos 420,270 : es_mes "TK_AI_TUNZ(1) " + TK_AI_TUNZ(1)
pos 420,290 : es_mes "TK_AI_TUNZ(2) " + TK_AI_TUNZ(2)
pos 420,310 : es_mes "TK_AI_TUNZ(3) " + TK_AI_TUNZ(3)
pos 420,330 : es_mes "TK_AI_TUNZ(4) " + TK_AI_TUNZ(4)
pos 20,159 : es_mes "↑ここから画面上部↑------------------"
;アイテム座標を取得する
AI_mes_x = 380 ;メッセージX座標
AI_ERIA_no = 360 ;検索ID
repeat AI_MAX ;アイテムの最大数(5)
es_get AI_pos_x,AI_ERIA_no,3 ;X
es_get AI_pos_y,AI_ERIA_no,5 ;Y
AI_mes_x += 40 ;複数見るためにずらす
pos AI_mes_x,380 : es_mes "" + AI_pos_x ;X
pos AI_mes_x,400 : es_mes "" + AI_pos_y ;Y
AI_ERIA_no++ ;検索ID
loop
;*************カウンター****************
es_set 150, JIKI_x,JIKI_y, 150 ;自機表示
gosub *自機の移動
gosub *自機弾移動
gosub *敵処理
gosub *アイテム
gosub *アイテム当たり判定
es_sync ;画面更新
await 16
goto *メイン
;**************自機の移動***************
*自機の移動
stick key,15 ;キー取得
if key & 1 : JIKI_x = JIKI_x - JIKISpd ;←の移動
if key & 2 : JIKI_y = JIKI_y - JIKISpd ;↑の移動
if key & 4 : JIKI_x = JIKI_x + JIKISpd ;→の移動
if key & 8 : JIKI_y = JIKI_y + JIKISpd ;↓の移動
return
;*************自機弾移動****************
*自機弾移動
getkey keyZ,90 ;Zキー
JK_TAMA_G_kazu = 0
if keyZ AND JKSO_f = 0 AND RENSA = 0 {
es_exnew JK_TAMA ,10,30 ;新規スプライト取得
;---弾の判断---
if JK_TAMA_c >= 1 {
JK_TAMA_dai_Kz = JK_TAMA_c \ 2
if JK_TAMA_dai_Kz = 0 : JK_TAMA_G_kazu += 1
}
JK_TAMA_c++ ;ループ内カウンター
if JK_TAMA_G_kazu = 0 : JKSO_x = JIKI_x-6 ;左側
if JK_TAMA_G_kazu = 1 : JKSO_x = JIKI_x+18 ;右側
JKSO_y = JIKI_y
es_set JK_TAMA, JKSO_x,JKSO_y, 51 ;スプライトNo, X,Y座標 ,キャラNo
es_apos JK_TAMA, 0,-15 ,100 ;↑に移動
RENSA = 2 ;弾の間隔
es_type JK_TAMA,2 ;自機弾type値(2)
}
if RENSA > 0 : RENSA -= 1 ;弾の間隔
return
;*************敵処理****************
*敵処理
TEKI_no = 80 ;検索ID
repeat TEKI_MAX ;敵の最大数(5)
es_find TEKI_D, 4096, TEKI_no,84
es_check TEKI_VS_TAMA ,TEKI_D,2 ;敵(4096),自機弾(2)
if TEKI_VS_TAMA != -1 {
TEKI_HIT_no = TEKI_D
gosub *敵アイテム
es_kill TEKI_D ;敵「削除」
es_kill TEKI_VS_TAMA;自機弾「削除」
}TEKI_no++
loop
return
;************敵アイテム*****************
*敵アイテム
es_get TK_P_AI_x,TEKI_HIT_no,3 ;X座標
es_get TK_P_AI_y,TEKI_HIT_no,5 ;Y座標
es_exnew TK_P_AI_no, 360,364 ;新規スプライトNo
es_set TK_P_AI_no, TK_P_AI_x,TK_P_AI_y, 300 ;スプライトNo, X,Y座標 ,キャラNo
es_apos TK_P_AI_no, 0,-1 ,100 ;↑に移動
es_type TK_P_AI_no,8 ;アイテムtype値
TK_AI_no_D = TK_P_AI_no - 360 ;配列を作る
TK_AI_TUNZ(TK_AI_no_D) = AI_JSY + 50 ;フレームごとに進むカウンター + 何フレーム経過したら下に移動するか
return
;************アイテム*****************
*アイテム
es_get AI_ERIA_JK_y,150,5 ;自機Y
if AI_ERIA_JK_y <= 159 : AI_ERIA_JK_f = 1 ;高いエリア
if AI_ERIA_JK_y >= 202 : AI_ERIA_JK_f = 0 ;高いエリア以外(すぐに下に移動すると回収しなくなるので猶予がある)
;上昇したアイテムが上限に達したら、アイテム上昇カウントをしない
if TK_AI_STOP_c <= AI_MAX : AI_JSY += 1
;アイテムが画面外に行ったら実行
AI_no = 360 ;アイテムの検索開始ID(360)
repeat AI_MAX ;アイテムの最大数(5)
es_get AI_Di_y,AI_no,5 ;アイテムY
TK_AI_Di_D = AI_no - 360;配列を作る
if AI_Di_y >= 480 : TEKI_AI_SOTO_f(TK_AI_Di_D) = 1 ;アイテム画面外フラグを立てる
;es_kill TK_AI_Di_DI ;アイテムを削除する → 削除できなかった
AI_no++ ;検索ID
loop
;アイテム自動回収
if AI_ERIA_JK_f = 1 { ;自機が高いエリアに行ったら実行
AI_ERIA = 360 ;検索ID
repeat AI_MAX ;アイテムの最大数(5)
es_get AI_type,AI_ERIA,13 ;アイテムtype値
TK_AI_ERIA_D = AI_ERIA - 360;配列を作る
if TEKI_AI_SOTO_f(TK_AI_ERIA_D) = 0 { ;アイテム画面外フラグ
if AI_type = 8 { ;アイテムがあれば実行する
es_get AI_ERIA_x(cnt),AI_ERIA,3 ;X座標
es_get AI_ERIA_y(cnt),AI_ERIA,5 ;Y座標
es_ang AI_ERIA_x(cnt),AI_ERIA_y(cnt),JIKI_x+7,JIKI_y+7;角度取得
AI_ERIA_ang(cnt) = stat ;自機の方向
es_adir AI_ERIA, AI_ERIA_ang(cnt),4000 ;スプライト移動方向設定
AI_ERIA++ ;検索ID
}
}
loop
} else {
AI_TUN_no = 360 ;検索ID
repeat
es_find TK_AI_TUN_D, 8, AI_TUN_no, 364
if TK_AI_TUN_D = -1 : break
TK_AI_SP_D = TK_AI_TUN_D - 360
if AI_JSY = TK_AI_TUNZ(TK_AI_SP_D) {
es_apos TK_AI_TUN_D, 0,1 ,300 ;↓に移動
if TK_AI_STOP_c <= 5 : TK_AI_STOP_c++ ;アイテムが最大数まで行くまでにアイテムストップをカウントする
}
AI_TUN_no = TK_AI_TUN_D + 1 ;最後までアイテムが出現したら+1をする
if AI_TUN_no > 364 : break ;+1した数値以上ならループを抜ける
loop
}
return
;*********アイテム当たり判定*****************
*アイテム当たり判定
repeat
es_check JIKI_VS_TEKI_AI ,150,8 ;150(自機),8(アイテム)
if JIKI_VS_TEKI_AI = -1 : break ;当たっていない場合はループを抜ける
es_kill JIKI_VS_TEKI_AI ;アイテム「削除」
AI_HIT++ ;アイテム取得をカウントする(デバック用)
loop
return

| |
|
2020/1/3(Fri) 20:07:48|NO.89157
きちんと仕様のように動いているかはわかりませんが
スクリプトのアイテム自動回収の真ん中ぐらいの
AI_ERIA++ ;検索ID
}
}
loop
はループ手前に移動したほうがよさそうです
}
}
AI_ERIA++ ;検索ID
loop
|
|
2020/1/3(Fri) 20:51:22|NO.89158
kさん、返答ありがとうございます!
確かに「AI_ERIA++ ;検索ID」はその位置じゃないとダメですね。
何という凡ミス・・・
けれどやっぱり不具合が治らないままですね・・・
|
|
2020/1/3(Fri) 21:52:27|NO.89160
検証不足でした(_ _)
ではスクリプトの敵アイテムの最後に
アイテム画面外フラグの再クリア追加でどうでしょうか
*敵アイテム
・
・
・
TEKI_AI_SOTO_f(TK_AI_no_D) = 0
return
きちっと検証したわけではないので他にもあるかもしれません
|
|
2020/1/3(Fri) 22:59:32|NO.89161
全てを読んだわけではありませんが、少々気になった所を抜粋します。
;アイテムが画面外に行ったら実行
AI_no = 360 ;アイテムの検索開始ID(360)
repeat AI_MAX ;アイテムの最大数(5)
es_get AI_Di_y,AI_no,5 ;アイテムY
TK_AI_Di_D = AI_no - 360;配列を作る
if AI_Di_y >= 480 : TEKI_AI_SOTO_f(TK_AI_Di_D) = 1 ;アイテム画面外フラグを立てる
;es_kill TK_AI_Di_DI ;アイテムを削除する → 削除できなかった
AI_no++ ;検索ID
コメントアウトになっている TK_AI_Di_DI という変数はどこから来たのか……
念のため検索しましたがほかでは使っていませんよね。
これはスプライト№を指定する箇所なので
es_kill AI_no
このように書くのが正しいかと思いました。
さらに、そのままだと全てのアイテムを登場と同時に削除してしまうので
;アイテムが画面外に行ったら実行
AI_no = 360 ;アイテムの検索開始ID(360)
repeat AI_MAX ;アイテムの最大数(5)
es_get AI_Di_y,AI_no,5 ;アイテムY
TK_AI_Di_D = AI_no - 360;配列を作る
if AI_Di_y >= 480 {
TEKI_AI_SOTO_f(TK_AI_Di_D) = 1 ;アイテム画面外フラグを立てる
es_kill AI_no ;アイテムを削除する → 削除できなかった
}
AI_no++ ;検索ID
loop
このようにif文の範囲を変更して画面外に出たものだけ削除とすればどうでしょうか?
|
|
2020/1/4(Sat) 09:04:11|NO.89164
kさん、再度解答ありがとうございます!
いえいえ、複数バグがある気がしたので検証不足でも問題でいです。
>ではスクリプトの敵アイテムの最後に
>アイテム画面外フラグの再クリア追加でどうでしょうか
おぉ、たしかにこれならかなり仕様通りに動きますね!
しかし特定のときにアイテム自動回収をしなくなってしまいますね・・・
原因はこのあとまとめますね
|
|
2020/1/4(Sat) 09:10:31|NO.89165
あやらさん、回答ありがとうございます。
>コメントアウトになっている TK_AI_Di_DI という変数はどこから来たのか……
ぎゃああああああ。
こんなことを試したけどうまくいかなかったよ、っていうのを残したら裏めった。
本ソースからコピペした結果ですね・・・
>このようにif文の範囲を変更して画面外に出たものだけ削除とすればどうでしょうか?
やってみましたが、アイテムを自動回収してくれないですね・・・
修正したスクリプトを次のレスでしますね!
|
|
2020/1/4(Sat) 09:37:51|NO.89166
kさん、あやらさんの指摘箇所を入れました。
それと元々処理がおかしかったところを修正しました。
おかげさまで自動回収機能の8割型は直ったと思います。
「if TK_AI_STOP_c <= 5 : TK_AI_STOP_c++」はアイテム上昇中に取得すると「+1」されなくなるので無くしました。
アイテムは「敵、でかい敵、ボス」全体をコントロールする予定なので、ボス撃破してから「AI_JSY」を止めればいいので修正しました。
それに伴い「TK_AI_STOP_c」のメッセージカウンターも削除。
追加、修正箇所は「;---追加---」みたいに入れときます。
新しい問題点が見つかりましたので手順にしますね。
■手順■
1.1個アイテムを出現させて下に移動させる(アイテムは取得しない)
2.2個目のアイテムを出現させる
3.自動回収しようと画面上部に行くと、アイテムが自動回収できない
アイテムが下に移動している最中に新しいアイテムを出現させると、
自動回収できなくなってしまう不具合ですね(´・ω・`)
#include "hspdxfix.as" ;DXライブラリ使用
width ,,130,200 ;ウィンドウの位置
es_ini 750,800,360 ;スプライトの最大数、キャラクタ定義の最大数,周の精度(180*2)
es_screen 640,480 ,0,0,1,1 ;スクリーン
es_window 0,0, 415,480 ;スプライト表示エリア設定
es_area -15,-50, 610,490 ;スプライト有効エリア設定
;---アイテム---
es_size 12,12, 100
es_pat 300, 523,26
;---自機---
es_size 28,42, 100
es_pat 150, 0,0
JIKI_x = 186 : JIKI_y = 302
JIKISpd = 4 ;自機のスピード
;---自機弾---
es_size 11,11, 150
es_pat 51, 1,43
;---敵---
es_size 18,19, 50
es_pat 60, 0,0
;敵配置
TEKI_MAX = 5 ;最大数
;アイテム
AI_MAX = 5 ;最大数
dim TEKI_AI_SOTO_f,AI_MAX ;アイテム枠外フラグ(デバック用)
dim TK_AI_TUNZ,AI_MAX ;アイテムのカウントを収納する(デバック用)
;▼▼▼▼▼敵配列▼▼▼▼▼
TEKI_x = 200,200,200,200,200
TEKI_y = 90,130,170,210,250
;■■■■■敵配置■■■■■
repeat TEKI_MAX ;敵の最大数(5)
es_exnew TEKI, 80,84 ;新規スプライトNo (敵:80~84)
es_set TEKI, TEKI_x(cnt),TEKI_y(cnt), 60 ;スプライトNo, X,Y座標 ,キャラNo
es_type TEKI,4096
loop
;************メインループ***************
*メイン
es_cls
es_draw
pos 420,30 : es_mes "高いエリアフラグ " + AI_ERIA_JK_f
pos 420,50 : es_mes "自機y " + JIKI_y
pos 420,70 : es_mes "アイテムターン数 " + AI_JSY
pos 420,90 : es_mes "アイテム取得数 " + AI_HIT
pos 420,140 : es_mes "TEKI_AI_SOTO_f(0) " + TEKI_AI_SOTO_f(0)
pos 420,160 : es_mes "TEKI_AI_SOTO_f(1) " + TEKI_AI_SOTO_f(1)
pos 420,180 : es_mes "TEKI_AI_SOTO_f(2) " + TEKI_AI_SOTO_f(2)
pos 420,200 : es_mes "TEKI_AI_SOTO_f(3) " + TEKI_AI_SOTO_f(3)
pos 420,220 : es_mes "TEKI_AI_SOTO_f(4) " + TEKI_AI_SOTO_f(4)
pos 420,250 : es_mes "TK_AI_TUNZ(0) " + TK_AI_TUNZ(0)
pos 420,270 : es_mes "TK_AI_TUNZ(1) " + TK_AI_TUNZ(1)
pos 420,290 : es_mes "TK_AI_TUNZ(2) " + TK_AI_TUNZ(2)
pos 420,310 : es_mes "TK_AI_TUNZ(3) " + TK_AI_TUNZ(3)
pos 420,330 : es_mes "TK_AI_TUNZ(4) " + TK_AI_TUNZ(4)
pos 20,159 : es_mes "↑ここから画面上部↑------------------"
;アイテム座標を取得する
AI_mes_x = 380 ;メッセージX座標
AI_ERIA_no = 360 ;検索ID
repeat AI_MAX ;アイテムの最大数(5)
es_get AI_pos_x,AI_ERIA_no,3 ;X
es_get AI_pos_y,AI_ERIA_no,5 ;Y
AI_mes_x += 40 ;複数見るためにずらす
pos AI_mes_x,380 : es_mes "" + AI_pos_x ;X
pos AI_mes_x,400 : es_mes "" + AI_pos_y ;Y
AI_ERIA_no++ ;検索ID
loop
;*************カウンター****************
es_set 150, JIKI_x,JIKI_y, 150 ;自機表示
gosub *自機の移動
gosub *自機弾移動
gosub *敵処理
gosub *アイテム
gosub *アイテム当たり判定
es_sync ;画面更新
await 16
goto *メイン
;**************自機の移動***************
*自機の移動
stick key,15 ;キー取得
if key & 1 : JIKI_x = JIKI_x - JIKISpd ;←の移動
if key & 2 : JIKI_y = JIKI_y - JIKISpd ;↑の移動
if key & 4 : JIKI_x = JIKI_x + JIKISpd ;→の移動
if key & 8 : JIKI_y = JIKI_y + JIKISpd ;↓の移動
return
;*************自機弾移動****************
*自機弾移動
getkey keyZ,90 ;Zキー
JK_TAMA_G_kazu = 0
if keyZ AND JKSO_f = 0 AND RENSA = 0 {
es_exnew JK_TAMA ,10,30 ;新規スプライト取得
;---弾の判断---
if JK_TAMA_c >= 1 {
JK_TAMA_dai_Kz = JK_TAMA_c \ 2
if JK_TAMA_dai_Kz = 0 : JK_TAMA_G_kazu += 1
}
JK_TAMA_c++ ;ループ内カウンター
if JK_TAMA_G_kazu = 0 : JKSO_x = JIKI_x-6 ;左側
if JK_TAMA_G_kazu = 1 : JKSO_x = JIKI_x+18 ;右側
JKSO_y = JIKI_y
es_set JK_TAMA, JKSO_x,JKSO_y, 51 ;スプライトNo, X,Y座標 ,キャラNo
es_apos JK_TAMA, 0,-15 ,100 ;↑に移動
RENSA = 2 ;弾の間隔
es_type JK_TAMA,2 ;自機弾type値(2)
}
if RENSA > 0 : RENSA -= 1 ;弾の間隔
return
;*************敵処理****************
*敵処理
TEKI_no = 80 ;検索ID
repeat TEKI_MAX ;敵の最大数(5)
es_find TEKI_D, 4096, TEKI_no,84
es_check TEKI_VS_TAMA ,TEKI_D,2 ;敵(4096),自機弾(2)
if TEKI_VS_TAMA != -1 {
TEKI_HIT_no = TEKI_D
gosub *敵アイテム
es_kill TEKI_D ;敵「削除」
es_kill TEKI_VS_TAMA;自機弾「削除」
}TEKI_no++
loop
return
;************敵アイテム*****************
*敵アイテム
es_get TK_P_AI_x,TEKI_HIT_no,3 ;X座標
es_get TK_P_AI_y,TEKI_HIT_no,5 ;Y座標
es_exnew TK_P_AI_no, 360,364 ;新規スプライトNo
es_set TK_P_AI_no, TK_P_AI_x,TK_P_AI_y, 300 ;スプライトNo, X,Y座標 ,キャラNo
es_apos TK_P_AI_no, 0,-1 ,100 ;↑に移動
es_type TK_P_AI_no,8 ;アイテムtype値
TK_AI_no_D = TK_P_AI_no - 360 ;配列を作る
TK_AI_TUNZ(TK_AI_no_D) = AI_JSY + 50 ;フレームごとに進むカウンター + 何フレーム経過したら下に移動するか
;---追加---
TEKI_AI_SOTO_f(TK_AI_no_D) = 0 ;アイテム画面外フラグをリセットする
return
;************アイテム*****************
*アイテム
es_get AI_ERIA_JK_y,150,5 ;自機Y
if AI_ERIA_JK_y <= 159 : AI_ERIA_JK_f = 1 ;高いエリア
if AI_ERIA_JK_y >= 202 : AI_ERIA_JK_f = 0 ;高いエリア以外(すぐに下に移動すると回収しなくなるので猶予がある)
;1面のボスを撃破したら、アイテム上昇カウントをしない
if BOS_GEKI_1_f = 0 : AI_JSY += 1 ;---修正---
;アイテムが画面外に行ったら実行
AI_no = 360 ;アイテムの検索開始ID(360)
repeat AI_MAX ;アイテムの最大数(5)
es_get AI_Di_y,AI_no,5 ;アイテムY
TK_AI_Di_D = AI_no - 360;配列を作る
if AI_Di_y >= 480 {
TEKI_AI_SOTO_f(TK_AI_Di_D) = 1 ;アイテム画面外フラグを立てる
; es_kill AI_no ;アイテムを削除する (この処理無くっても影響なし?不要なら削除する)
}
AI_no++ ;検索ID
loop
;アイテム自動回収
if AI_ERIA_JK_f = 1 { ;自機が高いエリアに行ったら実行
AI_ERIA = 360 ;検索ID
repeat AI_MAX ;アイテムの最大数(5)
es_get AI_type,AI_ERIA,13 ;アイテムtype値
TK_AI_ERIA_D = AI_ERIA - 360;配列を作る
if TEKI_AI_SOTO_f(TK_AI_ERIA_D) = 0 { ;アイテム画面外フラグ
if AI_type = 8 { ;アイテムがあれば実行する
es_get AI_ERIA_x(cnt),AI_ERIA,3 ;X座標
es_get AI_ERIA_y(cnt),AI_ERIA,5 ;Y座標
es_ang AI_ERIA_x(cnt),AI_ERIA_y(cnt),JIKI_x+7,JIKI_y+7;角度取得
AI_ERIA_ang(cnt) = stat ;自機の方向
es_adir AI_ERIA, AI_ERIA_ang(cnt),4000 ;スプライト移動方向設定
AI_ERIA++ ;検索ID
}
}
loop
} else {
AI_TUN_no = 360 ;検索ID
repeat
es_find TK_AI_TUN_D, 8, AI_TUN_no, 364
if TK_AI_TUN_D = -1 : break
TK_AI_SP_D = TK_AI_TUN_D - 360
if AI_JSY = TK_AI_TUNZ(TK_AI_SP_D) : es_apos TK_AI_TUN_D, 0,1 ,300 ;↓に移動
AI_TUN_no = TK_AI_TUN_D + 1 ;最後までアイテムが出現したら+1をする
if AI_TUN_no > 364 : break ;+1した数値以上ならループを抜ける
loop
}
return
;*********アイテム当たり判定*****************
*アイテム当たり判定
repeat
es_check JIKI_VS_TEKI_AI ,150,8 ;150(自機),8(アイテム)
if JIKI_VS_TEKI_AI = -1 : break ;当たっていない場合はループを抜ける
es_kill JIKI_VS_TEKI_AI ;アイテム「削除」
AI_HIT++ ;アイテム取得をカウントする(デバック用)
loop
return

| |
|
2020/1/4(Sat) 18:26:42|NO.89174
kさんが最初に指摘された箇所がそのままですね……
}
}
AI_ERIA++ ;検索ID
loop
このように変更したところ、不具合は起きませんでした。
|
|
2020/1/4(Sat) 21:52:46|NO.89177
あやらさん、再度回答ありがとうございます!
あぁああああああああああああ
やらかした。
>>AI_ERIA++ ;検索ID
の位置を直したところ不具合が発生しないことを確認できました。
また、仕様通りに動き、本命ソースに追加しても何も問題がないことも確認できました!
皆さんのおかげで解決できました。本当にありがとうございます!!
|
|