アイテムを使うイベントの作り方について

tanshio
記事: 11
登録日時: 2017年1月15日(日) 15:29

アイテムを使うイベントの作り方について

投稿記事by tanshio » 2017年1月28日(土) 15:51

初歩的な質問なのですが。

【アイテム】を使うと発動する【イベント】の作り方で躓いております。

例)
①【リンゴ】をイベントとして表示。
②【リンゴ】に接触すると、「リンゴだ」とメッセージ表示
③【リンゴ】の前で、【アイテムリスト】を開いて、【ナイフ】を選択する
④【リンゴ】を切るイベント

●躓いている所
③の処理は、「アイテム選択の処理」を行い、変数に【ナイフ】のIDを入れて条件分岐すれば、
正しければ④に進行、違うアイテムのIDならば進行しない処理で大丈夫でした。

ただし、この場合、リンゴに接触した時点で必ず【アイテムリスト】が開いてしまい、【アイテム】を使って進めるイベント
である事がばれてしまします。

条件分岐で、プレイヤーが【アイテムリスト】を開いたら③に進む、そうでない場合は②から進まないという【イベント】の
作り方を教えて頂けないでしょうか?

アバター
にいやん
記事: 218
登録日時: 2016年7月02日(土) 00:38
お住まい: 地獄4丁目西のゴミ置き場
連絡を取る:

Re: アイテムを使うイベントの作り方について

投稿記事by にいやん » 2017年1月28日(土) 21:04

①と②をイベントの1ページ目に入れてセルフスイッチAをONにするイベント命令後、2ページ目の起動条件をセルフスイッチAとして③と④を入れれば、リンゴに接触した時点で必ず【アイテムリスト】が開いてしまうという②から③の連続的なイベントを分断することができますがどうでしょうか?
アバター
ビービー
記事: 308
登録日時: 2016年1月12日(火) 18:40

Re: アイテムを使うイベントの作り方について

投稿記事by ビービー » 2017年1月28日(土) 21:07

アイテムリストを開いたら~という条件分岐は私にはわかりませんが、なんとなくそれっぽいことができるのでご紹介しておきます。

アイテムのナイフの使用効果からコモンイベントを呼び出してやる方法です。
コモンイベントを以下のように組んでください。

◆変数の操作:#0027 リンゴ位置MAPID = 4
◆変数の操作:#0028 リンゴ位置X = 9
◆変数の操作:#0029 リンゴ位置Y = 4
↑リンゴをプレイヤーが調べる位置を変数に代入しておきます。
※リンゴの位置ではなくリンゴを調べるさいにプレイヤーが立っている位置です。
ここまでの処理はコモンイベントでやる必要はないです。
◆変数の操作:#0030 プレイヤー位置MAPID = マップID
◆変数の操作:#0031 プレイヤー位置X = プレイヤーのマップX
◆変数の操作:#0032 プレイヤー位置Y = プレイヤーのマップY
↑プレイヤーがナイフを使用した位置を別の変数に代入します。
◆条件分岐:リンゴ位置MAPID = プレイヤー位置MAPTD
 ◆条件分岐:リンゴ位置X = プレイヤー位置X
  ◆条件分岐:リンゴ位置Y = プレイヤー位置Y
↑プレイヤーがリンゴを調べられる位置にいるかを判定しています。
   ◆条件分岐:プレイヤーが上を向いている
↑プレイヤーがリンゴの方を向いているかを判定します。
    ◆文章:なし, ウィンドウ, 下
     :  :リンゴを手に入れた。
    ◆イベント処理の中断
    ◆
   :分岐終了
   ◆
  :分岐終了
  ◆
 :分岐終了
 ◆
:分岐終了
◆文章:なし, ウィンドウ, 下
:  :ナイフを振ってみた。
:  :……しかし何も起きなかった。

