#==============================================================================
# 在窗口中绘制不同身体朝向的角色行走图
# 调用方法·例: @xxxx_window.draw_character_turn(character_name, character_index, x, y)
#==============================================================================
class Window_Base < Window
# 定义身体朝向的常量 (0-下,1-左,2-右,3-上)
TURN = 3
#--------------------------------------------------------------------------
# * 绘制角色图像 (原有方法,绘制的行走图身体朝下)
# character_name : 角色图像文件名
# character_index : 角色图像索引
# x : 绘制点 x-坐标
# y : 绘制点 y-坐标
#--------------------------------------------------------------------------
def draw_character(character_name, character_index, x, y)
return if character_name == nil # 检测角色位图是否为空
bitmap = Cache.character(character_name) # 从游戏的缓存中获取角色的位图
sign = character_name[/^[\!\$]./]# 使用正则表达式来匹配角色名称的第一个字符,如果匹配成功,sign 变量将存储该字符。
if sign != nil and sign.include?('$') # 检查 sign 变量是否不为 nil 并且包含字符 $。
cw = bitmap.width / 3 # 半身头像位图的宽度
ch = bitmap.height / 4 # 半身头像位图的高度
else
cw = bitmap.width / 12 # 行走图宽度
ch = bitmap.height / 8 # 行走图高度
end
n = character_index # 存储角色位图索引
# x 坐标是根据图像索引和每行的图像数量(对于全身图像通常是 4 个)计算的,y 坐标是根据图像索引除以每行的图像数量计算的。cw 和 ch 是源区域的宽度和高度。
src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch) # 通过Rect定义位图绘制区域
# blt 是 Bitmap 类的方法,将源位图(bitmap)中的一个区域(由 src_rect 定义)绘制到窗口内容位图(self.contents)上的指定位置(由 x 和 y 坐标定义)
# x - cw / 2 和 y - ch 是目标位置的坐标,它们确保角色图像居中绘制在指定的 x 和 y 坐标上。
self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect) # 执行实际的绘制操作
end
#--------------------------------------------------------------------------
# * 绘制角色行走图 - 身体朝上
#--------------------------------------------------------------------------
def draw_character_turn(character_name, character_index, x, y)
return if character_name == nil
bitmap = Cache.character(character_name)
sign = character_name[/^[\!\$]./]
if sign != nil
cw = bitmap.width / 12
ch = bitmap.height / 8
end
n = character_index
src_rect = Rect.new((n%4*3+1)*cw, (n/4*4+TURN)*ch, cw, ch)
self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
end
end