【解決済み】倉庫番のようなゲームで岩を複数同時に動かしたい

アバター
Labi
記事: 17
登録日時: 2022年5月26日(木) 14:10

【解決済み】倉庫番のようなゲームで岩を複数同時に動かしたい

投稿記事by Labi » 2022年6月18日(土) 10:24

プレイヤーや、ほかのイベントが岩に触れた時に動かして、岩がつながったときは一緒に動かせるようにしたいです


https://www.youtube.com/watch?v=ei6o_RO ... e=youtu.be

上記の動画のようにしたいのですが、複数重なったときに挙動が変になってしまいます




//スイッチID41がオンの時に処理を行う
let switchIndex = 41;

//イベントID4-7が岩のID、イベント1と接触したときに移動する
if($gameSwitches.value(switchIndex)){
for(let i = 4 ; i<= 7 ; i++){
if( $gameMap.event(1).isMoving() ){
let x_d = $gameMap.event(1)._x - $gameMap.event(i)._x;
let y_d = $gameMap.event(1)._y - $gameMap.event(i)._y;

//イベント1と岩の距離の半径が0.5以下の時に、条件をみたす
if(Math.sqrt(x_d ** 2 + y_d **2)<0.5){
let dire = $gameMap.event(1).direction();
$gameMap.event(i).moveStraight(dire);

}
}
}

}

//岩が複数並んでいた時の処理
if($gameSwitches.value(switchIndex)){
for(let j = 4 ; j<=7 ; j++){
for(let i = 4 ; i<= 7 ; i++){
if( i !== j && $gameMap.event(j).isMoving() ){
let x_d = $gameMap.event(j)._x - $gameMap.event(i)._x;
let y_d = $gameMap.event(j)._y - $gameMap.event(i)._y;
if(Math.sqrt(Math.pow(x_d,2) + Math.pow(y_d,2))<0.5){
let dire = $gameMap.event(1).direction();
$gameMap.event(i).moveStraight(dire);

}
}
}
}
}


スイッチ41がオンの時に、並列処理でいろいろと試してみたのですがうまくいきませんでした。

スクリプトが見づらくて申し訳ないですが、何か知恵を頂けたら幸いです。
最後に編集したユーザー Labi on 2022年6月18日(土) 18:52 [ 編集 1 回目 ]

アバター
虚構の城跡
記事: 696
登録日時: 2016年9月23日(金) 16:58
連絡を取る:

Re: 倉庫番のようなゲームで岩を複数同時に動かしたい

投稿記事by 虚構の城跡 » 2022年6月18日(土) 10:44

足踏みアニメがOFFになってますか?
アバター
Labi
記事: 17
登録日時: 2022年5月26日(木) 14:10

Re: 倉庫番のようなゲームで岩を複数同時に動かしたい

投稿記事by Labi » 2022年6月18日(土) 10:55

回答ありがとうございます!

固定にしてみましたが、変わりなさそうです


https://youtu.be/BNoH-c2mynM
アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: 倉庫番のようなゲームで岩を複数同時に動かしたい

投稿記事by Plasma Dark » 2022年6月18日(土) 15:38

本掲示板には、コードを貼り付けるためのタグが用意されています。
書き込みフォーム上部の Code ボタンを押すことで挿入できるので、利用してみてください。多少見やすくなります。
長いコードを貼る場合はgist等の外部サービスの利用も検討してみてください。

岩が左から4, 6, 5, 7の順に並んでいるとき、左から4の岩を押した場合の処理を考えましょう。
岩が複数ならんでいた時の処理と書かれている部分です。
順番に処理を追っていくと、1ループで実行される岩の移動は、

コード: 全て選択

j=4, i=6 -> event(6).moveStraight
j=5, i=6 -> event(6).moveStraight
j=6, i=7 -> event(7).moveStraight


です。
ID6のイベントが2回移動し、ID5のイベントが移動しません。
結果として、動画のように順番が入れ替わったように見えてしまう、というわけですね。

4~7までのID順で動かすより、隣り合っている順番で動かしていくように書いていくほうがわかりやすいでしょうか。

試しに、スイッチ41がONのときにメモ欄に<box>と書かれたプライオリティが通常キャラと同じイベントを押せるプラグインを書いてみました。
https://gist.github.com/elleonard/6694f ... c42a9abc8c

箱を押す力を持ったキャラクターの衝突判定で、箱との衝突をイベントとの衝突と別のものとして定義し、直進時に押す処理を書いています。
アバター
Labi
記事: 17
登録日時: 2022年5月26日(木) 14:10

Re: 倉庫番のようなゲームで岩を複数同時に動かしたい

投稿記事by Labi » 2022年6月18日(土) 18:51

こんにちはー!

Plasma Darkさん、ご丁寧に対応いただきありがとうございます。

コード載せるときは、おっしゃっていた機能を利用しようと思います。



記載していただいた、プラグインを使用したら無事うごきました、
勉強になりました、ありがとうございます!!

“MZ:質問” へ戻る