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

Project1

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

[已经解决] RPG::Event的问题

[复制链接]

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
跳转到指定楼层
1
发表于 2012-5-13 19:08:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. module RPG
  2.   class Event
  3.     alias initialize_2333 initialize
  4.     def initialize(x,y)
  5.       initialize_2333(x,y)
  6.       @old_name = @name
  7.     end
  8.     attr_accessor :old_name
  9.   end
  10. end
复制代码
我哪里写错了么……测试时调用.old_name返回nil

点评

哦,我明白了,原先Game_Event的attr_reader :event屏蔽掉,reader改为accessor  发表于 2012-5-18 12:29

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

Lv3.寻梦者

双子人

梦石
0
星屑
3190
在线时间
3618 小时
注册时间
2009-4-4
帖子
4154

开拓者

2
发表于 2012-5-13 19:36:39 | 只看该作者
本帖最后由 hys111111 于 2012-5-13 19:42 编辑
  1. @old_name = ""
复制代码
由于module这里原先设定全部都是的是空的,
所以使用时应该设置为空的"",而@old_name = @name的话要在其他地方设置
  1. module RPG
  2.   class Event
  3.     def initialize(x, y)
  4.       @id = 0
  5.       @name = ""
  6.       @x = x
  7.       @y = y
  8.       @pages = [RPG::Event::Page.new]
  9.     end
  10.     attr_accessor :id
  11.     attr_accessor :name
  12.     attr_accessor :x
  13.     attr_accessor :y
  14.     attr_accessor :pages
  15.   end
  16. end

复制代码
另外我查明了一下,
放在Game_Event的
def initialize(map_id, event)里面,super()下面
并且还要这样:@event.old_name = @event.name

点评

強大@@  发表于 2012-5-13 20:01
原來高手還有高高手......@__@  发表于 2012-5-13 19:38

评分

参与人数 1星屑 +50 收起 理由
lsu666666 + 50

查看全部评分

回复

使用道具 举报

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60819
在线时间
1934 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

3
发表于 2012-5-13 20:07:52 | 只看该作者
游戏中是通过Marshal.load 加载的并不经过 initialize
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
186 小时
注册时间
2012-5-8
帖子
987
4
发表于 2012-5-13 21:08:50 | 只看该作者
沙发是正解,你的确写错脚本了。

点评

这算纯水吧?  发表于 2012-5-16 12:23
看什么看,没看过大坑啊!
-------------------------炫翼-----------------------------
剧情:4%
地图:2%
系统:7%
优化:3%
脚本:25%
--------------------------炫翼----------------------------

      工作室


广告位招租....  
回复

使用道具 举报

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
5
 楼主| 发表于 2012-5-16 12:13:13 | 只看该作者
其实我是用放置提取物脚本做的ARPG后发现某地图的怪物一出去再进去就全被重置了- -
查看脚本后发现是因为用名字来定义的怪物的名字被修改了,因此再进去时不能重新加载@item
于是打算用个old_name的参数来确定那个事件是否是怪物……
下面这个是自己改的Game_Event中的initialize,怪物的命名方法是[mob-ID,Color]
  1. class Game_Event
  2.   attr_accessor :item
  3.   #=============================================================================
  4.   # 黑幕敌人
  5.   #=============================================================================
  6.   def initialize(map_id, event) # 可能会发生冲突
  7.     super()
  8.     @map_id = map_id
  9.     @event = event
  10.     @id = @event.id
  11.     @erased = false
  12.     @starting = false
  13.     @through = true
  14.     #===========================================================================
  15.     # 会发生冲突的地方
  16.     #===========================================================================
  17.     if @event.name.gsub("mob-"){""} != @event.name
  18.       enemy_id = @event.name.gsub("mob-"){""}.split(",")[0]
  19.       @item = L_ARPG_enemy.new(map_id,@id.to_i,enemy_id.to_i).clone
  20.       event_c = @event.name.gsub("mob-"){""}.split(",")[1]
  21.       event_c = "0" if event_c.nil?
  22.       @event.name = $data_enemies[enemy_id.to_i].name + "," + event_c ######## 事件的名字被更改掉了
  23.     elsif @event.name.gsub("animal-"){""} != @event.name
  24.       enemy_id = @event.name.gsub("animal-"){""}.split(",")[0]
  25.       @item = L_ARPG_animal.new(map_id,@id.to_i,enemy_id.to_i).clone
  26.       event_c = @event.name.gsub("animal-"){""}.split(",")[1]
  27.       event_c = "0" if event_c.nil?
  28.       @event.name = $data_enemies[enemy_id.to_i].name + "," + event_c
  29.     else
  30.       @item = nil
  31.     end
  32.     #===========================================================================
  33.     # 会发生冲突的地方
  34.     #===========================================================================
  35.     # 初期位置的移动
  36.     moveto(@event.x, @event.y)
  37.     refresh
  38.   end
  39. end
