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


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
1208
アイドル【hspdxfix.as】複数アイテム(同じes_type値)を別々に判定したい2解決


アイドル

リンク

2019/12/8(Sun) 12:35:30|NO.89022

どうもこんにちは。
いつもどおりhspdxfix.asプラグインで作った、STGゲームの質問になります。

違う敵から出現したアイテム(同じes_type値)をそれぞれ別に判定したいのですが、
Pアイテムを取得しないうちに点数アイテムを取得すると、Pアイテムとして判定されてしまいます。
Pアイテムを全部取ってから点数アイテムを取得すると、別々に判定されるので何かやらかしていると思います・・・

せっかく似たようなことを前回聞いて解決できたのに、まったく活かせず・・トホホ
http://hsp.tv/play/pforum.php?mode=all&num=88021
ちなみにes_type値の数値を別々に管理する方法はやりたくないです。


今後色んな種類の敵を用意することを考えて、「アイテム当たり判定」は1つの処理で判定したほうがいいと思いました。

例えば以下のようにして用意して、アイテム判定を別々に判定しようかと思いましたが、特にメリットを感じられなかったので下記の様なソースにしました。
多分この考え方も間違っているかもです。
Pアイテム「es_exnew:360,364」
点数アイテム「es_exnew:420,424」
P_AI_SP_D = JIKI_VS_TK_TEKI_PAI - 360
TN_AI_SP_D = JIKI_VS_DK_TEKI_TNAI - 420



【仕様】
・P敵を倒すと、Pアイテムが出現する
・点数敵を倒すと、点数アイテムが出現する
・Pアイテムと、点数アイテムを別々に判定する



