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

Project1

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

[已经解决] 聪聪请教...class方法被占用了怎么办...

[复制链接]

Lv4.逐梦者 (版主)

聪仔

梦石
0
星屑
6182
在线时间
3077 小时
注册时间
2013-12-26
帖子
3145
跳转到指定楼层
1
发表于 2015-11-13 11:53:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
  1. msgbox $game_troop.members[0].class #=>Game_Enemy...
  2. msgbox $game_party.members[0].class #=>不是Game_Actor,而是角色职业信息...
复制代码
请问如何用简便的办法,使得$game_party.members[0]调用一个方法,得到Game_Actor呢?
这里需要判定战斗时两个任意单位是否同时是敌人或同时是队友,也就是判定a.class == b.class,但是遇到了class重名方法咿咿咿...
聪聪全国第三帅...
他们都叫我【人赢聪】
我的RM能力雷达图:

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

来自 6楼
发表于 2015-11-13 22:55:28 | 只看该作者
这样说吧...
方法rand被重新定义了
def rand(x)
  return "聪聪全国第三帅"
end
这个定义现在开始不许动,如何定义方法 rand_new(),使得rand_new(5)的值随机得到0,1,2,3,4,即是恢复rand方法的旧功能...
  1. alias rand_new rand
  2. def rand(x)
  3.   return "聪聪全国第三帅"
  4. end
复制代码
大概就这样,使用重命名方法
这样就成啦

点评

而且你的插件脚本在后面,要给 Game_Actor 定义 klass 方法还是得用楼上那招(把 __class__ 改为 klass)  发表于 2015-11-14 11:03
你不是说要获取类型,而不是只求判定么?只求判定的话相当简单啊,a.actor? ^ b.enemy?  发表于 2015-11-14 11:02
这样只要再定义GameEnemy下 def klass self.class end 就能用a.klass == b.klass 判定了...  发表于 2015-11-14 09:51
这样动可以...因为不许动的东西在动了之后又还原了,def rand 最终还是聪聪全国第三帅,rand_new功能恢复,因此聪聪认可了咿咿...  发表于 2015-11-14 09:45
所以……都是VA的错  发表于 2015-11-14 07:51

评分

参与人数 2星屑 +160 梦石 +1 收起 理由
taroxd + 1 认可答案
正太君 + 160 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

聪仔

梦石
0
星屑
6182
在线时间
3077 小时
注册时间
2013-12-26
帖子
3145
2
 楼主| 发表于 2015-11-13 12:15:40 | 只看该作者
说明一下,聪聪的最终目的不是仅仅判定两个单位是否同为敌人或角色,而是希望有另外一个方法代替class方法,例如新方法klass,使得a.klass == b.klass得以判定...具体怎么样做比较简便?

点评

感谢精叔大人,请看4楼详细描述咿咿咿...  发表于 2015-11-13 18:11
attr_accessor :klass  发表于 2015-11-13 18:00
问题的核心:a.class遗精被占用了,a不一定是友方,如何执行a.klass得到Game_Actor?  发表于 2015-11-13 17:59
a.问题的核心:class遗精被占用了,a不一定是友方,如何执行a.klass得到Game_Actor?  发表于 2015-11-13 17:57
那么你需要判定哪里,就在哪里加上这一句……  发表于 2015-11-13 17:54
聪聪全国第三帅...
他们都叫我【人赢聪】
我的RM能力雷达图:

回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10074
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

3
发表于 2015-11-13 12:50:53 | 只看该作者
本帖最后由 VIPArcher 于 2015-11-13 12:53 编辑
  1. class Game_BattlerBase; alias_method :klass, :class end
复制代码
未测试
$game_party.members[0].klass

评分

参与人数 3星屑 +6 梦石 +1 收起 理由
喵呜喵5 + 1 ↓楼主把这段代码插入到Game_BattlerBase后.
taroxd + 1 应该是可以的呀 > <
正太君 + 5 然而并梦遗什么卵用,但是还是谢谢....

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

聪仔

梦石
0
星屑
6182
在线时间
3077 小时
注册时间
2013-12-26
帖子
3145
4
 楼主| 发表于 2015-11-13 18:04:55 | 只看该作者
这样说吧...
方法rand被重新定义了
def rand(x)
  return "聪聪全国第三帅"
end
这个定义现在开始不许动,如何定义方法 rand_new(),使得rand_new(5)的值随机得到0,1,2,3,4,即是恢复rand方法的旧功能...

点评

重新定义应该用alias  发表于 2015-11-13 22:52
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

5
发表于 2015-11-13 18:26:59 | 只看该作者
以下方法都没测试
  1. Kernel.instance_method(:class).bind($game_party.members[0]).call
复制代码

  1. module Kernel
  2.   alias __class__ class
  3. end

  4. $game_party.members[0].__class__
复制代码

点评

第一行相当于 $game_party.members[0].原来的class方法 你单行就这么写上去也是因为队员没生成所以报错啊……  发表于 2015-11-14 09:42
知道啊...他报错的是单独的那行脚本,不是第6行...kernel那里队员都还没生成呢当然报错咿咿...  发表于 2015-11-14 09:40
这种简单问题不用来问我吧...你肯定知道啥意思的……  发表于 2015-11-14 07:29
undefined method "members" for nil...  发表于 2015-11-13 23:39
当然有啊... 我这里又没针对 $game_party.members[0] 做什么特殊操作  发表于 2015-11-13 20:23

评分

参与人数 2星屑 +155 梦石 +1 收起 理由
VIPArcher + 1 那我那样不是也可以嘛=。=【虽然我没测试.
正太君 + 155 测试可行,VP大人请发卡...

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3298
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
7
发表于 2015-11-15 15:41:44 | 只看该作者
如果只是判定敌友关系的话,没必要这么麻烦,Game_BattlerBase下有个函数叫actor?和enemy?,如果actor,那么actor?返回真,enemy?返回假;同理如果enemy,那么actor?返回假,enemy?返回真

点评

哦,抱歉,没看见2楼……  发表于 2015-11-15 15:47
是的,a.actor? ^ b.enemy? 就可以。不过 2L 说了目的不只是这个  发表于 2015-11-15 15:43
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 01:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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