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


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
0925
アイドル【hspdxfix.as】アイテムを取得した位置によって点数を変えたい2解決


アイドル

リンク

2019/9/25(Wed) 21:24:34|NO.88505

どうも。いつものシューテングゲームのスプライトです。

アイテムを取得した位置によって、点数を変えるというという物を作っているのですが、どうもうまくいかなくって困っています。
なんかとんでもない見逃しとかミスとかあると思います。
実行した段階で、1個目の点数の座標が代入されてたり、アイテムを取っても下2つしか判定されなかったり・・・


 ■仕様■
・アイテムの点数が変わるのは「一番上、真ん中、一番下」の三段階
・取得した位置によって点数を画像で表示する(実行ができるように真っ白い横線が表示されます)
・アイテム点数を出す位置は、アイテムを獲得した位置


#include "hspdxfix.as" ;DXライブラリ使用 width ,,130,200 ;ウィンドウの位置 es_ini 640,500,360 ;スプライトの最大数、キャラクタ定義の最大数,周の精度(180*2) es_screen 640,480 ,0,0,1,1 ;---アイテム--- es_size 12,12, 100 es_pat 300, 1,80 ;---1000点-- es_size 43,14, 100 es_pat 411, 526,170 ;---2500点-- es_size 44,14, 100 es_pat 412, 570,200 ;---5000点-- es_size 44,14, 100 es_pat 413, 615,230 ;---自機--- es_size 28,42, 100 es_pat 400, 0,0 JIKISpd = 4 ;自機スピード JIKI_x = 206 : JIKI_y = 390 ;座標 ;アイテム AI_MAX = 5 ;最大数 dim AI_f,AI_MAX ;フラグ dim AI_ERIA_TYPE,AI_MAX ;エリア dim AI_TN_x,AI_MAX ;点数x dim AI_TN_y,AI_MAX ;点数y ;▼▼▼▼▼▼▼アイテム配列▼▼▼▼▼▼▼ AI_x = 200,250,300,350,400 AI_y = 350,300,250,150,100 ;************メインループ*************** *メイン es_cls es_draw ;*************カウンター**************** pos 450,40 : es_mes "SUKOA " + SUKOA pos 450,70 : es_mes "AI_ERIA_TYPE(0) " + AI_ERIA_TYPE(0) pos 450,90 : es_mes "AI_ERIA_TYPE(1) " + AI_ERIA_TYPE(1) pos 450,110 : es_mes "AI_ERIA_TYPE(2) " + AI_ERIA_TYPE(2) pos 450,130 : es_mes "AI_ERIA_TYPE(3) " + AI_ERIA_TYPE(3) pos 450,150 : es_mes "AI_ERIA_TYPE(4) " + AI_ERIA_TYPE(4) pos 450,180 : es_mes "AI_TN_x(0) " + AI_TN_x(0) pos 450,200 : es_mes "AI_TN_x(1) " + AI_TN_x(1) pos 450,220 : es_mes "AI_TN_x(2) " + AI_TN_x(2) pos 450,240 : es_mes "AI_TN_x(3) " + AI_TN_x(3) pos 450,260 : es_mes "AI_TN_x(4) " + AI_TN_x(4) pos 450,290 : es_mes "AI_TN_y(0) " + AI_TN_y(0) pos 450,310 : es_mes "AI_TN_y(1) " + AI_TN_y(1) pos 450,330 : es_mes "AI_TN_y(2) " + AI_TN_y(2) pos 450,350 : es_mes "AI_TN_y(3) " + AI_TN_y(3) pos 450,370 : es_mes "AI_TN_y(4) " + AI_TN_y(4) pos 50,160 : es_mes "----- ↑ここから一番上 -----" pos 50,310 : es_mes "----- ↑ここから真ん中 -----" ;************************************ 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 ;スプライトNo es_set AI_no, AI_x(cnt),AI_y(cnt),300 ;スプライトNo, X,Y座標 ,キャラNo es_type AI_no,8 ;アイテムtype値(8) } loop ;アイテムエリア判定 AI_ERIA_no = 150 ;アイテムエリア検索開始ID repeat AI_MAX ;アイテムの最大数(5) es_get AI_ERIA_y,AI_ERIA_no,5 ;アイテムY AI_ERIA_D = AI_ERIA_no - 150 ;配列を作るための準備 ;一番上 if AI_ERIA_y <= 160 { AI_ERIA_TYPE(AI_ERIA_D) = 1 } ;真ん中 if AI_ERIA_y >= 161 { AI_ERIA_TYPE(AI_ERIA_D) = 2 } ;一番下 if AI_ERIA_y >= 310 { AI_ERIA_TYPE(AI_ERIA_D) = 3 } AI_ERIA_no++ ;アイテムエリア検索開始IDを増加 loop return ;*********アイテム当たり判定***************** *アイテム当たり判定 AI_no = 150 ;アイテム検索ID AI_TN_no = 411 ;アイテム点数検索ID repeat es_get AI_TN_x(cnt),AI_no,3 ;スプライトのX座標 es_get AI_TN_y(cnt),AI_no,5 ;スプライトのY座標 ;400(自機),8(アイテム) es_check JIKI_VS_TEKI_AI ,400,8 if JIKI_VS_TEKI_AI = -1 : break ;当たっていない場合は抜ける es_kill JIKI_VS_TEKI_AI ;スプライト削除(アイテム) ;アイテムスプライトNo - アイテム開始値 AI_ERIA_SP_D = JIKI_VS_TEKI_AI - 150 ;配列を作るための準備 AI_ERIA_HIT_TYPE = AI_ERIA_TYPE(AI_ERIA_SP_D) ;「高、中、下」の情報を代入する ;高さによって点数を変える if AI_ERIA_HIT_TYPE = 1 { ;一番上 es_set AI_TN_no, AI_TN_x(AI_ERIA_SP_D)-15,AI_TN_y(AI_ERIA_SP_D), 413 SUKOA += 5000 } if AI_ERIA_HIT_TYPE = 2 { ;真ん中 es_set AI_TN_no, AI_TN_x(AI_ERIA_SP_D)-15,AI_TN_y(AI_ERIA_SP_D), 412 SUKOA += 2500 } if AI_ERIA_HIT_TYPE = 3 { ;一番下 es_set AI_TN_no, AI_TN_x(AI_ERIA_SP_D)-15,AI_TN_y(AI_ERIA_SP_D), 411 SUKOA += 1000 } AI_no++ ;アイテム検索IDを増加 AI_TN_no++ ;アイテム点数検索IDを増加 loop return



