| 赞 | 67 |
| VIP | |
| 好人卡 | |
| 积分 | 171 |
| 经验 | |
| 最后登录 | 2026-10-6 |
| 在线时间 | 6059 小时 |
- 梦石
- 0
- 星屑
- 17059
- 在线时间
- 6059 小时
- 注册时间
- 2011-7-18
- 回帖
- 153

|
发表于 2019-8-12 16:23:50
|
显示全部楼层
本帖最后由 gqxastg 于 2019-8-13 00:43 编辑
虽然楼上也给出了另一种解法
这里还是按照楼主要求写了这么一个限制视野的脚本
默认所有非循环地图的四周一列/行(即横纵坐标为0和最大的格子)
正常手段屏幕不会卷动到 玩家无法看到
如果只有横向循环或纵向循环 则不循环的方向两侧也会留一列/行无法看到的格子
脚本[pre lang="ruby"]#==============================================================================
# ■ Game_Map
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# ● 设置显示位置 Overwrite
#--------------------------------------------------------------------------
def set_display_pos(x, y)
######################
x = [1, [x, width - screen_tile_x - 1].min].max unless loop_horizontal?
y = [1, [y, height - screen_tile_y - 1].min].max unless loop_vertical?
######################
@display_x = (x + width) % width
@display_y = (y + height) % height
@parallax_x = x
@parallax_y = y
end
#--------------------------------------------------------------------------
# ● 向下卷动
#--------------------------------------------------------------------------
alias old_space_scroll_down scroll_down
def scroll_down(distance)
distance = [distance, height - screen_tile_y - @display_y - 1].min unless
loop_vertical?
old_space_scroll_down(distance) if distance > 0
end
#--------------------------------------------------------------------------
# ● 向左卷动
#--------------------------------------------------------------------------
alias old_space_scroll_left scroll_left
def scroll_left(distance)
distance = [distance, @display_x - 1].min unless loop_horizontal?
old_space_scroll_left(distance) if distance > 0
end
#--------------------------------------------------------------------------
# ● 向右卷动
#--------------------------------------------------------------------------
alias old_space_scroll_right scroll_right
def scroll_right(distance)
distance = [distance, width - screen_tile_x - @display_x - 1].min unless
loop_horizontal?
old_space_scroll_right(distance) if distance > 0
end
#--------------------------------------------------------------------------
# ● 向上卷动
#--------------------------------------------------------------------------
alias old_space_scroll_up scroll_up
def scroll_up(distance)
distance = [distance, @display_y - 1].min unless loop_vertical?
old_space_scroll_up(distance) if distance > 0
end
end[/pre]
8/13 追加可以单独配置每张地图四周隐藏格数的机能
脚本[pre lang="ruby"]module SnivyLei; module Map_Border_Space
#地图ID对应留出格数的参数
#地图ID => [地图下侧留出的格数, 左, 右, 上]
#地图ID为0则代表未在此列出地图的默认参数 不同地图间用半角逗号分隔
Map_Space_Parameters = { #不能删
0 =>[0, 0, 0, 0],
5 =>[1, 1, 1, 1],
} #不能删
end; end
#==============================================================================
# ■ Game_Map
#==============================================================================
class Game_Map
include SnivyLei::Map_Border_Space
#--------------------------------------------------------------------------
# ● 设置显示位置 Overwrite
#--------------------------------------------------------------------------
def set_display_pos(x, y)
######################
param = Map_Space_Parameters.include?(@map_id) ?
Map_Space_Parameters[@map_id] : Map_Space_Parameters[0]
x = [param[1], [x, width - screen_tile_x - param[2]].min].max unless
loop_horizontal?
y = [param[3], [y, height - screen_tile_y - param[0]].min].max unless
loop_vertical?
######################
@display_x = (x + width) % width
@display_y = (y + height) % height
@parallax_x = x
@parallax_y = y
end
#--------------------------------------------------------------------------
# ● 向下卷动
#--------------------------------------------------------------------------
alias old_space_scroll_down scroll_down
def scroll_down(distance)
unless loop_vertical?
param = Map_Space_Parameters.include?(@map_id) ?
Map_Space_Parameters[@map_id] : Map_Space_Parameters[0]
distance = [distance, height - screen_tile_y - @display_y - param[0]].min
end
old_space_scroll_down(distance) if distance > 0
end
#--------------------------------------------------------------------------
# ● 向左卷动
#--------------------------------------------------------------------------
alias old_space_scroll_left scroll_left
def scroll_left(distance)
unless loop_horizontal?
param = Map_Space_Parameters.include?(@map_id) ?
Map_Space_Parameters[@map_id] : Map_Space_Parameters[0]
distance = [distance, @display_x - param[1]].min
end
old_space_scroll_left(distance) if distance > 0
end
#--------------------------------------------------------------------------
# ● 向右卷动
#--------------------------------------------------------------------------
alias old_space_scroll_right scroll_right
def scroll_right(distance)
unless loop_horizontal?
param = Map_Space_Parameters.include?(@map_id) ?
Map_Space_Parameters[@map_id] : Map_Space_Parameters[0]
distance = [distance, width - screen_tile_x - @display_x - param[2]].min
end
old_space_scroll_right(distance) if distance > 0
end
#--------------------------------------------------------------------------
# ● 向上卷动
#--------------------------------------------------------------------------
alias old_space_scroll_up scroll_up
def scroll_up(distance)
unless loop_vertical?
param = Map_Space_Parameters.include?(@map_id) ?
Map_Space_Parameters[@map_id] : Map_Space_Parameters[0]
distance = [distance, @display_y - param[3]].min
end
old_space_scroll_up(distance) if distance > 0
end
end[/pre] |
评分
-
查看全部评分
|