【解決済み】シューティングゲームの作成
Posted: 2023年6月27日(火) 22:47
シューティングゲームを作っているのですが、遮蔽物(shield)が認識されずに、弾が消滅しません
弾はイベント動的生成プラグインとテンプレートイベントプラグインで生成。
shieldはマップにランダムで配置。画面は縦にループするようになっています。
分かっていること
・イベント名はshieldになっている
・シールド自体に同じ以下のコードを入力した場合、ちゃんとshield判定されている
↓弾のテンプレートイベントの内容
◆ループ
◆条件分岐:スクリプト:$gameMap.eventsXy(this.character(0).x, this.character(0).y)
◆スクリプト:let evtObj = $gameMap.eventsXy(this.character(0).x, this.character(0).y);
: :for(let i = 0; i < evtObj.length; i++) {
: : if($dataMap.events[evtObj._eventId] !== undefined){
: : let event = $dataMap.events[evtObj._eventId];
: : if(event.name !== undefined && event.name === 'shield'){
: : let key = [this._mapId, this._eventId, "A"];
: : $gameSelfSwitches.setValue(key, true);
: : break;
: : }
: : }
: :}
◆
:分岐終了
◆条件分岐:セルフスイッチ AがON
◆セルフスイッチの操作:A = OFF
◆移動ルートの設定:このイベント (ウェイト)
: :◇透明化ON
: :◇ウェイト:10フレーム
: :◇透明化OFF
: :◇ウェイト:10フレーム
: :◇透明化ON
: :◇ウェイト:10フレーム
: :◇透明化OFF
: :◇ウェイト:10フレーム
: :◇透明化ON
: :◇ウェイト:10フレーム
: :◇透明化OFF
: :◇ウェイト:10フレーム
: :◇透明化ON
: :◇ウェイト:10フレーム
: :◇透明化OFF
: :◇ウェイト:10フレーム
: :◇透明化ON
◆イベントの一時消去
◆ループの中断
◆
:分岐終了
◆プラグインコマンド:TE_SET_SELF_VARIABLE 1 1 1
◆条件分岐:スクリプト:this.getSelfVariable(1) <= 60
◆条件分岐:スクリプト:this.character(0).x == this.character(-1).x && this.character(0).y == this.character(-1).y
◆条件分岐:プレイヤー無敵時間がOFF
◆条件分岐:階段移動後無敵時間がOFF
◆条件分岐:移動中がOFF
◆スイッチの操作:#0001 プレイヤー無敵時間 = ON
◆変数の操作:#0001 ホーミング中の敵のID = 弾を撃った敵のID
◆スクリプト:let atk = $gameVariables.value(16);
: :let def = $gameActors.actor(1).param(3);
: :let dmg = atk - def;
: :dmg = dmg < 0 ? 0 : dmg;
: :this.changeHp($gameActors.actor(1), -dmg, true);
◆SEの演奏:zipper (90, 100, 0)
◆画面のシェイク:5, 9, 20フレーム
◆コモンイベント:全滅するかしないか
◆イベントの一時消去
◆ループの中断
◆
:分岐終了
◆
:分岐終了
◆
:分岐終了
◆
:分岐終了
◆
:それ以外のとき
◆イベントの一時消去
◆ループの中断
◆
:分岐終了
◆ウェイト:1フレーム
◆
:以上繰り返し
弾はイベント動的生成プラグインとテンプレートイベントプラグインで生成。
shieldはマップにランダムで配置。画面は縦にループするようになっています。
分かっていること
・イベント名はshieldになっている
・シールド自体に同じ以下のコードを入力した場合、ちゃんとshield判定されている
↓弾のテンプレートイベントの内容
◆ループ
◆条件分岐:スクリプト:$gameMap.eventsXy(this.character(0).x, this.character(0).y)
◆スクリプト:let evtObj = $gameMap.eventsXy(this.character(0).x, this.character(0).y);
: :for(let i = 0; i < evtObj.length; i++) {
: : if($dataMap.events[evtObj._eventId] !== undefined){
: : let event = $dataMap.events[evtObj._eventId];
: : if(event.name !== undefined && event.name === 'shield'){
: : let key = [this._mapId, this._eventId, "A"];
: : $gameSelfSwitches.setValue(key, true);
: : break;
: : }
: : }
: :}
◆
:分岐終了
◆条件分岐:セルフスイッチ AがON
◆セルフスイッチの操作:A = OFF
◆移動ルートの設定:このイベント (ウェイト)
: :◇透明化ON
: :◇ウェイト:10フレーム
: :◇透明化OFF
: :◇ウェイト:10フレーム
: :◇透明化ON
: :◇ウェイト:10フレーム
: :◇透明化OFF
: :◇ウェイト:10フレーム
: :◇透明化ON
: :◇ウェイト:10フレーム
: :◇透明化OFF
: :◇ウェイト:10フレーム
: :◇透明化ON
: :◇ウェイト:10フレーム
: :◇透明化OFF
: :◇ウェイト:10フレーム
: :◇透明化ON
◆イベントの一時消去
◆ループの中断
◆
:分岐終了
◆プラグインコマンド:TE_SET_SELF_VARIABLE 1 1 1
◆条件分岐:スクリプト:this.getSelfVariable(1) <= 60
◆条件分岐:スクリプト:this.character(0).x == this.character(-1).x && this.character(0).y == this.character(-1).y
◆条件分岐:プレイヤー無敵時間がOFF
◆条件分岐:階段移動後無敵時間がOFF
◆条件分岐:移動中がOFF
◆スイッチの操作:#0001 プレイヤー無敵時間 = ON
◆変数の操作:#0001 ホーミング中の敵のID = 弾を撃った敵のID
◆スクリプト:let atk = $gameVariables.value(16);
: :let def = $gameActors.actor(1).param(3);
: :let dmg = atk - def;
: :dmg = dmg < 0 ? 0 : dmg;
: :this.changeHp($gameActors.actor(1), -dmg, true);
◆SEの演奏:zipper (90, 100, 0)
◆画面のシェイク:5, 9, 20フレーム
◆コモンイベント:全滅するかしないか
◆イベントの一時消去
◆ループの中断
◆
:分岐終了
◆
:分岐終了
◆
:分岐終了
◆
:分岐終了
◆
:それ以外のとき
◆イベントの一時消去
◆ループの中断
◆
:分岐終了
◆ウェイト:1フレーム
◆
:以上繰り返し