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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0102
アイドル【hspdxfix.as】新しくアイテムを出現させると、アイテム自動回収がおこなえない9解決


アイドル

リンク

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



この記事に返信する


k

リンク

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」はその位置じゃないとダメですね。
何という凡ミス・・・
けれどやっぱり不具合が治らないままですね・・・



k

リンク

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
の位置を直したところ不具合が発生しないことを確認できました。
また、仕様通りに動き、本命ソースに追加しても何も問題がないことも確認できました!

皆さんのおかげで解決できました。本当にありがとうございます!!



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