【解決】宝箱が3つ並んだ時に開くギミックを作りたいです。

pentama
記事: 6
登録日時: 2019年6月28日(金) 14:55

【解決】宝箱が3つ並んだ時に開くギミックを作りたいです。

投稿記事 by pentama »

ツクール初心者です。
数色(3~6色程)の宝箱を複数配置し、押して同色の宝箱を縦横に3つ以上並べると開く
というギミックを作りたいと考えています。(ギミックについては添付画像もご参照ください)

宝箱を押して動かす動作までは、問題なく作ることができているのですが、
どうしても「縦横に同じ色の宝箱が3つ以上並んでいる」という判定の方法と
「つながった宝箱だけをまとめて開かせる」手段が思いつかず悩んでいます。
現状ですと、スイッチや座標の変数を使用して、2つ並ぶ判定を再現するまでが限界で、
マップ上の宝箱の数が、1個増える毎に作業量も跳ね上がるような方法で効率も悪いです。

仮に宝箱を同じマップに60個程度配置したい場合でも、コピーと多くはない書き換えで量産し、
上記のギミックを再現することはできないでしょうか?

どなたかお知恵を貸して下さる方がいらっしゃれば、宜しくお願いします。
添付ファイル
キャプチャ0.PNG
キャプチャ.PNG
最後に編集したユーザー pentama [ 2019年7月09日(火) 00:02 ], 累計 3 回
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

Re: 宝箱が3つ並んだ時に開くギミックを作りたいです。

投稿記事 by ムノクラ »

pentama さんが書きました:ツクール初心者です。
数色(3~6色程)の宝箱を複数配置し、押して同色の宝箱を縦横に3つ以上並べると開く
というギミックを作りたいと考えています。(ギミックについては添付画像もご参照ください)

宝箱を押して動かす動作までは、問題なく作ることができているのですが、
どうしても「縦横に同じ色の宝箱が3つ以上並んでいる」という判定の方法と
「つながった宝箱だけをまとめて開かせる」手段が思いつかず悩んでいます。
現状ですと、スイッチや座標の変数を使用して、2つ並ぶ判定を再現するまでが限界で、
マップ上の宝箱の数が、1個増える毎に作業量も跳ね上がるような方法で効率も悪いです。

仮に宝箱を同じマップに60個程度配置したい場合でも、コピーと多くはない書き換えで量産し、
上記のギミックを再現することはできないでしょうか?

どなたかお知恵を貸して下さる方がいらっしゃれば、宜しくお願いします。
一通り、返信を書いてから、一言で言うと「そこまで想定出来ているのであれば、簡単な方法はないのはお分かりかと思います」になります。

最初は簡単かなと思って、下記を使って作れると思います…と思ったら、斜めがダメでした。
▼SC Get Distance
イベントとイベント、イベントと座標との距離を計算します。プラグインコマンドで呼び出して使います。
https://plugin.fungamemake.com/archives/12655

pentama様は既に理解していそうなので、後人の何かのヒントになればと思って投稿しておきます…。
上下左右のチェックとなると、同じような処理をスクリプトではなく、各宝箱の上下左右の位置をチェックするスクリプトを並行処理(もしくは、押された宝箱の処理時)を作ることになると思います。

下記記事が参考になると思います。

RPGツクールMV スクリプト基本編 - Qiita
https://qiita.com/maco1028/items/0ccbcfccc13b9503ba97
//イベントの座標取得
this.character(イベント番号).x
this.character(イベント番号).y
ツクールMVのスクリプトで指定位置の情報取得を行う方法
http://rpgmaker-script-wiki.xyz/getposiinfo_mv.php
//イベントIDの取得
$gameMap.eventIdXy(x座標, y座標)

仕様で斜めが距離1とされてしまうので、上下左右の座標を調べざるを得ません。
結構、面倒な処理になると想像できると思います。
多分、これが返信がつかなかった要因だと思います。
(単純だけど、処理が多くて面倒で、かつ通常のイベントでは解決できない)

下記が、斜めがクリアできないけれど、RPGツクールMVでの距離1という判定で作るイベントの方法です。

イベント内容の性質上、並行処理でチェックするより無いと思います。

