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

Project1

 找回密码
 注册会员
搜索

XP中该如何制作一个新的状态……附上心路历程若干……

查看数: 1661 | 评论数: 3 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-1-13 19:56

正文摘要:

首先假设基本伤害如下:      在game_battle 3中       # 计算基本伤害       atk = 1.0* [attacker.hit / self.pdef ].max    (顺便问一 ...

回复

RyanBern 发表于 2016-1-14 01:10:47
本帖最后由 RyanBern 于 2016-1-14 09:45 编辑
阿竹天 发表于 2016-1-14 00:56
Game_battle 3 55 行 发生了NoMethoderror错误,undefined method 'hit'=for #

代码如下……


attacker的hit属性只能读取但是不能赋值的,所以写成attacker.hit=XXX是不对的。另外,楼主这样写是无法达到效果的,因为你把命中率修正写在了命中判定的后面,所以这样做是没有效果的。
解决的办法有两种。
第一种是写成
RUBY 代码复制
  1. hit_rate = 100 + (attacker.str + attacker.dex) / 2

之后所有的判定命中与否用hit变量即可,这个地方放在attack_effect的# 第一命中判定 之前即可。
第二种方法是直接在Game_Actor中定义hit,由于Game_Actor里面已经继承了Game_Battler的hit方法,此处实际上是覆盖了原有的方法。如果采用这种办法,需要将武器的判定也改到hit的定义中去,这样就无需在attack_effect里面再次定义。由于是在Game_Actor下定义,所以不需要判定攻击方是否为Game_Actor。
因此可以在Game_Actor中追加定义如下:
RUBY 代码复制
  1. def hit
  2.   n = 100
  3.   # 获取武器,这里注意@weapon_id就是当前对象的武器ID
  4.   weapon = $data_weapons[@weapon_id]
  5.   # 如果武器持有 8 号属性
  6.   if weapon != nil && weapon.element_set.include?(8)
  7.     # 修改命中率
  8.     n += (self.str + self.dex) / 2
  9.   end
  10.   # 计算状态对命中率的影响
  11.   for i in @states
  12.     n *= $data_states[i].hit_rate / 100.0
  13.   end
  14.   return Integer(n)
  15. end

点评

泪目……叩谢!  发表于 2016-1-14 01:20

评分

参与人数 1星屑 +100 收起 理由
邪月长啸 + 100 顺带学习了

查看全部评分

RyanBern 发表于 2016-1-13 21:56:30
推荐使用下面的方法。
1. 新建[属性],表示武器的类型。在这里,使用的是[属性],而不是[状态],这是因为武器没有[自动状态]这个特性。
例如,你可以在属性里添加名为“单手剑”,“双手剑”的属性,然后在数据库设置的时候勾选即可。
2. 更改命中判定。
在Game_Battler3中,里面有两个方法非常重要,一个是attack_effect,一个是skill_effect。
其中,attack_effect表示受到普通攻击的效果,skill_effect表示受到特技攻击的效果。
看样子楼主是想修改attack_effect,那么我就继续说一下该怎么修改。
在attack_effect定义内,attacker表示攻击方,self表示被攻击方。
首先,获取武器可以用$data_weapons[attacker.weapon_id]进行获取,返回的是一个武器对象。要注意,如果attacker是敌人,那么敌人是没有weapon_id这个属性的,因此最好这样写:
RUBY 代码复制
  1. weapon = attacker.is_a?(Game_Actor) ? $data_weapons[attacker.weapon_id] : nil

上面这句话是说,如果攻击方是主角,那么获取他所持武器,否则返回nil。注意,如果主角身上没有装备武器,也会返回nil。
然后,获取武器的属性,这个可以用weapon.element_set来获取(当weapon为nil时,不能这样获取,需要额外处理即可)。
element_set是一个ID数组,里面包含了所有该武器的属性。假如你的“单手剑”属性ID为8,那么判断该武器是不是单手剑,可以用下面的代码:
RUBY 代码复制
  1. if weapon != nil && weapon.element_set.include?(8)
  2.   # do something
  3. end

在if里面写上你想要的特殊效果就行了。

点评

太坏了,楼下的打击积极性。刚刚花了2个小时,在同事的指导下实现了“拉丁猪文字游戏”……同事评语:悟性E  发表于 2016-1-14 16:22
puts gets.chomp.reverse  发表于 2016-1-14 13:18
收到~~多谢RB大大。我向单位的同事询问怎么学习编程,他说他给我出题,让我用RUBY写。今天的题目是将输入的字符串反转输出……【刚八代】  发表于 2016-1-14 12:58
我是在跟评分的taroxd说话……  发表于 2016-1-14 12:56
因为RMXP已经出了很久了,功能上比VX和VA都少很多。所以很多在VA里面现成的功能在XP里面需要自己做。另外楼主提升论坛等级至[剑士]就可以评分了。  发表于 2016-1-14 12:56

评分

参与人数 1梦石 +2 收起 理由
taroxd + 2 你们XP真是麻烦

查看全部评分

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

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

GMT+8, 2024-11-23 08:07

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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