赞 | 68 |
VIP | 397 |
好人卡 | 580 |
积分 | 22 |
经验 | 311270 |
最后登录 | 2022-3-9 |
在线时间 | 4033 小时 |
…あたしは天使なんかじゃないわ
- 梦石
- 0
- 星屑
- 2208
- 在线时间
- 4033 小时
- 注册时间
- 2010-10-4
- 帖子
- 10779
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 taroxd 于 2015-2-11 19:34 编辑
#-------------------------------------------------------------------------- # ● require Taroxd基础设置 # 设置地图通行度 #-------------------------------------------------------------------------- # # 使用方法1:在“设置区域通行度”处填入一定可以通行的区域和一定不能通行的区域。 # # 例:PASSABLE_REGIONS = [2, 5, 8..11] # 表明区域 2, 5, 8, 9, 10, 11 可以通行,无论上面是什么图块。 # # 使用方法2:** require 显示地图通行度 ** # # 测试模式下,把 EDIT_MODE 设为 true, # 然后在地图上按下确定键即可改变当前位置的通行度。 # 该模式下,角色可以自由穿透。 # # △表示不改变,○表示可以通行,×表示不可通行。颜色表示最终的通行度。 # # 需要清空设置的话,删除设置文件(见 FILE 常量)即可。 # # 需要重置一张地图的设置的话,可以调用如下脚本: # Taroxd::Passage.clear(map_id) # 其中 map_id 为地图 ID。若要清除当前地图的通行度,map_id 可以不填。 # 注意,清除后,通行度的显示并不会立即改变。重新打开游戏即可看到效果。 # #-------------------------------------------------------------------------- module Taroxd::Passage # 地图通行度信息会保存到这个文件。建议每次编辑前备份该文件。 FILE = 'Data/MapPassage.rvdata2' # 是否打开编辑模式。需要前置脚本“显示地图通行度”才可打开。 EDIT_MODE = false # 编辑方式(可整合鼠标脚本) EDIT_TRIGGER = -> { Input.trigger?(:C) } EDIT_POINT = -> { [$game_player.x, $game_player.y] } # 设置区域通行度。可以使用 Range。 PASSABLE_REGIONS = [] # 可以通行的区域 IMPASSABLE_REGIONS = [] # 不可通行的区域 # 常量,不建议改动 DEFAULT = 0 PASSABLE = 1 IMPASSABLE = 2 TEXTS = ['△', '○', '×'] SIZE = TEXTS.size # 通行度的哈希表。以地图ID为键,以通行度的二维 Table 为值。 @data = File.exist?(FILE) ? load_data(FILE) : {} class << self # 获取 x, y 坐标处的通行度设定。(DEFAULT/PASSABLE/IMPASSABLE) def [](x, y) return data[x, y] if data[x, y] != DEFAULT rid = $game_map.region_id(x, y) return PASSABLE if PASSABLE_REGIONS.any? { |e| e === rid } return IMPASSABLE if IMPASSABLE_REGIONS.any? { |e| e === rid } DEFAULT end # 更新,编辑模式下应每帧调用一次 def update return unless EDIT_TRIGGER.call x, y = EDIT_POINT.call data[x, y] = (data[x, y] + 1) % SIZE save end # 获取当前地图的数据 def data table = @data[map_id] ||= Table.new(width, height) if table.xsize < width || table.ysize < height update_table(table) else table end end # 清除一个地图的设置 def clear(map_id = $game_map.map_id) @data.delete(map_id) save end private # 如果表格不够大,那么重新建立表格 def update_table(table) @data[map_id] = new_table = Table.new(width, height) table.xsize.times do |x| table.ysize.times do |y| new_table[x, y] = table[x, y] end end new_table end # 将所有数据保存到文件 def save save_data(@data, FILE) end # 获取当前地图信息 def map_id $game_map.map_id end def width $game_map.width end def height $game_map.height end end end class Game_Map psg = Taroxd::Passage def_chain :passable? do |old, x, y, d| case psg[x, y] when psg::DEFAULT then old.call(x, y, d) when psg::PASSABLE then true when psg::IMPASSABLE then false end end end if $TEST && Taroxd::Passage::EDIT_MODE class Game_Player < Game_Character # 每帧调用一次 Taroxd::Passage.update def_after :update, Taroxd::Passage.method(:update) def debug_through? true end end class Taroxd::PlanePassage < Plane TEXT_RECT = Rect.new(0, 0, 32, 32) const_set :VISIBLE, true psg = Taroxd::Passage include psg # 通行度文字的位图缓存 def text_bitmaps @text_bitmap_cache ||= TEXTS.map do |text| bitmap = Bitmap.new(TEXT_RECT.width, TEXT_RECT.height) bitmap.draw_text(TEXT_RECT, text, 1) bitmap end end # 绘制通行度的设置情况 def_after :draw_point do |x, y| bitmap.blt(x * 32, y * 32, text_bitmaps[psg.data[x, y]], TEXT_RECT) end # 更新通行度的变化 def_after :update do return unless EDIT_TRIGGER.call x, y = EDIT_POINT.call bitmap.clear_rect(x * 32, y * 32, 32, 32) draw_point(x, y) end def_before :dispose do @text_bitmaps_cache.each(&:dispose) if @text_bitmaps end end end
#--------------------------------------------------------------------------
# ● require Taroxd基础设置
# 设置地图通行度
#--------------------------------------------------------------------------
#
# 使用方法1:在“设置区域通行度”处填入一定可以通行的区域和一定不能通行的区域。
#
# 例:PASSABLE_REGIONS = [2, 5, 8..11]
# 表明区域 2, 5, 8, 9, 10, 11 可以通行,无论上面是什么图块。
#
# 使用方法2:** require 显示地图通行度 **
#
# 测试模式下,把 EDIT_MODE 设为 true,
# 然后在地图上按下确定键即可改变当前位置的通行度。
# 该模式下,角色可以自由穿透。
#
# △表示不改变,○表示可以通行,×表示不可通行。颜色表示最终的通行度。
#
# 需要清空设置的话,删除设置文件(见 FILE 常量)即可。
#
# 需要重置一张地图的设置的话,可以调用如下脚本:
# Taroxd::Passage.clear(map_id)
# 其中 map_id 为地图 ID。若要清除当前地图的通行度,map_id 可以不填。
# 注意,清除后,通行度的显示并不会立即改变。重新打开游戏即可看到效果。
#
#--------------------------------------------------------------------------
module Taroxd::Passage
# 地图通行度信息会保存到这个文件。建议每次编辑前备份该文件。
FILE = 'Data/MapPassage.rvdata2'
# 是否打开编辑模式。需要前置脚本“显示地图通行度”才可打开。
EDIT_MODE = false
# 编辑方式(可整合鼠标脚本)
EDIT_TRIGGER = -> { Input.trigger?(:C) }
EDIT_POINT = -> { [$game_player.x, $game_player.y] }
# 设置区域通行度。可以使用 Range。
PASSABLE_REGIONS = [] # 可以通行的区域
IMPASSABLE_REGIONS = [] # 不可通行的区域
# 常量,不建议改动
DEFAULT = 0
PASSABLE = 1
IMPASSABLE = 2
TEXTS = ['△', '○', '×']
SIZE = TEXTS.size
# 通行度的哈希表。以地图ID为键,以通行度的二维 Table 为值。
@data = File.exist?(FILE) ? load_data(FILE) : {}
class << self
# 获取 x, y 坐标处的通行度设定。(DEFAULT/PASSABLE/IMPASSABLE)
def [](x, y)
return data[x, y] if data[x, y] != DEFAULT
rid = $game_map.region_id(x, y)
return PASSABLE if PASSABLE_REGIONS.any? { |e| e === rid }
return IMPASSABLE if IMPASSABLE_REGIONS.any? { |e| e === rid }
DEFAULT
end
# 更新,编辑模式下应每帧调用一次
def update
return unless EDIT_TRIGGER.call
x, y = EDIT_POINT.call
data[x, y] = (data[x, y] + 1) % SIZE
save
end
# 获取当前地图的数据
def data
table = @data[map_id] ||= Table.new(width, height)
if table.xsize < width || table.ysize < height
update_table(table)
else
table
end
end
# 清除一个地图的设置
def clear(map_id = $game_map.map_id)
@data.delete(map_id)
save
end
private
# 如果表格不够大,那么重新建立表格
def update_table(table)
@data[map_id] = new_table = Table.new(width, height)
table.xsize.times do |x|
table.ysize.times do |y|
new_table[x, y] = table[x, y]
end
end
new_table
end
# 将所有数据保存到文件
def save
save_data(@data, FILE)
end
# 获取当前地图信息
def map_id
$game_map.map_id
end
def width
$game_map.width
end
def height
$game_map.height
end
end
end
class Game_Map
psg = Taroxd::Passage
def_chain :passable? do |old, x, y, d|
case psg[x, y]
when psg::DEFAULT then old.call(x, y, d)
when psg::PASSABLE then true
when psg::IMPASSABLE then false
end
end
end
if $TEST && Taroxd::Passage::EDIT_MODE
class Game_Player < Game_Character
# 每帧调用一次 Taroxd::Passage.update
def_after :update, Taroxd::Passage.method(:update)
def debug_through?
true
end
end
class Taroxd::PlanePassage < Plane
TEXT_RECT = Rect.new(0, 0, 32, 32)
const_set :VISIBLE, true
psg = Taroxd::Passage
include psg
# 通行度文字的位图缓存
def text_bitmaps
@text_bitmap_cache ||= TEXTS.map do |text|
bitmap = Bitmap.new(TEXT_RECT.width, TEXT_RECT.height)
bitmap.draw_text(TEXT_RECT, text, 1)
bitmap
end
end
# 绘制通行度的设置情况
def_after :draw_point do |x, y|
bitmap.blt(x * 32, y * 32, text_bitmaps[psg.data[x, y]], TEXT_RECT)
end
# 更新通行度的变化
def_after :update do
return unless EDIT_TRIGGER.call
x, y = EDIT_POINT.call
bitmap.clear_rect(x * 32, y * 32, 32, 32)
draw_point(x, y)
end
def_before :dispose do
@text_bitmaps_cache.each(&:dispose) if @text_bitmaps
end
end
end
|
|