作成例(未テストです…宝箱を押すイベントとか作ったことなかったので、なんとなく予想できますが、意外と時間がかかりそうな気がしたので…)
条件:宝箱1,2,3のイベントIDを1,2,3と仮定する。
宝箱が斜めを含めて3つが近づくとイベントが起こる。

イベント内容
SS02.png
SS01.png
最後に編集したユーザー ムノクラ [ 2019年10月24日(木) 22:16 ], 累計 2 回
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
pentama
記事: 6
登録日時: 2019年6月28日(金) 14:55

Re: 宝箱が3つ並んだ時に開くギミックを作りたいです。

投稿記事 by pentama »

ムノクラ様
質問に答えて頂きありがとうございます。
ムノクラ様の回答を拝見する限り、今回の動作を再現するのは
一筋縄ではいかないようですね…

一見すると単純そうな仕掛けだったので、何かやりようがあるのではと一人でモヤモヤしていたのですが、
現在の自分では、手に負えないことが分かり、気持ちを切り替えることが出来そうです。

回答の難しい質問にここまで親切に助言をして下さりありがとうございました。
作り終わらないマン
記事: 3
登録日時: 2019年7月08日(月) 13:44

Re: 【解決】宝箱が3つ並んだ時に開くギミックを作りたいです。

投稿記事 by 作り終わらないマン »

はじめまして
しかも書き込み初めてなので変だったらすみません

viewtopic.php?t=5092
メモ欄で<赤>と書いておいて
それで条件分岐してみてはどうでしょう?

動かした後にセルフスイッチAオン
Aのページでは動かした宝箱の上下左右の同じ色の数を調べて
周りが二つ以上なら開ける
一つならその宝箱のidを調べてそのidのセルフスイッチAをオン
ウェイトで少し待つ(一つだったときの別の宝箱の処理が間に入るように)
スイッチ<処理終了>をオン

自動で繋がっている宝箱も同様の処理が始まる
どれかが開いたら別の処理で周りをチェックして一つでもあれば開けていく

処理終了オンが条件のページにセルフスイッチAオフを入れておけば自動で最初に戻ります

後はコモンイベントで処理終了オンが条件のページを作り数フレーム後に処理終了スイッチをオフにする


これで繋がっている所は全て開く気がします
検討違いでしたら忘れてください
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

Re: 【解決】宝箱が3つ並んだ時に開くギミックを作りたいです。

投稿記事 by ムノクラ »

作り終わらないマン さんが書きました:はじめまして
しかも書き込み初めてなので変だったらすみません

viewtopic.php?t=5092
メモ欄で<赤>と書いておいて
それで条件分岐してみてはどうでしょう?

動かした後にセルフスイッチAオン
Aのページでは動かした宝箱の上下左右の同じ色の数を調べて
周りが二つ以上なら開ける
一つならその宝箱のidを調べてそのidのセルフスイッチAをオン
ウェイトで少し待つ(一つだったときの別の宝箱の処理が間に入るように)
スイッチ<処理終了>をオン

自動で繋がっている宝箱も同様の処理が始まる
どれかが開いたら別の処理で周りをチェックして一つでもあれば開けていく

処理終了オンが条件のページにセルフスイッチAオフを入れておけば自動で最初に戻ります

後はコモンイベントで処理終了オンが条件のページを作り数フレーム後に処理終了スイッチをオフにする


これで繋がっている所は全て開く気がします
検討違いでしたら忘れてください
このような手法があるとは知りませんでした…。
おっしゃる通り、メモ欄を利用してチェックが出来るのであれば、可能だと思います。
実験用に何か作ってみます。
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
作り終わらないマン
記事: 3
登録日時: 2019年7月08日(月) 13:44

Re: 【解決】宝箱が3つ並んだ時に開くギミックを作りたいです。

投稿記事 by 作り終わらないマン »

もしこの方法で可能なら(検証してなくてすみません)
<赤青>などで複数の色を持つイベントも作れますので
パズルっぽさが増すのでは、とも思います
質問者様が戻ってこられるか分からないですが応援します
pentama
記事: 6
登録日時: 2019年6月28日(金) 14:55

Re: 【解決】宝箱が3つ並んだ時に開くギミックを作りたいです。

