本帖最后由 匈魔剑 于 2012-11-28 14:29 编辑
sblkhgm 发表于 2012-11-28 13:25
太感谢了 能不能在离开这场景 然后回来时 他们的图片还是改变的哪张
这样的话,就涉及到地图ID了……
所以需要在Game_Event里再重写一下changeCharPic方法(因为只有这个类里才有地图ID参数,主角类不需要有地图参数……), 如果想让主角的图形也可以像事件这样变,还需要再在Game_Player里也再重写一下这方法
我重写一下Game_Event里的,Game_Player的很简单,如果你有需要的话,就照着自己写吧
#-------------------------------------------------------------------------- # ● 手动改变事件角色图形 ★ #-------------------------------------------------------------------------- def changeCharPic(picName, hue, patt) super(picName, hue, patt) # 修正值存下来 $myCharPic = {} if $myCharPic==nil key = "#{@map_id}-#{@id}" $myCharPic[key] = [@character_name, @character_hue, @pattern] end
#--------------------------------------------------------------------------
# ● 手动改变事件角色图形 ★
#--------------------------------------------------------------------------
def changeCharPic(picName, hue, patt)
super(picName, hue, patt)
# 修正值存下来
$myCharPic = {} if $myCharPic==nil
key = "#{@map_id}-#{@id}"
$myCharPic[key] = [@character_name, @character_hue, @pattern]
end
就是把图形、色相、图案都存在一个叫$myCharPic的哈希表里。此表的key值是 地图ID-事件ID 这样的格式(如果在Game_Player里写的话,就不用这样麻烦的key了,直接一个"player"这种的key就行,因为主角是独一无二的……)
然后还得有一个从此哈希表中读取数据,替代当前数据的方法
#-------------------------------------------------------------------------- # ● 对事件角色图形进行强制修正 ★ #-------------------------------------------------------------------------- def fixCharPic return if $myCharPic==nil key = "#{@map_id}-#{@id}" return unless $myCharPic.has_key?(key) value = $myCharPic[key] changeCharPic(value[0], value[1], value[2]) end
#--------------------------------------------------------------------------
# ● 对事件角色图形进行强制修正 ★
#--------------------------------------------------------------------------
def fixCharPic
return if $myCharPic==nil
key = "#{@map_id}-#{@id}"
return unless $myCharPic.has_key?(key)
value = $myCharPic[key]
changeCharPic(value[0], value[1], value[2])
end
这个方法要在Game_Event的refresh方法里调用一下(就加了一行,带★号的那行)
(前略) # 设置各实例变量 @tile_id = @page.graphic.tile_id @character_name = @page.graphic.character_name @character_hue = @page.graphic.character_hue if @original_direction != @page.graphic.direction @direction = @page.graphic.direction @original_direction = @direction @prelock_direction = 0 end if @original_pattern != @page.graphic.pattern @pattern = @page.graphic.pattern @original_pattern = @pattern end fixCharPic # ★在此修正 @opacity = @page.graphic.opacity @blend_type = @page.graphic.blend_type @move_type = @page.move_type @move_speed = @page.move_speed (后略)
(前略)
# 设置各实例变量
@tile_id = @page.graphic.tile_id
@character_name = @page.graphic.character_name
@character_hue = @page.graphic.character_hue
if @original_direction != @page.graphic.direction
@direction = @page.graphic.direction
@original_direction = @direction
@prelock_direction = 0
end
if @original_pattern != @page.graphic.pattern
@pattern = @page.graphic.pattern
@original_pattern = @pattern
end
fixCharPic # ★在此修正
@opacity = @page.graphic.opacity
@blend_type = @page.graphic.blend_type
@move_type = @page.move_type
@move_speed = @page.move_speed
(后略)
这样就可以了。
如果想让这个在存档读档之后仍然有效,记得也要把这个全局哈希表在存档时存下来。这个挺简单的……应该不用我写了……
不过这样的话还有一个小问题,就是这个fixCharPic的优先级变得非常高,被你用脚本改过之后的事件,以后再想用事件改恐怕也改不了了= =
所以最好再写一个用来释放它的方法,可以让一切恢复正常。作用就是将储存的数据从$myCharPic里删掉,让一切恢复正常
举个例子
#-------------------------------------------------------------------------- # ● 删除储存的修正值,使一切恢复正常 ★ #-------------------------------------------------------------------------- def delCharPic return if $myCharPic==nil key = "#{@map_id}-#{@id}" return unless $myCharPic.has_key?(key) $myCharPic.delete(key) end
#--------------------------------------------------------------------------
# ● 删除储存的修正值,使一切恢复正常 ★
#--------------------------------------------------------------------------
def delCharPic
return if $myCharPic==nil
key = "#{@map_id}-#{@id}"
return unless $myCharPic.has_key?(key)
$myCharPic.delete(key)
end
或者你也可以自己加些if else什么的控制一下……
根据实际需要弄吧
写好Game_Event之后的范例:
手动改变角色图片方向.rar
(377.33 KB, 下载次数: 16)
|