プレイヤーや、ほかのイベントが岩に触れた時に動かして、岩がつながったときは一緒に動かせるようにしたいです
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がオンの時に、並列処理でいろいろと試してみたのですがうまくいきませんでした。
スクリプトが見づらくて申し訳ないですが、何か知恵を頂けたら幸いです。
【解決済み】倉庫番のようなゲームで岩を複数同時に動かしたい
Re: 倉庫番のようなゲームで岩を複数同時に動かしたい
足踏みアニメがOFFになってますか?
- Plasma Dark
- 記事: 669
- 登録日時: 2020年2月08日(土) 02:29
- 連絡を取る:
Re: 倉庫番のようなゲームで岩を複数同時に動かしたい
本掲示板には、コードを貼り付けるためのタグが用意されています。
書き込みフォーム上部の Code ボタンを押すことで挿入できるので、利用してみてください。多少見やすくなります。
長いコードを貼る場合はgist等の外部サービスの利用も検討してみてください。
岩が左から4, 6, 5, 7の順に並んでいるとき、左から4の岩を押した場合の処理を考えましょう。
岩が複数ならんでいた時の処理と書かれている部分です。
順番に処理を追っていくと、1ループで実行される岩の移動は、
です。
ID6のイベントが2回移動し、ID5のイベントが移動しません。
結果として、動画のように順番が入れ替わったように見えてしまう、というわけですね。
4~7までのID順で動かすより、隣り合っている順番で動かしていくように書いていくほうがわかりやすいでしょうか。
試しに、スイッチ41がONのときにメモ欄に<box>と書かれたプライオリティが通常キャラと同じイベントを押せるプラグインを書いてみました。
https://gist.github.com/elleonard/6694f ... c42a9abc8c
箱を押す力を持ったキャラクターの衝突判定で、箱との衝突をイベントとの衝突と別のものとして定義し、直進時に押す処理を書いています。
書き込みフォーム上部の 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
箱を押す力を持ったキャラクターの衝突判定で、箱との衝突をイベントとの衝突と別のものとして定義し、直進時に押す処理を書いています。
Re: 倉庫番のようなゲームで岩を複数同時に動かしたい
こんにちはー!
Plasma Darkさん、ご丁寧に対応いただきありがとうございます。
コード載せるときは、おっしゃっていた機能を利用しようと思います。
記載していただいた、プラグインを使用したら無事うごきました、
勉強になりました、ありがとうございます!!
Plasma Darkさん、ご丁寧に対応いただきありがとうございます。
コード載せるときは、おっしゃっていた機能を利用しようと思います。
記載していただいた、プラグインを使用したら無事うごきました、
勉強になりました、ありがとうございます!!