投稿記事 by pentama »

作り終わらないマン様

ご回答くださりありがとございます。
解決は諦めていたので、糸口を頂いて大変興奮しております!
助言して頂いた内容で、イメージに近い動作を再現することができると思います。

下記の2点の処理が、自分では力及ばず、再現することができていないのですが、
もし宜しければ、重ねてお知恵を貸していただいてもよろしいでしょうか?

1、メモ欄に赤と書かれた宝箱が隣にあるかを判断する。
2、隣にあると判定された赤のイベントのセルフスイッチAをONにする。


ムノクラ様

何度もご協力くださり本当にありがとうございます。
改めて実験用のサンプルを作っていただいてるとのことなので、
完成した際は是非、拝見させてください。
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

Re: 宝箱が3つ並んだ時に開くギミックを作りたいです。

投稿記事 by ムノクラ »

実験しました。
結論から言うと…
JavaScriptの初級者(入門者ではなく)であれば、すぐに理解できると思います。
※自分は、RPGツクールMV中級者、JavaScript入門者レベルです…ギリギリでした(笑)
自分の中では:入門者、初級者、中級者~というレベル順です。
(「初心者」という言葉が曖昧過ぎて、凄い誤解を生みやすい業界なので、はっきりさせたいです。)
※気づいたら、これを作るだけで2時間かかるくらいの入門者ということです(笑)

流れとしては下記のようになりました。
※JavaScript入門者なので、非効率な処理をしている可能性が高いです。


条件:宝箱1,2,3(イベントID1,2,3)を並べる。

https://tkool.jp/mv/guide/006_003q.html
を参考にして、押せる宝箱を用意します。
(宝箱なので、向き固定のままで変更は要らなそうです)
メモ欄に<t:red>と入れます。

押される毎に周辺イベントの確認をする。
1.イベント自身のイベント番号を取得
2.コモンイベントを呼ぶ
SS01.png
3.コモンイベントを呼んだイベントの座標を取得
4.上下左右のイベントに適合するメモ(<t:red>)をカウント(先に上下左右の位置にプレイヤーが居た場合はスキップ処理を入れないとエラーになる)
SS02.png
SS03.png

一応は、これで動きました。
一度3つ並んだ後にどうするのか(再発動させるのかとか)は考えていないので、初回の発動までの確認しかしていません。

なにかのヒントになれば幸いです。
※コモンイベントなどのスクリプトが見にくくて、コピペしたければ、コードを貼ります。
今日は、作るところまでで(笑)
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
マメキュ
記事: 2
登録日時: 2019年7月08日(月) 20:48

Re: 宝箱が3つ並んだ時に開くギミックを作りたいです。

投稿記事 by マメキュ »

作り終わらないマン代理、パソコンからです

言葉で説明しずらい(素人)のでサンプルっぽいものをどうぞ
実は面白そうなので作ってました
http://whitecats.dip.jp/up/download/156 ... 587240.zip
これでちゃんとできてるかな?パスワードはtukuです

〈仕様〉
同じ色が三つ以上なら開く
開いた宝箱は反応しない

素人なのでバージョンが違うとちゃんと動くのかわかりません
こちらは1.5.1です
マメキュ
記事: 2
登録日時: 2019年7月08日(月) 20:48

Re: 宝箱が3つ並んだ時に開くギミックを作りたいです。

投稿記事 by マメキュ »

ごめんなさい、説明してませんでした

2ページ目の最初の方は上下左右の空いていない赤の宝箱の数を数えています
条件分岐$gameMap.event($gameVariables.value(3)).event().note.match(/赤/)
3番目の変数のidのイベントに赤という文字が入っていれば処理をします
条件分岐$gameSelfSwitches.value([this._mapId, $gameVariables.value(3), "C"])
そのイベントのセルフスイッチCがオンなら処理をします、今回はそれ以外の方なのでオフの時です

最後の方では
スクリプト$gameSelfSwitches.setValue([this._mapId, $gameVariables.value(3), "A"], true)
これで3番目の変数のidのイベントのセルフスイッチAをオンにしています

4ページ目は3つ繋がっているのが確定した後の処理なので
一つでも隣に同じ色があれば開く処理です
返信する

“MV:質問”に戻る