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

Project1

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

[已经解决] 我想重新定义一下角色的属性,新人刚学脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
33 小时
注册时间
2011-6-27
帖子
49
跳转到指定楼层
1
发表于 2013-12-24 15:40:38 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
我的意思是,角色不止需要攻击力、防御力等属性,还有比如友好度、其他攻击类型的攻击力等。
是不是涉及到数据库的范畴?我只看过va的新人教程,并不能灵活运用,所以请教下该如何为角色新增属性。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
33 小时
注册时间
2011-6-27
帖子
49
14
 楼主| 发表于 2013-12-26 16:56:01 | 只看该作者
啊,这一步终于过了!
结果还是觉得t酱说的重写比新增类要方便得多。
这个问题可以关了?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
218 小时
注册时间
2013-12-17
帖子
386
13
发表于 2013-12-25 14:16:28 | 只看该作者
本帖最后由 国产吃货 于 2013-12-25 14:18 编辑

hash 哈希表
作用类同于一个二维数组。
A={"吴莉嘉"=>10,"班尼特"=15}
我定义了一个叫A的hash表,表内有两个数据。
如果我调用,A["班尼特"],那么会返回 15
同理,调用A["吴莉嘉],则会返回10
如果我调用A["伊尔维亚"],由于A里面没有叫伊尔维亚的主键,所以就会返回默认的nil(空)

新增属性其实很简单,只不过RM编辑器只和默认的脚本兼容。
你新增的属性要么自己在脚本里赋值,要么想其他的办法赋值。

比如 好感度。
RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2.   attr_accessor :friend
  3.   alias old_initialize initialize
  4.   def initialize(actor_id)
  5.     old_initialize(actor_id)
  6.     [url=home.php?mod=space&uid=69816]@friend[/url] = {}
  7.   end
  8. end

这样就给Actor类添加了一个新的属性,当然这只是创建了一个属性,还没有处理它的方法,
就算这样,他也具备工作能力了。
比如
RUBY 代码复制
  1. # 获取好感度
  2. name=$game_actors[2].name    # 第二个角色的名字
  3. $game_actors[1].friend[name] # 返回一号角色对二号角色的好感度
  4. $game_actors[1].friend[name]=0 if  $game_actors[1].friend[name]==nil
  5. # 设置好感度
  6. name=$game_actors[2].name    # 第二个角色的名字
  7. p $game_actors[1].friend[name]+=10 # 设置一号角色对二号角色为0

点评

嗯,我明白了。就是相当于使用了映射的方式,多谢!  发表于 2013-12-25 14:23
第一段的第六行=@friend={}  发表于 2013-12-25 14:19

评分

参与人数 1梦石 +1 收起 理由
Sion + 1 感谢帮忙

查看全部评分

RM脚本定制/修改/整合 群:143356012(入群注明来意)
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42322
在线时间
7597 小时
注册时间
2009-7-6
帖子
13505

开拓者贵宾

12
发表于 2013-12-25 14:05:31 | 只看该作者
阿薯救世主 发表于 2013-12-25 13:12
我设想:
      因为我不想动元脚本的东西,所以我新建一个类继承了Game_Actor,然后这个类就是处理新增 ...

这样是可以的。
另外模块在游戏制作里的用途你可以理解为命名空间- -

点评

是,多谢van样  发表于 2013-12-25 14:17
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
719
在线时间
684 小时
注册时间
2009-5-29
帖子
461
11
发表于 2013-12-25 14:05:03 | 只看该作者
定义一个Hash作为全局变量,参照 $game_party, 就这么简单。

点评

知道全局变量是什么和如何定义,但是不知道hash是什么,看了一些$game_party的搜索明白不了什么……  发表于 2013-12-25 14:15
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
218 小时
注册时间
2013-12-17
帖子
386
10
发表于 2013-12-25 13:48:55 | 只看该作者
楼主的办法有些纰漏、
好感度是一个相对属性,仅仅一个变量不足以完整的标示好感度。
好感度应该是一个hash(hash还好点)
hash的主键应该为Actor的ID
hash的值应该为对该角色的好感度。

点评

我有点明白你说的相对属性是什么意思了,其实我不是想要好感度,只是举个例说明而已,我只想新增角色的新属性。求指点hash的使用。  发表于 2013-12-25 13:52
不清楚hash,能介绍一下hash的用法和有什么好处吗?  发表于 2013-12-25 13:50
RM脚本定制/修改/整合 群:143356012(入群注明来意)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
33 小时
注册时间
2011-6-27
帖子
49
9
 楼主| 发表于 2013-12-25 13:12:04 | 只看该作者
taroxd 发表于 2013-12-25 12:35
你可以简单理解为就是一个类,这是一个游戏内建的类(参见F1)
------------------------以下可以无视--- ...

我设想:
      因为我不想动元脚本的东西,所以我新建一个类继承了Game_Actor,然后这个类就是处理新增属性的东西。然后使用$game_actor这个全局变量就可以在事件的脚本中调用了吗?

比如说,那个事件脚本是空白的,我想让这个事件将我的角色斩切攻击力提升2点,于是我就写上
$game_actors[0].atk_brade += 2  这一句就行了?

注:atk_brade已经在新类中定义好了
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

8
发表于 2013-12-25 12:35:44 | 只看该作者
阿薯救世主 发表于 2013-12-25 12:19
我想问下RPG::EquipItem 这种写法(命名方式?)是什么意思?

你可以简单理解为就是一个类,这是一个游戏内建的类(参见F1)
------------------------以下可以无视---------------------
和下面是一样的,EquipItem可以看成RPG模块的一个常量
module RPG
  class EquipItem
    #def methods
  end
end

点评

喔,是这样。 但是我不知道用module的好处是什么?一般来说class不是已经可以把类要做的工作区分了吗?  发表于 2013-12-25 12:42
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
33 小时
注册时间
2011-6-27
帖子
49
7
 楼主| 发表于 2013-12-25 12:19:50 | 只看该作者
taroxd 发表于 2013-12-24 17:50
按照第二种方式写的话,最后未完成的结果如下(删去冗长的注释,可自行补加):

class RPG::BaseItem

我想问下RPG::EquipItem 这种写法(命名方式?)是什么意思?
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

6
发表于 2013-12-24 17:50:31 | 只看该作者
本帖最后由 taroxd 于 2013-12-26 06:41 编辑

按照第二种方式写的话,最后未完成的结果如下(删去冗长的注释,可自行补加):

RUBY 代码复制
  1. class RPG::BaseItem
  2.   def fri
  3.     @note =~ /<FRI\s+(-*\d+)>/i ? $1.to_i : 0
  4.   end
  5. end
  6.  
  7. class Game_BattlerBase
  8.  
  9.   attr_reader  :fri_plus
  10.  
  11.   def fri
  12.     (fri_base + fri_plus) * fri_rate
  13.   end
  14.  
  15.   alias fri_initialize initialize
  16.   def initialize
  17.     fri_initialize
  18.     @fri_plus = 0
  19.   end   
  20.  
  21.   def add_fri(fri) #用于事件中增减属性
  22.     @fri_plus += fri
  23.     refresh
  24.   end
  25.  
  26.   def fri_base
  27.     return 0
  28.   end
  29.  
  30.   def fri_rate
  31.     return 1        #根据实际情况更改!
  32.   end
  33. end
  34.  
  35. class Game_Actor
  36.  
  37.   def fri_base
  38.     [url=home.php?mod=space&uid=22147]@level[/url] * 2 + 1  #根据实际情况更改!
  39.     #多余的东西不要看,你懂的
  40.   end
  41.  
  42.   def fri_plus
  43.     equips.compact.inject(super) {|r, item| r + item.fri }
  44.   end
  45. end
  46.  
  47. class Game_Enemy
  48.   def fri_base
  49.     enemy.fri
  50.   end
  51. end


没有环境,有错误请指正

点评

再次多谢  发表于 2013-12-25 12:14
我大概也想到怎么做,只是不能确定无从下手  发表于 2013-12-25 12:14

评分

参与人数 1梦石 +1 收起 理由
Sion + 1 感谢帮忙

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-12 19:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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