查看: 2083|回复: 4

[已经过期] 改变地图事件的图片

[复制链接]
梦石
0
星屑
50
在线时间
322 小时
注册时间
2011-6-24
回帖
133
发表于 2012-11-26 21:17:21 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 sblkhgm 于 2012-11-27 14:19 编辑

问下改变地图事件的图片和事件的朝向 用脚本是怎么写的 这个
反反复复吩咐.png

巴斯克维尔的猎犬

梦石
0
星屑
50
在线时间
66 小时
注册时间
2007-6-25
回帖
8211

第1届Title华丽大赛冠军

发表于 2012-11-27 20:38:52 | 显示全部楼层
本帖最后由 匈魔剑 于 2012-11-27 20:47 编辑

改变图片这个没有现成的方法,所以要在Game_Character类里现写一个方法
我写了一个,你可以根据自己的需要来完善
[pre lang="ruby" line="2"]
  #--------------------------------------------------------------------------
  # ● 手动改变角色图形★
  #--------------------------------------------------------------------------
  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[/pre]picName 就是行走图的文件名
hue是色相,看帮助文档,好像范围是0-360……我没研究过,你可以试试。
patt是图案。范围是0-3,你知道的,行走图在一个方向有四个图案。直立、伸左腿、迈右键……
我写成这三个值都支持nil,当输入nil时,对应的不变。比如只改变角色图形,但是不想改变色相和图案……
其实这方法的目的就是改@character_name @character_hue  @pattern 这三个值,你嫌麻烦的话也可以直接把它们改成attr_accssor,然后在外面任何一个类里都可以直接chara.character_name="xxx"这样地改……

上面我写的这个方法使用的时候,需要先得到对应的那个角色
举个例子,我写在Interpreter类里的话(或者写在事件的脚本里)
[pre lang="ruby" line="2"]
  #--------------------------------------------------------------------------
  # ● 改变角色图形
  # evtId - 事件ID
  # picName - 行走图文件名
  # hue - 行走图色相
  # pattern - 行走图图案
  #--------------------------------------------------------------------------
  def bian(evtId, picName, hue, pattern)
    chara = get_character(evtId)
    chara.changeCharPic(picName, hue, pattern)
  end[/pre]
可以直接很方便地用里面的get_character这个方法,根据事件ID来获取当前地图上的角色。
但是如果想写在其他类里的话,就不能直接用这个方法了,不过可以搜一下这方法,看一下是怎么写的,很简单,就是从数组里拿个值而已……


改变方向就比较简单的,Game_Character里有现成的转向用的4个方法。turn_down turn_left turn_right turn_up
下面举个例子,也是写在Interpreter类里(或者写在事件的脚本里),注意也要先get_character。
[pre lang="ruby" line="2"]
  #--------------------------------------------------------------------------
  # ● 改变角色方向
  #--------------------------------------------------------------------------
  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[/pre]


然后在事件脚本里直接调用 bian和zhuan,就可以实现改角色图形和转向了。
范例,改的地方在脚本里有★:

Project1.rar

186.77 KB, 下载次数: 15

点评

其实我是不怎么爱用unless的……常用JAVA和C++,对unless感觉别扭= =话说好像在ACE里是可以很方便地写成unless XXX  发表于 2012-11-28 18:44
if XXX != nil 我比较喜欢写 unless XXX.nil?  发表于 2012-11-28 18:29
回复

使用道具 举报

梦石
0
星屑
50
在线时间
322 小时
注册时间
2011-6-24
回帖
133
 楼主| 发表于 2012-11-28 13:25:05 | 显示全部楼层
匈魔剑 发表于 2012-11-27 20:38
改变图片这个没有现成的方法,所以要在Game_Character类里现写一个方法
我写了一个,你可以根据自己的需要 ...

太感谢了  能不能在离开这场景 然后回来时 他们的图片还是改变的哪张
回复

使用道具 举报

巴斯克维尔的猎犬

梦石
0
星屑
50
在线时间
66 小时
注册时间
2007-6-25
回帖
8211

第1届Title华丽大赛冠军

发表于 2012-11-28 14:21:09 | 显示全部楼层
本帖最后由 匈魔剑 于 2012-11-28 14:29 编辑
sblkhgm 发表于 2012-11-28 13:25
太感谢了  能不能在离开这场景 然后回来时 他们的图片还是改变的哪张


这样的话,就涉及到地图ID了……
所以需要在Game_Event里再重写一下changeCharPic方法(因为只有这个类里才有地图ID参数,主角类不需要有地图参数……), 如果想让主角的图形也可以像事件这样变,还需要再在Game_Player里也再重写一下这方法

我重写一下Game_Event里的,Game_Player的很简单,如果你有需要的话,就照着自己写吧

[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 手动改变事件角色图形 ★
  #--------------------------------------------------------------------------
  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[/pre]
就是把图形、色相、图案都存在一个叫$myCharPic的哈希表里。此表的key值是 地图ID-事件ID 这样的格式(如果在Game_Player里写的话,就不用这样麻烦的key了,直接一个"player"这种的key就行,因为主角是独一无二的……)

然后还得有一个从此哈希表中读取数据,替代当前数据的方法
[pre lang="ruby" line="1"]
  #--------------------------------------------------------------------------
  # ● 对事件角色图形进行强制修正 ★
  #--------------------------------------------------------------------------
  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[/pre]

这个方法要在Game_Event的refresh方法里调用一下(就加了一行,带★号的那行)
[pre lang="ruby" line="1"](前略)
    # 设置各实例变量
    @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
(后略)[/pre]


这样就可以了。
如果想让这个在存档读档之后仍然有效,记得也要把这个全局哈希表在存档时存下来。这个挺简单的……应该不用我写了……

不过这样的话还有一个小问题,就是这个fixCharPic的优先级变得非常高,被你用脚本改过之后的事件,以后再想用事件改恐怕也改不了了= =
所以最好再写一个用来释放它的方法,可以让一切恢复正常。作用就是将储存的数据从$myCharPic里删掉,让一切恢复正常
举个例子
[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # ● 删除储存的修正值,使一切恢复正常 ★
  #--------------------------------------------------------------------------
  def delCharPic
    return if $myCharPic==nil
    key = "#{@map_id}-#{@id}"
    return unless $myCharPic.has_key?(key)
    $myCharPic.delete(key)
  end
[/pre]

或者你也可以自己加些if else什么的控制一下……
根据实际需要弄吧
写好Game_Event之后的范例:
手动改变角色图片方向.rar (377.33 KB, 下载次数: 16)

评分

参与人数 1星屑 +100 收起 理由
hys111111 + 100 认可答案

查看全部评分

回复

使用道具 举报

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
回帖
3515
发表于 2012-12-1 11:53:27 | 显示全部楼层
直接独立开关+新事件页不行么→ →

http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部