Project1
标题: 改变地图事件的图片 [打印本页]
作者: sblkhgm 时间: 2012-11-26 21:17
标题: 改变地图事件的图片
本帖最后由 sblkhgm 于 2012-11-27 14:19 编辑
问下改变地图事件的图片和事件的朝向 用脚本是怎么写的 这个
作者: 匈魔剑 时间: 2012-11-27 20:38
本帖最后由 匈魔剑 于 2012-11-27 20:47 编辑
改变图片这个没有现成的方法,所以要在Game_Character类里现写一个方法
我写了一个,你可以根据自己的需要来完善
#--------------------------------------------------------------------------
# ● 手动改变角色图形★
#--------------------------------------------------------------------------
def changeCharPic(picName, hue, patt)
@tile_id = 0
@character_name = picName if picName!=nil
@character_hue = hue if hue!=nil
@pattern = patt if patt!=nil
@original_pattern = patt if patt!=nil
end
#--------------------------------------------------------------------------
# ● 手动改变角色图形★
#--------------------------------------------------------------------------
def changeCharPic(picName, hue, patt)
@tile_id = 0
@character_name = picName if picName!=nil
@character_hue = hue if hue!=nil
@pattern = patt if patt!=nil
@original_pattern = patt if patt!=nil
end
picName 就是行走图的文件名
hue是色相,看帮助文档,好像范围是0-360……我没研究过,你可以试试。
patt是图案。范围是0-3,你知道的,行走图在一个方向有四个图案。直立、伸左腿、迈右键……
我写成这三个值都支持nil,当输入nil时,对应的不变。比如只改变角色图形,但是不想改变色相和图案……
其实这方法的目的就是改@character_name @character_hue @pattern 这三个值,你嫌麻烦的话也可以直接把它们改成attr_accssor,然后在外面任何一个类里都可以直接chara.character_name="xxx"这样地改……
上面我写的这个方法使用的时候,需要先得到对应的那个角色
举个例子,我写在Interpreter类里的话(或者写在事件的脚本里)
#--------------------------------------------------------------------------
# ● 改变角色图形
# evtId - 事件ID
# picName - 行走图文件名
# hue - 行走图色相
# pattern - 行走图图案
#--------------------------------------------------------------------------
def bian(evtId, picName, hue, pattern)
chara = get_character(evtId)
chara.changeCharPic(picName, hue, pattern)
end
#--------------------------------------------------------------------------
# ● 改变角色图形
# evtId - 事件ID
# picName - 行走图文件名
# hue - 行走图色相
# pattern - 行走图图案
#--------------------------------------------------------------------------
def bian(evtId, picName, hue, pattern)
chara = get_character(evtId)
chara.changeCharPic(picName, hue, pattern)
end
可以直接很方便地用里面的get_character这个方法,根据事件ID来获取当前地图上的角色。
但是如果想写在其他类里的话,就不能直接用这个方法了,不过可以搜一下这方法,看一下是怎么写的,很简单,就是从数组里拿个值而已……
改变方向就比较简单的,Game_Character里有现成的转向用的4个方法。turn_down turn_left turn_right turn_up
下面举个例子,也是写在Interpreter类里(或者写在事件的脚本里),注意也要先get_character。
#--------------------------------------------------------------------------
# ● 改变角色方向
#--------------------------------------------------------------------------
def zhuan(evtId, dirt)
chara = get_character(evtId)
case dirt
when 2:
chara.turn_down
when 4:
chara.turn_left
when 6:
chara.turn_right
when 8:
chara.turn_up
end
end
#--------------------------------------------------------------------------
# ● 改变角色方向
#--------------------------------------------------------------------------
def zhuan(evtId, dirt)
chara = get_character(evtId)
case dirt
when 2:
chara.turn_down
when 4:
chara.turn_left
when 6:
chara.turn_right
when 8:
chara.turn_up
end
end
然后在事件脚本里直接调用 bian和zhuan,就可以实现改角色图形和转向了。
范例,改的地方在脚本里有★:
-
-
Project1.rar
186.77 KB, 下载次数: 15
作者: sblkhgm 时间: 2012-11-28 13:25
匈魔剑 发表于 2012-11-27 20:38
改变图片这个没有现成的方法,所以要在Game_Character类里现写一个方法
我写了一个,你可以根据自己的需要 ...
太感谢了 能不能在离开这场景 然后回来时 他们的图片还是改变的哪张
作者: 匈魔剑 时间: 2012-11-28 14:21
本帖最后由 匈魔剑 于 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)
作者: Wind2010 时间: 2012-12-1 11:53
直接独立开关+新事件页不行么→ →
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |