ページ 1 / 1
vxでイベントの移動ルート先を座標指定にするには
Posted: 2018年3月28日(水) 08:57
by ダイトウ
Vxでイベントの移動先を
指定した座標にしたり、プレイヤーではなく指定したイベントに向かうようにするにはどのように組めば良いでしょうか?スクリプトは全くの無知なもので…
目標までに壁や障害物があっても、自発的に移動可能なルートを検索して進むのが理想です。
Re: vxでイベントの移動ルート先を座標指定にするには
Posted: 2018年3月28日(水) 10:55
by faida
VXだとデフォルトでは座標指定で移動できないので、コマンドを作ります。
コード: 全て選択
class Game_Character
#--------------------------------------------------------------------------
# ● 地点からの X 距離計算
#--------------------------------------------------------------------------
def distance_x_from_point(x, y)
sx = @x - x
if $game_map.loop_horizontal? # 横にループしているとき
if sx.abs > $game_map.width / 2 # 絶対値がマップの半分より大きい?
sx -= $game_map.width # マップの幅を引く
end
end
return sx
end
#--------------------------------------------------------------------------
# ● 地点からの Y 距離計算
#--------------------------------------------------------------------------
def distance_y_from_point(x, y)
sy = @y - y
if $game_map.loop_vertical? # 縦にループしているとき
if sy.abs > $game_map.height / 2 # 絶対値がマップの半分より大きい?
sy -= $game_map.height # マップの高さを引く
end
end
return sy
end
#--------------------------------------------------------------------------
# ● 地点に近づく
#--------------------------------------------------------------------------
def move_toward_point(x, y)
sx = distance_x_from_point(x, y)
sy = distance_y_from_point(x, y)
if sx != 0 or sy != 0
if sx.abs > sy.abs # 横の距離のほうが長い
sx > 0 ? move_left : move_right # 左右方向を優先
if @move_failed and sy != 0
sy > 0 ? move_up : move_down
end
else # 縦の距離のほうが長いか等しい
sy > 0 ? move_up : move_down # 上下方向を優先
if @move_failed and sx != 0
sx > 0 ? move_left : move_right
end
end
end
end
end
これで「移動ルートの設定」で「move_toward_point(x, y)」とやれば動くはずです。
VXAceでは
カルトの鳥籠様に経路探索のスクリプト(VXで使用できないと明言あり)がありましたが、
VXでは検索しても見つかりませんね……。
まぁ、昔
私が作ったプロジェクトに入ってはいるんですが、抜き出して使うとなるとかなり面倒なので
手が空いていたら素材にするかもしれません。
Re: vxでイベントの移動ルート先を座標指定にするには
Posted: 2018年3月29日(木) 14:11
by ダイトウ
ありがとうございます!
早速、使わせて頂きました!
そこで失礼ながら質問なのですが、目標座標をイベントキャラにしたり、変数で指定等は出来るのでしょうか?
座標との最短ルート上に壁があっても
自発的に他の道を検索して移動させるにはどのように組めば良いでしょうか?
質問ばかり重ねて申し訳ありません。
よろしければご教授お願いいたします。。
Re: vxでイベントの移動ルート先を座標指定にするには
Posted: 2018年3月29日(木) 19:52
by faida
目標をイベントにする場合は、イベントの座標を入れてやります。
イベントは「$game_map.events[id]」で取得できるので、後は座標を取得します。
idのところはイベントのIDを入れてください。以下はID2番に近づく処理です。
コード: 全て選択
move_toward_point($game_map.events[2].x, $game_map.events[2].y)
変数はもっと簡単で、「$game_variables[id]」で取得できます。
以下はX座標が変数3番、Y座標が変数4番の座標に近づく処理です。
コード: 全て選択
move_toward_point($game_variables[3], $game_variables[4])
で、肝心の
座標との最短ルート上に壁があっても自発的に他の道を検索して移動させる
ですが、これは現状では
無理です。
というのも、提示したスクリプトでは壁の存在を認知する機能がないので、これを使ってどうこうできるものでは
ないからです。
前回の書き込みでVXのスクリプトがないなどと書いたのはその機能があるスクリプトのことです。
一応、ネット上には「経路探索」という名前でアルゴリズムの解説が載っています。
理屈が知りたいだけなら、私が解説するよりそちらを見たほうがよいでしょう。
とはいっても前回書き込みましたように、私も昔同じような機能を作ってたので、現物のスクリプトは存在します。
が、ほとんどプロジェクト専用に組んであるので抜き出して使うには難しいです。
あと、(処理するキャラの数の関係かもしれませんが)処理が重たいのであんまりおすすめできません。
Re: vxでイベントの移動ルート先を座標指定にするには
Posted: 2018年3月30日(金) 08:42
by ダイトウ
イベントコマンドを駆使して
経路探索が出来ないものか考えましたが
スクリプトでも無理なら仕方ないですね。。
何度もご丁寧に返信ありがとうございました!