设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1615|回复: 4
打印 上一主题 下一主题

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
322 小时
注册时间
2011-6-24
帖子
274
跳转到指定楼层
1
发表于 2012-11-26 21:17:21 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

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

问下改变地图事件的图片和事件的朝向 用脚本是怎么写的 这个

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
5
发表于 2012-12-1 11:53:27 | 只看该作者
直接独立开关+新事件页不行么→ →

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

使用道具 举报

Lv1.梦旅人

巴斯克维尔的猎犬

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

第1届Title华丽大赛冠军

4
发表于 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的很简单,如果你有需要的话,就照着自己写吧

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 手动改变事件角色图形 ★
  3.   #--------------------------------------------------------------------------
  4.   def changeCharPic(picName, hue, patt)
  5.     super(picName, hue, patt)
  6.     # 修正值存下来
  7.     $myCharPic = {} if $myCharPic==nil
  8.     key = "#{@map_id}-#{@id}"
  9.     $myCharPic[key] = [@character_name, @character_hue, @pattern]
  10.   end

就是把图形、色相、图案都存在一个叫$myCharPic的哈希表里。此表的key值是 地图ID-事件ID 这样的格式(如果在Game_Player里写的话,就不用这样麻烦的key了,直接一个"player"这种的key就行,因为主角是独一无二的……)

然后还得有一个从此哈希表中读取数据,替代当前数据的方法
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 对事件角色图形进行强制修正 ★
  3.   #--------------------------------------------------------------------------
  4.   def fixCharPic
  5.     return if $myCharPic==nil
  6.     key = "#{@map_id}-#{@id}"
  7.     return unless $myCharPic.has_key?(key)
  8.     value = $myCharPic[key]
  9.     changeCharPic(value[0], value[1], value[2])
  10.   end


这个方法要在Game_Event的refresh方法里调用一下(就加了一行,带★号的那行)
RUBY 代码复制
  1. (前略)
  2.     # 设置各实例变量
  3.     @tile_id = @page.graphic.tile_id
  4.     @character_name = @page.graphic.character_name
  5.     @character_hue = @page.graphic.character_hue
  6.     if @original_direction != @page.graphic.direction
  7.       @direction = @page.graphic.direction
  8.       @original_direction = @direction
  9.       @prelock_direction = 0
  10.     end
  11.     if @original_pattern != @page.graphic.pattern
  12.       @pattern = @page.graphic.pattern
  13.       @original_pattern = @pattern
  14.     end
  15.     fixCharPic # ★在此修正
  16.     @opacity = @page.graphic.opacity
  17.     @blend_type = @page.graphic.blend_type
  18.     @move_type = @page.move_type
  19.     @move_speed = @page.move_speed
  20. (后略)



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

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


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

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

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

使用道具 举报

Lv1.梦旅人

巴斯克维尔的猎犬

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

第1届Title华丽大赛冠军

2
发表于 2012-11-27 20:38:52 | 只看该作者
本帖最后由 匈魔剑 于 2012-11-27 20:47 编辑

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

上面我写的这个方法使用的时候,需要先得到对应的那个角色
举个例子,我写在Interpreter类里的话(或者写在事件的脚本里)
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 改变角色图形
  3.   # evtId - 事件ID
  4.   # picName - 行走图文件名
  5.   # hue - 行走图色相
  6.   # pattern - 行走图图案
  7.   #--------------------------------------------------------------------------
  8.   def bian(evtId, picName, hue, pattern)
  9.     chara = get_character(evtId)
  10.     chara.changeCharPic(picName, hue, pattern)
  11.   end

可以直接很方便地用里面的get_character这个方法,根据事件ID来获取当前地图上的角色。
但是如果想写在其他类里的话,就不能直接用这个方法了,不过可以搜一下这方法,看一下是怎么写的,很简单,就是从数组里拿个值而已……


改变方向就比较简单的,Game_Character里有现成的转向用的4个方法。turn_down turn_left turn_right turn_up
下面举个例子,也是写在Interpreter类里(或者写在事件的脚本里),注意也要先get_character。
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 改变角色方向
  3.   #--------------------------------------------------------------------------
  4.   def zhuan(evtId, dirt)
  5.     chara = get_character(evtId)
  6.     case dirt
  7.     when 2:
  8.       chara.turn_down
  9.     when 4:
  10.       chara.turn_left
  11.     when 6:
  12.       chara.turn_right
  13.     when 8:
  14.       chara.turn_up
  15.     end
  16.   end



然后在事件脚本里直接调用 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
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-11 16:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表