この記事に返信する


暇人

リンク

2019/9/28(Sat) 11:40:23|NO.88528

スプライトIDと配列の要素数がごっちゃになってる

これ↓を最初の方に挿入

SUKOA_LIST=0,5000,2500,1000
↓を差し替え

;*********アイテム当たり判定***************** *アイテム当たり判定 AI_no = 150 ;アイテム検索ID repeat ;400(自機),8(アイテム) es_check JIKI_VS_TEKI_AI ,400,8 if JIKI_VS_TEKI_AI = -1 : break ;当たっていない場合は抜ける es_kill JIKI_VS_TEKI_AI ;スプライト削除(アイテム) ;アイテムスプライトNo - アイテム開始値 AI_ERIA_SP_D = JIKI_VS_TEKI_AI - 150 ;配列を作るための準備 AI_ERIA_HIT_TYPE = AI_ERIA_TYPE(AI_ERIA_SP_D) ;「高、中、下」の情報を代入する es_get AI_TN_x(AI_ERIA_SP_D),JIKI_VS_TEKI_AI,3 //スプライトのX座標 es_get AI_TN_y(AI_ERIA_SP_D),JIKI_VS_TEKI_AI,5 //スプライトのY座標 es_exnew AI_TN_no ,411,415 //アイテム点スプライトNo if AI_TN_no>0 {//今回は必要ない処理だけど一応 es_set AI_TN_no, AI_TN_x(AI_ERIA_SP_D)-15,AI_TN_y(AI_ERIA_SP_D), 414-AI_ERIA_HIT_TYPE es_setp AI_TN_no, ESI_BLINKFLAG,1 //点滅フラグ (時間で消滅させるフラグとしても使用) es_setp AI_TN_no, ESI_BLINKCOUNT_LOW,15 //点滅カウント値(消滅させるまでのフレーム数) } ;高さによって点数を変える SUKOA += SUKOA_LIST(AI_ERIA_HIT_TYPE) AI_no++ ;アイテム検索IDを増加 loop return



アイドル

リンク

2019/9/28(Sat) 19:14:30|NO.88531

暇人さん、ソースとお返事ありがとうございます。

うわぁああああああああ「スプライトIDと配列」がごっちゃになっている。

色々やっておっかしいな、おっかしいなって思ってたらそういうことか・・・
「es_get AI_TN_x(DK_AI_SP_D),AI_no,3」こういうのとか。試してたのよ。そりゃダメだわ。


なるほど、セットのところで引き算をすることによって、キャラNoをずらしているのか。
そして初めてみる「es_setp」
点滅フラグを用意して、フラグが立っているスプライトNoを「点滅カウント」するわけか。

これはこういう感じで使うんですね。これは色々応用できそう。

>>なんかとんでもない見逃しとかミスとかあると思います。
本当におくなってしまうとは・・・嫌は予感はしてたんだ。
しかし、理解出来る範囲なのと単純なミスでよかった。
いつもありがとうございます!!



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