岩を転がすイベントを作りたいのですが

らびおび
記事: 7
登録日時: 2016年8月15日(月) 22:35

岩を転がすイベントを作りたいのですが

投稿記事by らびおび » 2017年10月10日(火) 09:31

岩を転がすイベントを作りたいのですが
自分が作りたいのは一度岩を押したら何かのオブジェクトに当たるまで転がり続けて
当たったら止まるというものです

そしてここからなんですが
今作りたいと思っているギミックでは
岩が二つあって 片方の岩をもう片方の岩にぶつけると
その岩が ぶつかってきた岩の反対方向に移動するというギミックです

それを穴に落とすという物なんですが うまく作れません
どなたかこのイベントの作成方法を教えてくれませんか?



分かり辛いかもしれないのでイメージとしてつかめるように…

〇 →移動   〇        〇
↑プレイヤー   ↑岩       ↑岩


      〇〇→転がる        〇
      ↑接触

      〇        〇〇→転がる
               ↑接触

      〇        〇           〇穴
                            ↑この穴に落とすといった感じです

これを四方からやるパターンを教えてください。

ゆわか
記事: 282
登録日時: 2015年11月10日(火) 20:08
連絡を取る:

Re: 岩を転がすイベントを作りたいのですが

投稿記事by ゆわか » 2017年10月13日(金) 18:53

ご利用のツクールは、Aceですか?

イベントコマンドで行うのであれば
並列処理を使い、「イベントの位置情報」を取得して
イベント同士の位置を見比べて、接触判定をする方法が妥当かと思います。

「プレイヤーの接触で岩を動かす」ところまでは、作れているご様子なので
穴の上にきたら消えるという処理を説明します。

前提条件として、穴の上は通報不可とします。
岩とは別に並列処理イベントを、マップのどこかプレイヤーが接触しない場所か、コモンイベントに作成します。
Aceをご利用と仮定して説明します。
(イベントコマンドの位置や名称が多少違うけれど、MVや2000シリーズでも同じことができるはず)

まず、正常な動作のためにウェイトを1入れておきます。
(理由はよくわかりませんが、並列処理の時は入れておくと良い)

次に、穴の左側にイベントがあるかどうかを調べるため
イベントコマンドのリストの3ページ目、「マップ」グループの「指定位置の情報取得」をします。
条件分岐で、岩のID番号が入っていたら
岩が穴の方向を向いているかどうかを、条件分岐で調べます。
穴の左の位置にいるのですから、右方向を向いていれば後1歩進めば穴に落ちると考えられます。

穴の方向を向いていたら
移動ルートの設定で、岩のすり抜けをONにし、一歩前進させ
またすり抜けをOFFにし、透明化をON。

この処理を4方向分、岩の数だけ繰り返せば
穴と接触したら岩が消えるようになります。

岩同士の接触判定についても、上記の内容を流用すると良いです。

穴と違って、岩は定位置にいないので
岩の位置は、以下の方法で取得します。
岩は2つということなので、片方を「岩A」もう片方を「岩B」とします。

「変数の操作」で「ゲームデータ」をチェックし
「岩A」の座標を「マップX」と「マップY」2つの変数に取得します。
「イベントの位置情報」を取得する際、直接指定ではなく、変数で指定すると良いのですが
そのままでは、岩同士は重なり合わないため、そのままの数値を使うと接触判定ができません。
なので、「岩A」の左側に「岩B]があるかどうかを調べる場合は「マップX」から-1
上側なら「マップY」から-1、右側なら「マップX」に+1するなどしてください。
次の条件を見比べる際、座標を読み直すか、差し引いたり加算したりした分を戻してください。

後は、条件を満たしていたら岩Aを動かして岩Bを止めるという処理を入れてください。

これを4方向分、岩の数だけくり返せばOKです。

かなりややこしいですが、説明は以上となります。
わからないところがありましたら、ご遠慮なくどうぞ。
kix
記事: 19
登録日時: 2017年7月02日(日) 18:45

Re: 岩を転がすイベントを作りたいのですが

投稿記事by kix » 2017年10月15日(日) 09:14

「カルトの鳥篭」さんのスクリプト"イベント起動判定拡張"を使えば可能かもしれません。イベント同士の接触によるイベント処理開始を可能にしてくれます。
http://canarialt.blog.fc2.com/blog-entry-69.html

“VX / Ace:質問” へ戻る