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


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
1218
アイドル【hspdxfix.as】「es_set」せずに「es_adir」を実行すると「システムエラー」が発生する2解決


アイドル

リンク

2019/12/18(Wed) 23:09:35|NO.89075

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


 ☆問題点☆ (根本的な問題はこれではないかもしれません)
「es_set」せずに「es_adir」を実行すると「システムエラー」が発生して困っております。


アイテムを自動的に回収するソースを入れたところ「システムエラー」が発生しました。
アイテムを自動的に回収するシステムなので「es_set」が不要なため、仕様バグみたいなことが発生しております。
回避方法はあるんだろうけど、今のところ思いつかないので質問します。


今回は2つのソースを置いときました。
■1■アイテムがすでに置かれているソース (「システムエラー」は発生しません)
■2■敵を撃破するとアイテムが置かれるソース (「システムエラー」が発生する)

問題としてはアイテムの場所が判断されないうちに、「es_adir」を実行しているのが原因だと思うんですけどね・・・
いかんせん「システムエラー」なので根本的な原因がわかっておりません・・・



■1■アイテムがすでに置かれているソース (「システムエラー」は発生しません)

#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 541, 523,26 ;---自機--- es_size 28,42, 100 es_pat 500, 0, 0 JIKI_x = 36 : JIKI_y = 202 ;アイテム AI_MAX = 5 ;▼▼▼▼▼アイテム配列▼▼▼▼▼ AI_x = 200,250,300,350,442 AI_y = 350,300,250,150,480 ;■■■■■アイテム■■■■■ repeat AI_MAX ;アイテムの最大数(5) es_exnew AI_no ,360,364 ;スプライトNo es_set AI_no, AI_x(cnt),AI_y(cnt),541 ;スプライトNo, X,Y座標 ,キャラNo es_type AI_no,8 ;アイテムtype値(8) loop ;************メインループ*************** *メイン es_cls ;画面クリア es_draw ;スプライト描画 ;************カウンター****************** pos 420,20 : es_mes "AI_no " + AI_no ;******************************** gosub *アイテムエリア es_set 500, JIKI_x,JIKI_y, 500 ;自機表示 es_sync ;画面更新 await 16 goto *メイン ;*********アイテムエリア***************** *アイテムエリア AI_ERIA = 360 ;検索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),400 ;スプライト移動方向設定 AI_ERIA++ ;検索ID loop return

■2■敵を撃破するとアイテムが置かれるソース (「システムエラー」が発生する)
実際は自機弾を当てて倒しますが、なるべく「■1■ソース」に近づけさせるために、
「*デバック用」としてエンターキーで疑似的に撃破できるようにしています

#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 541, 523,26 ;---自機--- es_size 28,42, 100 es_pat 500, 0, 0 JIKI_x = 36 : JIKI_y = 202 ;---敵--- es_size 50,38, 100 es_pat 70, 19,0 ;敵配置 TEKI_MAX = 5 ;敵の最大数 dim TEKI_x,TEKI_MAX dim TEKI_y,TEKI_MAX ;アイテム AI_MAX = 5 ;▼▼▼▼▼敵配列▼▼▼▼▼ TEKI_x = 100,160,220,280,340 TEKI_y = 160,160,160,160,160 ;■■■■■敵準備■■■■■ repeat TEKI_MAX ;妖精の最大数(5) es_exnew TEKI, 320,324 ;スプライトNo es_set TEKI, TEKI_x(cnt),TEKI_y(cnt), 70 ;スプライトNo, X,Y座標 ,キャラNo es_type TEKI,4096 ;敵type値(8) loop ;************メインループ*************** *メイン es_cls ;画面クリア es_draw ;スプライト描画 ;************カウンター****************** pos 420,20 : es_mes "TEKI_GEKI_f " + TEKI_GEKI_f ;******************************** gosub *敵 gosub *アイテムエリア gosub *デバック用 es_set 500, JIKI_x,JIKI_y, 500 ;自機表示 es_sync ;画面更新 await 16 goto *メイン ;*************敵**************** *敵 TEKI_no = 320 ;敵の検索開始ナンバー repeat TEKI_MAX ;敵の最大数(5) if TEKI_GEKI_f = 1 { ;敵撃破フラグ es_find TEKI_D, 4096, TEKI_no,324 TK_HIT_no = TEKI_D gosub *敵アイテム es_kill TEKI_D ;敵「削除」 }TEKI_no++ loop return ;************敵アイテム***************** *敵アイテム es_get AITM_x,TK_HIT_no,3 ;X座標 es_get AITM_y,TK_HIT_no,5 ;Y座標 es_exnew AI_no, 360,364 es_set AI_no, AITM_x,AITM_y, 541 ;スプライトNo, X,Y座標 ,キャラNo es_type AI_no,8 ;アイテムtype値 return ;*********アイテムエリア***************** *アイテムエリア /*コメントアウトを解除すると「システムエラーが発生する」 AI_ERIA = 360 ;検索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),400 ;スプライト移動方向設定 AI_ERIA++ ;検索ID loop */ return ;*****デバック用****** *デバック用 getkey key_en,13 ;エンターキー if key_en { ;エンターキー押したときに実行 if K_en = 0 { TEKI_GEKI_f = 1 ;敵撃破フラグ ON } K_en = 1 } else { TEKI_GEKI_f = 0 ;敵撃破フラグ OFF K_en = 0 } return



この記事に返信する


k

リンク

2019/12/19(Thu) 00:34:06|NO.89076

アイテムtype値の「8」を判断してから角度を設定してみました


AI_ERIA = 360 ;検索ID repeat AI_MAX ;アイテムの最大数(5) es_get test,AI_ERIA,13 if test = 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),400 ;スプライト移動方向設定 } AI_ERIA++ ;検索ID loop



アイドル

リンク

2019/12/19(Thu) 22:39:57|NO.89080

kさん、回答ありがとうございます!

なるほどtype値を使って判定ですね。
これなら問題ないし、仕様通りでいけますね!

無事解決しました!



・・・が!アイテム上下に動かすソースを入れるとうまくいかねぇ・・
こっちは困ったら新しく質問します。



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