Project1

标题: 随机选择指定动画范围的技能动画作为技能动画 [打印本页]

作者: 火ZHI意志    时间: 2010-10-1 15:15
标题: 随机选择指定动画范围的技能动画作为技能动画
本帖最后由 火ZHI意志 于 2010-10-1 15:58 编辑

如题
举个例子:
比如技能十字斩制定了两个攻击动画,一个是从右往左,另一个是从上往下
战斗中是用十字斩以后随机出现第一个或者第二个攻击动画,每次使用前都要随机选择,也就是说战斗中技能动画不是固定的效果
我要的是这样的效果,独立的系统
作者: ONEWateR    时间: 2010-10-1 15:15
本帖最后由 ONEWateR 于 2010-10-2 15:07 编辑
  1. module RPG
  2.   class Skill
  3.     def name
  4.       return @name.split(/,/)[0]
  5.     end
  6.     def animation1_id
  7.       a = []
  8.       @name.split(/,/).each {|i|a.push i.to_i}
  9.       @b = rand(a[2]-a[1]+1)
  10.       return @animation1_id if a.size < 5
  11.       return a[1]+@b
  12.     end
  13.     def animation2_id
  14.       a = []
  15.       @name.split(/,/).each {|i|a.push i.to_i}
  16.       return @animation2_id if a.size < 5
  17.       return a[3]+@b if a[2]-a[1] == a[4]-a[3]
  18.       return rand(a[4]-a[3]+1)+a[3]
  19.     end
  20.   end
  21. end

复制代码
使用说明:
1.技能名称命名规则: 技能名称,动画1编号1,动画1编号2,动画2编号1,动画2编号2
如 十字斩,1,10,11,20
2.编号2要比编号1
3.当动画1、2中的编号1和编号2差值一样,则会对应。如 十字斩动画1为6,则动画2为16
如果差值不一样,则动画2会在范围随机。
作者: 后知后觉    时间: 2010-10-1 15:51
Scene_Battle 4 找到
target.animation_id = @animation2_id
改成
target.animation_id = @animation2_id + rand(2)

还可以对 @animation2_id 做一些判断来决定是否要加 rand(2)
作者: 火ZHI意志    时间: 2010-10-1 21:29
我想说我想要的是独立的系统…………
作者: 后知后觉    时间: 2010-10-1 22:32
本帖最后由 后知后觉 于 2010-10-1 22:40 编辑

成品系统也就那么些行.

  1. module RPG
  2.   class Animation
  3.     def hzhj_rand
  4.       if @hzhj_rand.nil?
  5.         if (/([0-9]+)/).match(@name) != nil
  6.           @name.sub(/([0-9]+)/){ @hzhj_rand = $1.to_i.abs }
  7.         else
  8.           @hzhj_rand = 0
  9.         end
  10.       end
  11.       return @hzhj_rand
  12.     end
  13.   end
  14.   class Sprite < ::Sprite
  15.     if not methods.include?("hzhj_rand_animation")
  16.       alias hzhj_rand_animation animation
  17.     end
  18.     def animation(*args)
  19.       if args[0] != nil
  20.         if args[0].hzhj_rand > 0
  21.           result_id = args[0].id + rand(args[0].hzhj_rand)
  22.           args[0] = $data_animations[result_id]
  23.         end
  24.       end
  25.       hzhj_rand_animation(*args)
  26.     end
  27.   end
  28. end
复制代码
你是有脚本基础的.那么我就说一下这段代码的原理吧.
首先是给 数据库-动画 增加了一个只读的属性 hzhj_rand
这个属性的设置方法为在动画的名字里写入一个 整数.
就现在的正则表达式来看.只要你的动画名字里出现了 数字.
那么就认为你设置了这个属性.
取的是动画名字里的第一个整数.
如果动画名字里没有设置这个属性.那么就默认为 0.

然后重定义了一下.RPG::Sprite 类的 播放动画的方法.
在播放动画前增加了对该动画的 hzhj_rand 属性的判断.
如果该属性大于0.
那么就计算出 目前动画ID + rand(hzhj_rand)
然后将计算出来的动画替换掉原来的动画进行播放.

举例:
比如 数据库第 50 号动画的名字叫 "火焰 3“
那么在播放这个 50 号动画的时候
就是在播放 50 + rand(3) 号动画(50/51/52中的一个).

有一个小小的不足就是.
当这样的动画被应用到全体技能的时候.
播放该动画的对象可能不统一.

直接改 Scene 的话那冲突就猛增了.
像这样改.冲突会小很多.
作者: 火ZHI意志    时间: 2010-10-2 08:56
本帖最后由 火ZHI意志 于 2010-10-2 09:24 编辑

我可能没说清楚 我的原来想法就是事先设置两个数组 分别是两套技能动画动画(包括出招和击中动画都是配好的) …………
也就是说播放一个出招动画后,对应的对象方动画就是和出招动画是事先配好的动画…………
照LS这样做的话会导致混乱的
作者: nijunxin12321    时间: 2010-10-2 09:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: 火ZHI意志    时间: 2010-10-2 15:55
这下对了~ 感谢下~




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1