【解決待たず】複数イベントどうしの同時接触における挙動の改善方法

アバター
ONOZUKA
記事: 63
登録日時: 2015年11月11日(水) 13:31
お住まい: 幻想郷
連絡を取る:

【解決待たず】複数イベントどうしの同時接触における挙動の改善方法

投稿記事by ONOZUKA » 2016年8月26日(金) 20:42

>>返答をこれ以上頻繁に待つことができませんので、返信くださっても対応が遅れることになります。

複数のイベントの座標を取得して、条件分岐を直列につないで接触判定を行っています。

各イベントの座標を取得→接触判定→条件分岐でイベント起動(ここで問題発生)

この状況において、AとB、CとD、EとFが同時に接触した際において、
AとBのイベントしか起動しない状況を打破する方法があればご教授いただきたく思います。
最後に編集したユーザー ONOZUKA on 2016年9月08日(木) 03:10 [ 編集 1 回目 ]

=============================================================================
RPGツクールVXACEでゲームを作っているはずです!
HP:http://tenkoma.info Twitter:https://twitter.com/ONOZUKA7
=============================================================================
赤青緑
記事: 3
登録日時: 2016年8月26日(金) 13:47

Re: 複数イベントどうしの同時接触における挙動の改善方法

投稿記事by 赤青緑 » 2016年8月26日(金) 21:27

接触判定のイベントは具体的にどのように組んでいるのでしょうか
また、発生する問題とは具体的にどのような問題なのでしょうか
SSなどで提示していただければわかりやすいかと思われます
アバター
ONOZUKA
記事: 63
登録日時: 2015年11月11日(水) 13:31
お住まい: 幻想郷
連絡を取る:

Re: 複数イベントどうしの同時接触における挙動の改善方法

投稿記事by ONOZUKA » 2016年8月26日(金) 22:52

以下のようなスクリプトを並列処理で組みますと、AとBの一致のみに反応して、CとDの一致は起動しません。
ちなみに、同時起動の場合を指しますので、フレーム調整なども試しましたが同時起動最大数は3が限界でした。

Array_A = [$game_map.events[1].x,$game_map.events[1].y] #イベントAの座標取得
Array_B = [$game_map.events[2].x,$game_map.events[2].y] #イベントBの座標取得
. #CやDなどでも同じく定義する
.
if Array_A == Array_B then #条件分岐においてイベントを起動させる
接触起動イベント
else
end
if Array_C == Array_D then
.
.
=============================================================================
RPGツクールVXACEでゲームを作っているはずです!
HP:http://tenkoma.info Twitter:https://twitter.com/ONOZUKA7
=============================================================================
アバター
ONOZUKA
記事: 63
登録日時: 2015年11月11日(水) 13:31
お住まい: 幻想郷
連絡を取る:

Re: 複数イベントどうしの同時接触における挙動の改善方法

投稿記事by ONOZUKA » 2016年8月27日(土) 17:19

構築済みのスクリプトを載せるとこんな感じですね。

コード: 全て選択

#    呼び出しコマンドの設定
Game_Interpreter
def attack_manager
#=============================================================================
# ■ 変数およびイベント番号の設定
$rts01 = [10,11,12]                   #判定変数の設定(ゲーム共通変数)
$rts02 = [15,14, 9]                   #味方番号の設定(イベント番号)
$rts03 = [13,12, 3, 1, 2, 4, 5, 6, 7] #敵方番号の設定(イベント番号)
$rts04 = [ 0, 0, 0, 0, 0, 0, 0, 0, 0] #拠点座標の設定(X座標)
$rts05 = [ 0, 1, 2, 3, 4, 5, 6, 7, 8] #拠点座標の設定(Y座標)
#=============================================================================
# ■ 拠点情報の名前(あまりに長すぎると表示がおかしくなると思います)
$cnm01 = "A"
$cnm02 = "B"
$cnm03 = "C"
$cnm04 = "D"
$cnm05 = "E"
$cnm06 = "F"
$cnm07 = "G"
$cnm08 = "H"
$cnm09 = "I"
#=============================================================================
$cxy01 = [0,0]
$cxy02 = [0,1]
$cxy03 = [0,2]
$cxy04 = [0,3]
$cxy05 = [0,4]
$cxy06 = [0,5]
$cxy07 = [0,6]
$cxy08 = [0,7]
$cxy09 = [0,8]
#=============================================================================
# ■ 配列生成
#=============================================================================
#    判定変数の代入
$var01 = $rts01[0]
$var02 = $rts01[1]
$var03 = $rts01[2]
#=============================================================================
#    味方イベントの代入
$pid01 = $rts02[0]
$pid02 = $rts02[1]
$pid03 = $rts03[2]
#=============================================================================
#    敵イベントの代入
$eid01 = $rts03[0]
$eid02 = $rts03[1]
$eid03 = $rts03[2]
$eid04 = $rts03[3]
$eid05 = $rts03[4]
$eid06 = $rts03[5]
$eid07 = $rts03[6]
$eid08 = $rts03[7]
$eid09 = $rts03[8]
#=============================================================================
# ■ 座標取得
#=============================================================================
#    味方イベントの座標取得XY
$pxp01 = $game_map.events[$pid01].x
$pxp02 = $game_map.events[$pid02].x
$pxp03 = $game_map.events[$pid03].x
$pyp01 = $game_map.events[$pid01].y
$pyp02 = $game_map.events[$pid02].y
$pyp03 = $game_map.events[$pid03].y
#    敵イベントの座標取得X
$exp01 = $game_map.events[$eid01].x
$exp02 = $game_map.events[$eid02].x
$exp03 = $game_map.events[$eid03].x
$exp04 = $game_map.events[$eid04].x
$exp05 = $game_map.events[$eid05].x
$exp06 = $game_map.events[$eid06].x
$exp07 = $game_map.events[$eid07].x
$exp08 = $game_map.events[$eid08].x
$exp09 = $game_map.events[$eid09].x
#    敵イベントの座標取得Y
$eyp01 = $game_map.events[$eid01].y
$eyp02 = $game_map.events[$eid02].y
$eyp03 = $game_map.events[$eid03].y
$eyp04 = $game_map.events[$eid04].y
$eyp05 = $game_map.events[$eid05].y
$eyp06 = $game_map.events[$eid06].y
$eyp07 = $game_map.events[$eid07].y
$eyp08 = $game_map.events[$eid08].y
$eyp09 = $game_map.events[$eid09].y
#=============================================================================
# ■ 重複判定用配列生成
#=============================================================================
$pxy01 = [$pxp01,$pyp01]
$pxy02 = [$pxp02,$pyp02]
$pxy03 = [$pxp03,$pyp03]
$exy01 = [$exp01,$eyp01]
$exy02 = [$exp02,$eyp02]
$exy03 = [$exp03,$eyp03]
$exy04 = [$exp04,$eyp04]
$exy05 = [$exp05,$eyp05]
$exy06 = [$exp06,$eyp06]
$exy07 = [$exp07,$eyp07]
$exy08 = [$exp08,$eyp08]
$exy09 = [$exp09,$eyp09]
$cxy00 = [$game_player.x,$game_player.y]
#=============================================================================
# ■ 検索用多次元配列生成
$pxy_a = [$pxy01,$pxy02]
$exy_a = [$exy01,$exy02,$exy03,$exy04,$exy05,$exy06,$exy07,$exy08,$exy09]
$cxy_a = [$cxy01,$cxy02,$cxy03,$cxy04,$cxy05,$cxy06,$cxy07,$cxy08,$cxy09]
#=============================================================================
# ■ 接触判定用条件分岐
#=============================================================================
#    味方イベント1の接触判定
unless $pos01 == [$pxp01,$pyp01,$exy_a.index($pxy01)]
if $exy_a.index($pxy01) == 0
$game_variables[$var01] = 1
elsif  $exy_a.index($pxy01) == 1
$game_variables[$var01] = 2
elsif  $exy_a.index($pxy01) == 2
$game_variables[$var01] = 3
elsif  $exy_a.index($pxy01) == 3
$game_variables[$var01] = 4
elsif  $exy_a.index($pxy01) == 4
$game_variables[$var01] = 5
elsif  $exy_a.index($pxy01) == 5
$game_variables[$var01] = 6
elsif  $exy_a.index($pxy01) == 6
$game_variables[$var01] = 7
elsif  $exy_a.index($pxy01) == 7
$game_variables[$var01] = 8
elsif  $exy_a.index($pxy01) == 8
$game_variables[$var01] = 9
end
$pos01 = [$pxp01,$pyp01,$exy_a.index($pxy01)]
end
#=============================================================================
#    味方イベント2の接触判定
unless $pos02 == [$pxp02,$pyp02,$exy_a.index($pxy02)]
if $exy_a.index($pxy02) == 0
$game_variables[$var02] = 1
elsif  $exy_a.index($pxy02) == 1
$game_variables[$var02] = 2
elsif  $exy_a.index($pxy02) == 2
$game_variables[$var02] = 3
elsif  $exy_a.index($pxy02) == 3
$game_variables[$var02] = 4
elsif  $exy_a.index($pxy02) == 4
$game_variables[$var02] = 5
elsif  $exy_a.index($pxy02) == 5
$game_variables[$var02] = 6
elsif  $exy_a.index($pxy02) == 6
$game_variables[$var02] = 7
elsif  $exy_a.index($pxy02) == 7
$game_variables[$var02] = 8
elsif  $exy_a.index($pxy02) == 8
$game_variables[$var02] = 9
end
$pos02 = [$pxp02,$pyp02,$exy_a.index($pxy02)]
end
#=============================================================================
#    味方イベント3の接触判定
unless $pos03 == [$pxp03,$pyp03,$exy_a.index($pxy03)]
if $exy_a.index($pxy03) == 0
$game_variables[$var03] = 1
elsif  $exy_a.index($pxy02) == 1
$game_variables[$var03] = 2
elsif  $exy_a.index($pxy02) == 2
$game_variables[$var03] = 3
elsif  $exy_a.index($pxy02) == 3
$game_variables[$var03] = 4
elsif  $exy_a.index($pxy02) == 4
$game_variables[$var03] = 5
elsif  $exy_a.index($pxy02) == 5
$game_variables[$var03] = 6
elsif  $exy_a.index($pxy02) == 6
$game_variables[$var03] = 7
elsif  $exy_a.index($pxy02) == 7
$game_variables[$var03] = 8
elsif  $exy_a.index($pxy02) == 8
$game_variables[$var03] = 9
end
$pos03 = [$pxp03,$pyp03,$exy_a.index($pxy03)]
end

end
=============================================================================
RPGツクールVXACEでゲームを作っているはずです!
HP:http://tenkoma.info Twitter:https://twitter.com/ONOZUKA7
=============================================================================

“VX / Ace:質問” へ戻る