以上になります。
リンゴを調べられる位置が複数ある場合、それぞれに変数を3つ使うのと条件分岐が長くなるのが問題ですが、まぁいちおう可能です。
------------------------------------------------------
Twitterやってます。
https://twitter.com/BB_ENTER
ブログもやってます。
http://bb-entertainment-blog.blogspot.jp/
アバター
ネコタ
記事: 173
登録日時: 2016年7月10日(日) 18:35
連絡を取る:

Re: アイテムを使うイベントの作り方について

投稿記事by ネコタ » 2017年1月28日(土) 23:50

こんばんは。
最初に作るのが手間ですが、イベントの機能のみで汎用可能な処理を組んでみました。

システムを構築してしまえば、リンゴイベントをコピペしてそこにリージョンを敷くだけで、大量生産(マップを超えて複数量産)できます。


【仕様】
ナイフを使うとコモンイベントが起動され、処理を行います。
プレイヤーの目の前にリンゴがあれば指示された処理を行い、そうでなければ空振りメッセージを出します。
(何も起きない仕様にもできます)


【必要なもの】
変数×10個
スイッチ×2個
コモンイベント×3個
リンゴイベント×好きな数だけ


【必要な処理イベント】

リンゴイベント(ページ1)
普通に接触した時のイベントを入れてください。


リンゴイベント(ページ2):条件スイッチを設定(リンゴ用01)、自動実行
◆注釈:各位置情報を取得します。
◆変数の操作:#0004 【取得情報】現在位置X = プレイヤーのマップX
◆変数の操作:#0005 【取得情報】現在位置Y = プレイヤーのマップY
◆変数の操作:#0034 【情報取得】イベントX = このイベントのマップX
◆変数の操作:#0035 【情報取得】イベントY = このイベントのマップY
◆注釈:イベントの位置とプレイヤーの位置を計算します。
◆変数の操作:#0004 【取得情報】現在位置X -= 【情報取得】イベントX
◆変数の操作:#0005 【取得情報】現在位置Y -= 【情報取得】イベントY
◆注釈:計算した位置情報により、条件分岐を組みます。
:  :以下は、対象に隣接しているとき条件を満たす向きと数値の対応表です。
:  :↓:X=0、Y=-1
:  :←:X=+1、Y=0
:  :→:X=-1、Y=0
:  :↑:X=0、Y=+1
◆条件分岐:【取得情報】現在位置X = 0
◆条件分岐:【取得情報】現在位置Y = 1
◆条件分岐:プレイヤーが上を向いている
◆注釈:ここに条件を満たすときの挙動を書き込みます。
◆注釈:条件を満たすときはリンゴ数補正を行います。
◆変数の操作:#0039 リンゴ数 += 1

:分岐終了

:分岐終了
◆条件分岐:【取得情報】現在位置Y = -1
◆条件分岐:プレイヤーが下を向いている
◆注釈:ここに条件を満たすときの挙動を書き込みます。
◆注釈:条件を満たすときはリンゴ数補正を行います。
◆変数の操作:#0039 リンゴ数 += 1

:分岐終了

:分岐終了

:分岐終了
◆条件分岐:【取得情報】現在位置Y = 0
◆条件分岐:【取得情報】現在位置X = 1
◆条件分岐:プレイヤーが左を向いている
◆注釈:ここに条件を満たすときの挙動を書き込みます。
◆注釈:条件を満たすときはリンゴ数補正を行います。
◆変数の操作:#0039 リンゴ数 += 1

:分岐終了

:分岐終了
◆条件分岐:【取得情報】現在位置X = -1
◆条件分岐:プレイヤーが右を向いている
◆注釈:ここに条件を満たすときの挙動を書き込みます。
◆注釈:条件を満たすときはリンゴ数補正を行います。
◆変数の操作:#0039 リンゴ数 += 1

:分岐終了

:分岐終了

:分岐終了
◆注釈:上記の条件に当てはまらない場合には、
:  :プレイヤーが隣接していないことになるため、
:  :中止処理に進みます。
◆変数の操作:#0039 リンゴ数 -= 1
◆セルフスイッチの操作:A = ON