#include "hspdxfix.as" ;DXライブラリ使用 width ,,130,200 ;ウィンドウの位置 es_ini 640,500,360 ;スプライトの最大数、キャラクタ定義の最大数,周の精度(180*2) es_screen 640,480 ,0,0,1,1 ;---Pアイテム--- es_size 12,12, 100 es_pat 540, 1,80 ;---点アイテム--- es_size 24,24, 100 es_pat 541, 14,80 ;---自機--- es_size 28,42, 100 es_pat 400, 0, 0 JIKI_x = 206 : JIKI_y = 390 ;座標 JIKISpd = 8 ;移動スピード ;---自機弾--- es_size 11,11, 150 es_pat 51, 1,43 ;---P敵--- es_size 18,19, 50 es_pat 60, 0,0 ;---でかい敵--- es_size 50,38, 100 es_pat 70, 19,0 ;自機弾 JKTM_MAX = 50 ;自機弾の最大数(50) dim JKSO_x,JKTM_MAX dim JKSO_y,JKTM_MAX ;P敵配置 P_TEKI_MAX = 5 ;P敵の最大数(5) dim P_TEKI_x,P_TEKI_MAX dim P_TEKI_y,P_TEKI_MAX ;点数敵配置 TN_TEKI_MAX = 5 ;点数敵の最大数(5) dim TN_TEKI_x,TN_TEKI_MAX dim TN_TEKI_y,TN_TEKI_MAX ;デバック用 dim TK_AI_TYPE,10 ;アイテムタイプ ;▼▼▼▼▼P敵配列▼▼▼▼▼ P_TEKI_x = 200,200,200,200,200 P_TEKI_y = 300,250,200,150,100 ;▼▼▼▼▼点数敵配列▼▼▼▼▼ TN_TEKI_x = 280,280,280,280,280 TN_TEKI_y = 300,250,200,150,100 ;■■■■■P敵配置■■■■■ repeat P_TEKI_MAX ;P敵の最大数(5) es_exnew P_TEKI, 80,84 ;新規スプライトNo es_set P_TEKI, P_TEKI_x(cnt),P_TEKI_y(cnt), 60 ;スプライトNo, X,Y座標 ,キャラNo es_type P_TEKI,4096 loop ;■■■■■点数敵配置■■■■■ repeat TN_TEKI_MAX ;点数敵の最大数(5) es_exnew TN_TEKI, 90,94 ;新規スプライトNo es_set TN_TEKI, TN_TEKI_x(cnt),TN_TEKI_y(cnt), 70 ;スプライトNo, X,Y座標 ,キャラNo es_type TN_TEKI,4096 loop ;*********メインループ********* *メイン es_cls ;画面クリア es_draw ;スプライト描画 pos 420,100 : es_mes "Pアイテム " + TK_PAI_HIT pos 420,120 : es_mes "点数アイテム " + TK_TNAI_HIT pos 420,150 : es_mes "TK_AI_TYPE(0) " + TK_AI_TYPE(0) pos 420,170 : es_mes "TK_AI_TYPE(1) " + TK_AI_TYPE(1) pos 420,190 : es_mes "TK_AI_TYPE(2) " + TK_AI_TYPE(2) pos 420,210 : es_mes "TK_AI_TYPE(3) " + TK_AI_TYPE(3) pos 420,230 : es_mes "TK_AI_TYPE(4) " + TK_AI_TYPE(4) pos 420,260 : es_mes "TK_AI_TYPE(5) " + TK_AI_TYPE(5) pos 420,280 : es_mes "TK_AI_TYPE(6) " + TK_AI_TYPE(6) pos 420,300 : es_mes "TK_AI_TYPE(7) " + TK_AI_TYPE(7) pos 420,320 : es_mes "TK_AI_TYPE(8) " + TK_AI_TYPE(8) pos 420,340 : es_mes "TK_AI_TYPE(9) " + TK_AI_TYPE(9) ;************************************** gosub *自機の移動 gosub *自機弾移動 gosub *P敵 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 ;*************自機弾移動**************** *自機弾移動 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 ;*************P敵**************** *P敵 P_TEKI_no = 80 ;P敵の検索開始ナンバ− repeat P_TEKI_MAX ;P敵の最大数(5) es_find P_TEKI_D, 4096, P_TEKI_no,84 es_check P_TEKI_VS_TAMA ,P_TEKI_D,2 ;P敵(4096),自機弾(2) if P_TEKI_VS_TAMA != -1 { P_TEKI_HIT_no = P_TEKI_D gosub *P敵アイテム es_kill P_TEKI_D ;P敵「削除」 es_kill P_TEKI_VS_TAMA ;自機弾「削除」 }P_TEKI_no++ loop return ;************P敵アイテム***************** *P敵アイテム es_get TK_P_AI_x,P_TEKI_HIT_no,3 ;X座標 es_get TK_P_AI_y,P_TEKI_HIT_no,5 ;Y座標 es_exnew TK_P_AI_no, 360,369 es_set TK_P_AI_no, TK_P_AI_x,TK_P_AI_y, 540 ;スプライトNo, X,Y座標 ,キャラNo es_type TK_P_AI_no,8 ;アイテムtype値 ;Pアイテム判定 TK_AI_no_D = TK_P_AI_no - 360 ;0から数字を増加する (360-360 = 0, 361-360 = 1...) TK_AI_TYPE(TK_AI_no_D) = 1 ;1 = Pアイテム, 2 = 点数アイテム return ;*************点数敵**************** *点数敵 TN_TEKI_no = 90 ;点数敵の検索開始ナンバー repeat TN_TEKI_MAX ;点数敵の最大数(5) es_find TN_TEKI_D, 4096, TN_TEKI_no,94 es_check TN_TEKI_VS_TAMA ,TN_TEKI_D,2 ;点数敵(4096),自機弾(2) if TN_TEKI_VS_TAMA != -1 { TN_TK_HIT_no = TN_TEKI_D gosub *点数敵アイテム es_kill TN_TEKI_D ;点数敵「削除」 es_kill TN_TEKI_VS_TAMA ;自機弾「削除」 }TN_TEKI_no++ loop return ;************点数敵アイテム***************** *点数敵アイテム es_get TK_TN_AI_x,TN_TK_HIT_no,3 ;X座標 es_get TK_TN_AI_y,TN_TK_HIT_no,5 ;Y座標 es_exnew TN_AI_no, 360,369 es_set TN_AI_no, TK_TN_AI_x,TK_TN_AI_y, 541 ;スプライトNo, X,Y座標 ,キャラNo es_type TN_AI_no,8 ;アイテムtype値 ;点数アイテム判定 TN_AI_no_D = TN_AI_no - 360 ;0から数字を増加する (360-360 = 0, 361-360 = 1...) TK_AI_TYPE(TN_AI_no_D) = 2 ;1 = Pアイテム, 2 = 点数アイテム return ;********アイテム当たり判定***************** *アイテム当たり判定 repeat es_check JIKI_VS_TK_TEKI_AI, 400, 8 ;400(自機),8(アイテム) if JIKI_VS_TK_TEKI_AI = -1 : break ;当たっていない場合ループを抜ける es_kill JIKI_VS_TK_TEKI_AI ;アイテム「削除」 AI_SP_D = JIKI_VS_TK_TEKI_AI - 360 ;0から数字を増加する (360-360 = 0, 361-360 = 1...) AI_HIT_TYPE = TK_AI_TYPE(AI_SP_D) ;入っているアイテムタイプを代入する if TK_AI_TYPE = 1 : TK_PAI_HIT++ ;Pアイテム増加 if TK_AI_TYPE = 2 : TK_TNAI_HIT += 10 ;点アイテム増加 loop return



この記事に返信する


k

リンク

2019/12/10(Tue) 22:48:47|NO.89038

今頃になってちょっとプログラムを見てみました(^^;
するとプログラムの最後の方の

>if TK_AI_TYPE = 1 : TK_PAI_HIT++ ;Pアイテム増加
>if TK_AI_TYPE = 2 : TK_TNAI_HIT += 10 ;点アイテム増加



if AI_HIT_TYPE = 1 : TK_PAI_HIT++ ;Pアイテム増加
if AI_HIT_TYPE = 2 : TK_TNAI_HIT += 10 ;点アイテム増加

にすると、うまくいっているようです(^^



アイドル

リンク

2019/12/11(Wed) 14:21:11|NO.89040

kさん。お答えいただきありがとうございます!


うわぁああああああああああああああ
なんという凡ミス・・・

言われたとおり変数名を直したら仕様通りに動いて問題ないことを確認できました。
ありがとうございます!



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