# 文件名第一位为'&'支持8张循环
# 文件中有8行,前四行依次对应脸向下、脸向左、脸向右、脸向上的站立图
# 后四行依次对应下行、左行、右行、上行的行走图
#
# 文件名第一位为'%'支持8张循环
# 文件中有4行,依次对应下行、左行、右行、上行的行走图
#
# 这两种格式的动画,为适应RMXP中原有1600X1600或800的行走图,
# 把人物图片的中心点位置往下移18%,让脚与想站的格子相吻合
# 定义一个模块级常量,文件名第一位为'&'或'%'时每帧画面宽度是总宽除以8
# 第1495号开关量为On时,表示当前是站立状态,否则是移动状态
module MY_SPRITE_DEFINE
CONST_FRAME_NUMBER = 8
SWITCH_SN_STOP_OR_MOVING = 1495
end
class Sprite_Character < Sprite_Base
#--------------------------------------------------------------------------
# ● 设定角色的位图
#--------------------------------------------------------------------------
def set_character_bitmap
self.bitmap = Cache.character(@character_name)
sign = @character_name[/^[\!\$]./]
if @character_name[0] == '&'
@cw = bitmap.width / MY_SPRITE_DEFINE::CONST_FRAME_NUMBER
@ch = bitmap.height / 8 # 前四行为站立图,后四行为行走图
self.oy = @ch * 0.82 # 把图片的中心点位置往下移18%
elsif @character_name[0] == '%'
@cw = bitmap.width / MY_SPRITE_DEFINE::CONST_FRAME_NUMBER
@ch = bitmap.height / 4
self.oy = @ch * 0.82 # 把图片的中心点位置往下移18%
else
if sign && sign.include?('$')
@cw = bitmap.width / 3
@ch = bitmap.height / 4
else
@cw = bitmap.width / 12
@ch = bitmap.height / 8
end
self.oy = @ch
end
self.ox = @cw / 2
end
#--------------------------------------------------------------------------
# ● 源矩形的更新
#--------------------------------------------------------------------------
def update_src_rect
if @tile_id == 0
if @character_name[0] == '&'
sx = @character.pattern * @cw
if $game_switches[MY_SPRITE_DEFINE::SWITCH_SN_STOP_OR_MOVING]
# 如果是站立着的,从前4行图形里取对应序号的帧
sy = (@character.direction - 2) / 2 * @ch
else
# 如果是行走中的,从后4行图形里取对应序号的帧
sy = ((@character.direction - 2) / 2 + 4) * @ch
end
elsif @character_name[0] == '%'
# 根据指定的帧编号获取对应序号的画面
sx = @character.pattern * @cw
sy = (@character.direction - 2) / 2 * @ch
else
index = @character.character_index
pattern = @character.pattern < 3 ? @character.pattern : 1
sx = (index % 4 * 3 + pattern) * @cw
sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
end
self.src_rect.set(sx, sy, @cw, @ch)
end
end
end
class Game_CharacterBase
#--------------------------------------------------------------------------
# ● 更新动画图案
#--------------------------------------------------------------------------
def update_anime_pattern
if @character_name[0] == '&'
# 系统开关量1495中存放主角是在站立状态吗?true or false
$game_switches[MY_SPRITE_DEFINE::SWITCH_SN_STOP_OR_MOVING]= @stop_count > 0
# 这里+1再用8取模,则1~8帧就会在行走时循环
@pattern = (@pattern + 1) % MY_SPRITE_DEFINE::CONST_FRAME_NUMBER
elsif @character_name[0] == '%'
# 这里+1再用8取模,则1~8帧就会在行走时循环
@pattern = (@pattern + 1) % MY_SPRITE_DEFINE::CONST_FRAME_NUMBER
else
if !@step_anime && @stop_count > 0
@pattern = @original_pattern
else
@pattern = (@pattern + 1) % 4
end
end
end
end