リンゴイベント(ページ3):条件セルフスイッチA
空にします。他のリンゴイベント達の処理が終了するまでの待機用ページです。


リンゴイベント(ページ4):条件スイッチ設定(リンゴ用02)、条件セルフスイッチA、自動実行
◆変数の操作:#0039 リンゴ数 -= 1
◆セルフスイッチの操作:A = OFF


アイテム:ナイフ
使用効果にコモンイベントを設定します。(ここでは、リンゴ用カウント処理を実行させます)


コモンイベント01:リンゴ用カウント処理(トリガー:なし)
◆注釈:マップの範囲を取得します。
◆変数の操作:#0029 【取得情報】マップ範囲X = $gameMap.width() -1
◆変数の操作:#0030 【取得情報】マップ範囲Y = $gameMap.height() -1
◆注釈:変数情報をリセットします。
◆変数の操作:#0039 リンゴ数 = 0
◆変数の操作:#0041 【取得情報】位置X 01 = 0
◆変数の操作:#0042 【取得情報】位置Y 01 = 0
◆注釈:以下のループ処理で、マップ上の指定リージョンタイル数をカウントします。
:  :今回は10番をカウントします。リンゴの位置に、あらかじめ指定タイルを敷いてください。
◆ループ
◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【取得情報】位置X 01},{【取得情報】位置Y 01})
◆条件分岐:【取得情報】リージョン = 10
◆変数の操作:#0039 リンゴ数 += 1

:分岐終了
◆条件分岐:【取得情報】位置X 01 ≠ 【取得情報】マップ範囲X
◆変数の操作:#0041 【取得情報】位置X 01 += 1

:それ以外のとき
◆変数の操作:#0041 【取得情報】位置X 01 = 0
◆条件分岐:【取得情報】位置Y 01 ≠ 【取得情報】マップ範囲Y
◆変数の操作:#0042 【取得情報】位置Y 01 += 1

:それ以外のとき
◆ループの中断

:分岐終了

:分岐終了

:以上繰り返し
◆スイッチの操作:#0081 リンゴ用01 = ON


コモンイベント02:リンゴ用終了処理(トリガー:リンゴ用01、並列処理)
◆条件分岐:リンゴ数 = 0
◆注釈:全てのリンゴ処理がスルーされた場合の処理です。
◆文章:なし, ウィンドウ, 下
:  :ナイフは空振りに終わった。

:分岐終了
◆注釈:リンゴの処理がスルーされなかった場合に加算した補正値を修正します。
◆条件分岐:リンゴ数 = 1
◆変数の操作:#0039 リンゴ数 -= 1

:分岐終了
◆条件分岐:リンゴ数 = 0
◆注釈:マップの範囲を取得します。
◆変数の操作:#0029 【取得情報】マップ範囲X = $gameMap.width() -1
◆変数の操作:#0030 【取得情報】マップ範囲Y = $gameMap.height() -1
◆注釈:変数情報をリセットします。
◆変数の操作:#0039 リンゴ数 = 0
◆変数の操作:#0041 【取得情報】位置X 01 = 0
◆変数の操作:#0042 【取得情報】位置Y 01 = 0
◆注釈:以下のループ処理で、マップ上の指定リージョンタイル数をカウントします。
:  :今回は10番をカウントします。リンゴの位置に、あらかじめ指定タイルを敷いてください。
◆ループ
◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【取得情報】位置X 01},{【取得情報】位置Y 01})
◆条件分岐:【取得情報】リージョン = 10
◆変数の操作:#0039 リンゴ数 += 1

:分岐終了
◆条件分岐:【取得情報】位置X 01 ≠ 【取得情報】マップ範囲X
◆変数の操作:#0041 【取得情報】位置X 01 += 1