复制代码
因为还有个显示名字的脚本所以直接改掉事件的名字了
而在Game_Map的地图读取中原本读取的是Drop_Item里的地图,现在先改回load_data了,这个问题暂时解决,但是不知道以后还会不会跳Bug……


所以还是想给事件弄个不会被更改的old_name参数来确定那个事件是否是怪物,如果不能在RPG::Event里定义的话求指教……

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

使用道具 举报

Lv3.寻梦者

双子人

梦石
0
星屑
3190
在线时间
3618 小时
注册时间
2009-4-4
帖子
4154

开拓者

6
发表于 2012-5-16 12:50:47 | 只看该作者
本帖最后由 hys111111 于 2012-5-16 12:52 编辑
  1. class Game_Event
  2.   attr_accessor :item
  3.   attr_accessor :old_name#我添加的
  4.   #=============================================================================
  5.   # 黑幕敌人
  6.   #=============================================================================
  7.   def initialize(map_id, event) # 可能会发生冲突
  8.     super()
  9.     @map_id = map_id
  10.     @event = event
  11.     @id = @event.id
  12.     @erased = false
  13.     @starting = false
  14.     @through = true
  15.     @old_name = @event.name#我添加的
  16.     #===========================================================================
  17.     # 会发生冲突的地方
  18.     #===========================================================================
  19.     if @event.name.gsub("mob-"){""} != @event.name
  20.       enemy_id = @event.name.gsub("mob-"){""}.split(",")[0]
  21.       @item = L_ARPG_enemy.new(map_id,@id.to_i,enemy_id.to_i).clone
  22.       event_c = @event.name.gsub("mob-"){""}.split(",")[1]
  23.       event_c = "0" if event_c.nil?
  24.       @event.name = $data_enemies[enemy_id.to_i].name + "," + event_c ######## 事件的名字被更改掉了
  25.     elsif @event.name.gsub("animal-"){""} != @event.name
  26.       enemy_id = @event.name.gsub("animal-"){""}.split(",")[0]
  27.       @item = L_ARPG_animal.new(map_id,@id.to_i,enemy_id.to_i).clone
  28.       event_c = @event.name.gsub("animal-"){""}.split(",")[1]
  29.       event_c = "0" if event_c.nil?
  30.       @event.name = $data_enemies[enemy_id.to_i].name + "," + event_c
  31.     else
  32.       @item = nil
  33.     end
  34.     #===========================================================================
  35.     # 会发生冲突的地方
  36.     #===========================================================================
  37.      #我添加的+++++
  38.      @event.name = @old_name if @event.name != @old_name
  39.      
  40.      #我添加的+++++
  41.     # 初期位置的移动
  42.     moveto(@event.x, @event.y)
  43.     refresh
  44.   end
  45. end
复制代码
我彻底晕倒……难道多搞一个accessor会死人吗?

点评

好吧 判断old_name.nil?就可以了  发表于 2012-5-18 18:26
哦,我明白了,原先Game_Event的attr_reader :event屏蔽掉,reader改为accessor  发表于 2012-5-18 12:29
直接更名没用的-.-  发表于 2012-5-18 11:58
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
270 小时
注册时间
2010-2-4
帖子
1305
7
发表于 2012-5-16 15:00:16 | 只看该作者
  1. module RPG

  2.   class Event

  3.     alias marshal_load_2333 marshal_load
  4.     def marshal_load
  5.       marshal_load_2333
  6.       @old_name = @name

  7.     end

  8.     attr_accessor :old_name

  9.   end

  10. end
复制代码
好歹当年也当过大魔王过,orz
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-29 07:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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