プレイヤーが8方向に移動できるようになるスクリプトです。
壁を斜めにすり抜けてしまうと描画が不自然になるため、
その場合、斜め移動は不可能と判断し、直線方向への移動を試みます。
イベントの起動判定などについては、処理が重そうなので手を付けていません。悪しからず。
更新履歴 | 内容 |
---|---|
2023/08/26 | 初版 |
→スクリプト一覧へ
↓スクリプト(ダブルクリックで全選択)↓
=begin ========================================================================= ■ 「壁抜け無し8方向移動」- NTWMoveDir8 by 地上の洞窟 ================================================================================ プレイヤーが8方向移動できるようになるスクリプトです。 壁を斜めにすり抜けてしまうような場合は通行不可と判定します。 また、斜め移動に失敗した場合でも、直線方向への移動を試みます。 ================================================================================ ■ ここからソースコード =end #========================================================================== class Game_Player < Game_Character # ☆ 再定義 def move_by_input return if !movable? || $game_map.interpreter.running? || (d = Input.dir8) == 0 if d[0] == 0 move_straight(d) # 2, 4, 6, 8 else case d when 1 horz = 4 vert = 2 when 3 horz = 6 vert = 2 when 7 horz = 4 vert = 8 when 9 horz = 6 vert = 8 end x2 = $game_map.round_x_with_direction(@x, horz) y2 = $game_map.round_y_with_direction(@y, vert) c3 = (c1 = passable?(@x, @y, vert)) && passable?(@x, y2, horz) c4 = (c2 = passable?(@x, @y, horz)) && passable?(x2, @y, vert) if c3 && c4 move_diagonal(horz, vert) elsif @lc3 && c2 move_straight(horz) elsif @lc4 && c1 move_straight(vert) elsif c1 move_straight(vert) elsif c2 move_straight(horz) end @lc3 = c3 @lc4 = c4 end end end