:それ以外のとき
◆変数の操作:#0041 【取得情報】位置X 01 = 0
◆条件分岐:【取得情報】位置Y 01 ≠ 【取得情報】マップ範囲Y
◆変数の操作:#0042 【取得情報】位置Y 01 += 1

:それ以外のとき
◆ループの中断

:分岐終了

:分岐終了

:以上繰り返し
◆スイッチの操作:#0082 リンゴ用02 = ON
◆スイッチの操作:#0081 リンゴ用01 = OFF

:分岐終了
◆ウェイト:2フレーム


コモンイベント03:リンゴ用終了処理02(トリガー:リンゴ用02、並列処理)
◆条件分岐:リンゴ数 = 0
◆スイッチの操作:#0082 リンゴ用02 = OFF

:分岐終了
◆ウェイト:2フレーム


以上、汎用性を高めたら無駄に複雑になりました(笑)

処理としては、リンゴ数カウント→効果判定→終了準備処理(空振りメッセージ)→終了処理(最初の状態に戻る)という手順を踏んでいます。
猫民のんたんのアトリエ
http://nekotaminontan.blog.fc2.com/
tanshio
記事: 11
登録日時: 2017年1月15日(日) 15:29

Re: アイテムを使うイベントの作り方について

投稿記事by tanshio » 2017年2月01日(水) 15:49

色々、情報ありがとうございました。

シンプルに作ると、他マップで転用する際に、コピペの手間とうっかりミス誘発。
複雑でも、汎用的に作って動作を確認した方が、トータルの作業時間は減るのかなとも考えております。

・アイテムを使わないと発動しないイベントをつくりたい
・その際に、イベントに接触したとたんにアイテムリストが開くと、アイテムを使う事がバレてしまう。
・アイテムに接触はするけれど、いきなりアイテムリストが開かないようにする
 ※そのイベントに接触して、アイテムリストを開く事を思いついた=謎解き

このような事が実現できれば良いので、どこから着手したら良いのか、考え方を整理してみます。
アバター
terunon
記事: 76
登録日時: 2016年2月12日(金) 12:14
お住まい: 熊本県
連絡を取る:

Re: アイテムを使うイベントの作り方について

投稿記事by terunon » 2017年2月01日(水) 17:40

tanshioさん

お疲れさまです。
一度組んだら楽な方法として、少し上級者向けですがこちらも良いかも知れません。
ナイフ使用時に目の前にあるイベントがリンゴだった場合(イベントのメモらんに<apple>と書いてあった場合)、そのリンゴに斬撃アニメを流しつつリンゴのセルフスイッチAをONにする処理をご紹介します。

変数1 プレイヤーX
変数2 プレイヤーY
プレイヤーが下向きのとき
 変数2 +1
左向きのとき
 変数1 -1
右向きのとき
 変数1 +1
上向きのとき
 変数2 -1
指定座標(x=変数1、y=変数2)のイベントID取得→変数3

条件分岐スクリプト $dataMap.events[$gameVariables.value(変数3の変数ID)].meta.apple のとき
 スクリプト this._eventId=$gameVariables.value(変数3の変数ID)
 アニメーションの表示 このイベント 斬撃1(リンゴが斬れる)
 セルフスイッチAをON

スクリプトの条件分岐は、変数3のイベントIDのイベントが<apple>と書かれているかを判定しています。
その後のスクリプトは、後の記述で「このイベント」の対象となるものをリンゴにバトンタッチしています。

ご参考になれば幸いです。
terunon
絵描いたり、ボカロPしたり、ツクったりしてます。

ツクールMV製ローグライクアクションアドベンチャーRPG/ニコニコ自作ゲームフェス2016敢闘賞作品
『AliasAche:エイリアスエイク』 もりもり公開中です。
紹介ページ→ http://tri-nitroterunon37.wix.com/terunon#!aliasache/fyncb
すぐにブラウザプレイするならこちら→ http://html5.plicy.net/GamePlay/19919

“MV:質問” へ戻る