いつもどおり「hspdxfix.as」プラグインを使った物になります。
今回のプログラムはものすごく簡単なんだけど、うまくいかない原因が不明なので質問します。
■仕様■
・自機が画面上部にいる時、アイテムが自機に引き寄せられる
・上部に行ってから、下部に行ったらアイテム引き寄せは発生しない
・瞬時に上から下に移動した場合、取れなかったアイテムは動かない
#include "hspdxfix.as" ;DXライブラリ使用 width ,,130,200 ;ウィンドウの位置 es_ini 640,5000,360 ;スプライトの最大数、キャラクタ定義の最大数,周の精度(180*2) es_screen 640,480 ,0,0,1,1 es_window 30,10, 412,460 ;スプライト表示エリア設定 es_area 10,-10, 432,480 ;スプライト有効エリア設定 ;---アイテム--- es_size 12,12, 100 es_pat 300, 1,80 ;---自機--- es_size 28,42, 100 es_pat 400, 0, 0 JIKI_x = 206 : JIKI_y = 390 ;自機座標 JIKISpd = 4 ;自機スピード ;アイテム AI_MAX = 5 dim AI_f,AI_MAX ;フラグ ;▼▼▼▼▼▼▼アイテム配列▼▼▼▼▼▼▼ AI_x = 200,250,300,350,400 AI_y = 350,300,250,150,100 ;************メインループ*************** *メイン es_cls es_draw pos 450,180 : es_mes "AI_ERIA_JK_f " + AI_ERIA_JK_f pos 450,200 : es_mes "JIKI_y " + JIKI_y ;デバック用 pos 50,160 : es_mes "-----ここから上-----" pos 450,220 : es_mes "AI_c " + AI_c pos 450,240 : es_mes "AI_HIT " + AI_HIT ;*************カウンター**************** gosub *自機の移動 gosub *アイテム gosub *アイテム当たり判定 es_set 400, JIKI_x,JIKI_y, 400 ;自機表示 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 ;************アイテム***************** *アイテム repeat AI_MAX ;アイテムの最大数(5) if AI_f(cnt) = 0 { AI_f(cnt) = 1 ;フラグ「立てる」 es_exnew AI_no ,150,154 ;新規スプライト取得 es_set AI_no, AI_x(cnt),AI_y(cnt),300 ;スプライトNo, X,Y座標 ,キャラNo es_type AI_no,8 ;アイテムtype値(8) } loop ;自機の位置によって、アイテムを自動回収するか決める es_get AI_ERIA_JK_y,400,5;自機Y if AI_ERIA_JK_y <= 159 { AI_ERIA_JK_f = 1 ;高いエリア } else { AI_ERIA_JK_f = 0 ;高いエリア以外 } ;自動回収 if AI_ERIA_JK_f = 1 { ;自機が高いエリアに行ったら実行 AI_c++ ;デバック用(何回通っているか調べる) AI_ERIA = 150 ;検索ID repeat AI_MAX ;アイテムの最大数(5) 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),1500 ;スプライト移動方向設定 AI_ERIA++ loop } return ;*********アイテム当たり判定***************** *アイテム当たり判定 repeat es_check JIKI_VS_TEKI_AI ,400,8 if JIKI_VS_TEKI_AI = -1 : break ;当たっていない場合はループを抜ける es_kill JIKI_VS_TEKI_AI ;スプライト削除(アイテム) AI_HIT++ ;デバック用(アイテム獲得数) loop return