Project1
标题:
关于限制主角在地图上的移动范围
[打印本页]
作者:
sumaoxian123456
时间:
2022-2-13 17:05
标题:
关于限制主角在地图上的移动范围
想请教一下,如何实现在一张大地图上,让主角只能在当前画面大小的区域内移动?
做的是个动作游戏,想做一个遇到boss了就锁定在当前区域,不能跑出去,只能强行战斗的系统。
作者:
任小雪
时间:
2022-2-13 17:46
并行,开关
与空气墙这种设定了解一下
作者:
alexncf125
时间:
2022-2-13 18:18
插入以下脚本后, 打开3号及4号开关
#==============================================================================
# ★スクロール禁止 ver1.0 by USK
#------------------------------------------------------------------------------
# ・特定のスイッチがオンのときスクロールを禁止します。
#==============================================================================
=begin
・21行目のFixDisplayFlagVで設定した番号のスイッチがオンのとき
縦スクロールが禁止されます。
・22行目のFixDisplayFlagHで設定した番号のスイッチがオンのとき
横スクロールが禁止されます。
=end
#==============================================================================
# ■ Game_Map
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# ● 設定
#--------------------------------------------------------------------------
FixDisplayFlagV = 3 #禁止Y轴卷动的开关编号
FixDisplayFlagH = 4 #禁止X轴卷动的开关编号
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
alias :fix_display_scroll_down :scroll_down
alias :fix_display_scroll_left :scroll_left
alias :fix_display_scroll_right :scroll_right
alias :fix_display_scroll_up :scroll_up
alias :fix_display_refresh :refresh
alias :fix_display_valid? :valid?
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
def fix_display?
$game_switches[FixDisplayFlagV] || $game_switches[FixDisplayFlagH]
end
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
def need_centering?
ret = !fix_display? &&
SceneManager.scene.is_a?(Scene_Map) &&
@on_fix_display
@on_fix_display = fix_display?
ret
end
#--------------------------------------------------------------------------
# ●
#--------------------------------------------------------------------------
def centering
div = 20
x = @display_x
dx = $game_player.x - (Graphics.width / 32 - 1) / 2.0 - x
dx /= div
y = @display_y
dy = $game_player.y - (Graphics.height / 32 - 1) / 2.0 - y
dy /= div
div.times do
set_display_pos(x, y)
x += dx
y += dy
scene = SceneManager.scene
scene.update_basic
scene.instance_variable_get(:@spriteset).update
end
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
centering if need_centering?
fix_display_refresh
end
#--------------------------------------------------------------------------
# ● 下にスクロール
#--------------------------------------------------------------------------
def scroll_down(distance)
fix_display_scroll_down(distance) unless $game_switches[FixDisplayFlagV]
end
#--------------------------------------------------------------------------
# ● 左にスクロール
#--------------------------------------------------------------------------
def scroll_left(distance)
fix_display_scroll_left(distance) unless $game_switches[FixDisplayFlagH]
end
#--------------------------------------------------------------------------
# ● 右にスクロール
#--------------------------------------------------------------------------
def scroll_right(distance)
fix_display_scroll_right(distance) unless $game_switches[FixDisplayFlagH]
end
#--------------------------------------------------------------------------
# ● 上にスクロール
#--------------------------------------------------------------------------
def scroll_up(distance)
fix_display_scroll_up(distance) unless $game_switches[FixDisplayFlagV]
end
#--------------------------------------------------------------------------
# ● 有効座標判定
#--------------------------------------------------------------------------
def valid?(x, y)
ret = fix_display_valid?(x, y)
if $game_switches[FixDisplayFlagV]
ret &&= y >= @display_y && y < @display_y + (Graphics.height >> 5)
end
if $game_switches[FixDisplayFlagH]
ret &&= x >= @display_x && x < @display_x + (Graphics.width >> 5)
end
ret
end
end
复制代码
作者:
sumaoxian123456
时间:
2022-2-13 21:07
任小雪 发表于 2022-2-13 17:46
并行,开关
与空气墙这种设定了解一下
对哦,这个不错,作为事件党来说是个好方案,谢谢。
作者:
sumaoxian123456
时间:
2022-2-13 21:08
alexncf125 发表于 2022-2-13 18:18
插入以下脚本后, 打开3号及4号开关
好的,非常感谢!我去试试!
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1