Project1

标题: 淘到一个脚本,希望做些小修改 [打印本页]

作者: stella    时间: 2011-9-16 14:17
标题: 淘到一个脚本,希望做些小修改
本帖最后由 stella 于 2011-9-16 14:23 编辑

这个脚本的作用是当MISS的时候被攻击方移动战斗图,当播放完攻击动画再移回来,我希望添加的是:当命中的时候被攻击方的战斗图快速地左右移动三个来回,用来模仿抖动的样子,在播放完攻击动画之前移回原位,应该怎么改?
  1. class Game_Battler
  2.   attr_accessor :add_x
  3.   alias hzhj_old_ini initialize
  4.   def initialize
  5.     hzhj_old_ini
  6.     @add_x = 0
  7.   end
  8. end

  9. class Sprite_Battler < RPG::Sprite
  10.   MoveSpeed = 8
  11.   alias hzhj_old_initialize initialize
  12.   def initialize(viewport, battler = nil)
  13.     hzhj_old_initialize(viewport, battler)
  14.     if not @battler.nil?
  15.       self.x = @battler.screen_x
  16.     end
  17.     @hzhj_x = self.x
  18.   end
  19.   def battler=(value)
  20.     if @battler != value and value != nil
  21.       self.x = value.screen_x
  22.     end
  23.     @hzhj_x = self.x
  24.     @battler = value
  25.   end
  26.   alias hzhj_old_update update
  27.   def update
  28.     hzhj_old_update
  29.     self.x = @hzhj_x
  30.     if not @battler.nil? and not @battler.dead?
  31.       if self.x < @battler.screen_x + @battler.add_x
  32.         self.x = [self.x + MoveSpeed, @battler.screen_x + @battler.add_x].min
  33.       elsif self.x > @battler.screen_x + @battler.add_x
  34.         self.x = [self.x - MoveSpeed, @battler.screen_x + @battler.add_x].max
  35.       end
  36.     end
  37.     @hzhj_x = self.x
  38.   end
  39.   def x
  40.     if @effect_hzhj
  41.       if @battler.nil?
  42.         return super
  43.       else
  44.         return @battler.screen_x
  45.       end
  46.     else
  47.       return super
  48.     end
  49.   end
  50.   def update_animation
  51.     @effect_hzhj = true
  52.     super
  53.     @effect_hzhj = false
  54.   end
  55.   def animation(*args)
  56.     @effect_hzhj = true
  57.     super(*args)
  58.     @effect_hzhj = false
  59.   end
  60.   def update_damage
  61.     @effect_hzhj = true
  62.     super
  63.     @effect_hzhj = false
  64.   end
  65.   def damage(*args)
  66.     @effect_hzhj = true
  67.     super(*args)
  68.     @effect_hzhj = false
  69.   end
  70. end

  71. class Scene_Battle
  72.   alias hzhj_old_update_phase4_step4 update_phase4_step4
  73.   def update_phase4_step4
  74.     hzhj_old_update_phase4_step4
  75.     for target in @target_battlers
  76.       next if target.dead?
  77.       next if target.damage != "Miss"
  78.       if target.is_a?(Game_Actor)
  79.         target.add_x = -64
  80.       elsif target.is_a?(Game_Enemy)
  81.         target.add_x = 64
  82.       end
  83.     end
  84.   end
  85.   alias hzhj_old_update_phase4_step5 update_phase4_step5
  86.   def update_phase4_step5
  87.     hzhj_old_update_phase4_step5
  88.     for target in @target_battlers
  89.       target.add_x = 0
  90.     end
  91.   end
  92. end
复制代码
dsu_plus_rewardpost_czw
作者: HзO    时间: 2011-9-18 08:32
应该怎么改?自顶。。。
作者: zphyp120    时间: 2011-9-18 10:42
对战斗脚本不是很了解。。。
就这种效果吧。
要懂得知足,不是你要什么效果就有人会帮你改的。
还得自己动手。
作者: 爆焰    时间: 2011-9-18 17:45
将Miss的效果依样画葫芦到被命中时不就行了,这么简单,自己动手吧
作者: 李梦遥    时间: 2011-9-18 17:52
哎呀!不错啊
作者: 双叶GL    时间: 2011-9-19 00:14
本帖最后由 双叶GL 于 2011-9-19 00:16 编辑

在73~86那段改
class Scene_Battle
  alias hzhj_old_update_phase4_step4 update_phase4_step4
  def update_phase4_step4
    hzhj_old_update_phase4_step4
    for target in @target_battlers
      next if target.dead?
      next if target.damage != "Miss"
      if target.is_a?(Game_Actor)//判断成功就后退
         target.add_x = -64//这里看移动的距离
在这里添加被打中miss时的特效↑,也可以变成图片什么的,

      elsif target.is_a?(Game_Enemy)//然后又还原就是这里
        target.add_x = 64//这里就还原
这里就是攻击结束后记得还原就可以了

      end
    end
  end
作者: stella    时间: 2011-9-19 08:45
双叶GL 发表于 2011-9-19 00:14
在73~86那段改
class Scene_Battle
  alias hzhj_old_update_phase4_step4 update_phase4_step4

我想做的是战斗图往复运动的效果,也就是战斗图左右左右左右平移之后回到原位,应该怎么写?

而且原来脚本的效果是:被攻击方的动作在攻击动画结束之后才完成,如果作为被打效果显得慢了一拍。我希望被攻击方的平移动作和攻击动画同时进行、同时结束。
作者: 双叶GL    时间: 2011-9-19 11:55
本帖最后由 双叶GL 于 2011-9-19 12:11 编辑

Game_Enemy是敌人单位移动
Game_Actor是自己单位移动,
这里计算坐标移动的距离
    if not @battler.nil? and not @battler.dead?
      if self.x < @battler.screen_x + @battler.add_x
        self.x = [self.x + MoveSpeed, @battler.screen_x + @battler.add_x ].min//self.x + MoveSpeed,这就是坐标+移动的速度,修改MoveSpeed加快移动的速度例如self.x + 200
      elsif self.x > @battler.screen_x + @battler.add_x
        self.x = [self.x - MoveSpeed, @battler.screen_x + @battler.add_x].max //这里就是回来的攻击结束后回来的速度
      end
    end
后面的(之前说的)target.add_x是移动的方向和移动的距离,
最后一段
  alias hzhj_old_update_phase4_step5 update_phase4_step5
  def update_phase4_step5
    hzhj_old_update_phase4_step5
    for target in @target_battlers
      target.add_x = 0这里是还原坐标为0
那么就应该是在这上面一段添加一段代码,

怎么解释很麻烦,我不会解释!!!!嗯,求触解释���
作者: stella    时间: 2011-9-19 12:34
本帖最后由 stella 于 2011-9-19 13:13 编辑
双叶GL 发表于 2011-9-19 11:55
Game_Enemy是敌人单位移动
Game_Actor是自己单位移动,
这里计算坐标移动的距离


是不是最后一段改成这样?但是打中对方没有来回抖动啊?只动了一下。。MISS的效果我不需要改,我只改动命中后战斗图的抖动
  1. class Scene_Battle
  2.   alias hzhj_old_update_phase4_step4 update_phase4_step4
  3.   def update_phase4_step4
  4.     hzhj_old_update_phase4_step4
  5.     for target in @target_battlers
  6.       next if target.dead?
  7.       if target.damage == "Miss"
  8.         if target.is_a?(Game_Actor)
  9.           target.add_x = -64
  10.         elsif target.is_a?(Game_Enemy)
  11.           target.add_x = 64
  12.         end
  13.       else
  14.         if target.is_a?(Game_Actor)
  15.           target.add_x = -10
  16.         elsif target.is_a?(Game_Enemy)
  17.           target.add_x = 10
  18.         end
  19.         if not @battler.nil? and not @battler.dead?
  20.           if self.x < @battler.screen_x + @battler.add_x
  21.             self.x = [self.x + MoveSpeed, @battler.screen_x + @battler.add_x ].min  
  22.           elsif self.x > @battler.screen_x + @battler.add_x
  23.             self.x = [self.x - MoveSpeed, @battler.screen_x + @battler.add_x].max  
  24.           end
  25.         end
  26.       end
  27.     end
  28.   end
  29.   alias hzhj_old_update_phase4_step5 update_phase4_step5
  30.   def update_phase4_step5
  31.     hzhj_old_update_phase4_step5
  32.     for target in @target_battlers
  33.       target.add_x = 0
  34.     end
  35.   end
  36. end
复制代码

作者: 双叶GL    时间: 2011-9-19 15:13
本帖最后由 双叶GL 于 2011-9-19 15:24 编辑
stella 发表于 2011-9-19 12:34
是不是最后一段改成这样?但是打中对方没有来回抖动啊?只动了一下。。MISS的效果我不需要改,我只改动命 ...


因为else,除了这些情况以外的情况时就会移动距离X-10...

        if not @battler.nil? and not @battler.dead?
          if self.x < @battler.screen_x + @battler.add_x
            self.x = [self.x + MoveSpeed, @battler.screen_x + @battler.add_x ].min  
          elsif self.x > @battler.screen_x + @battler.add_x
            self.x = [self.x - MoveSpeed, @battler.screen_x + @battler.add_x].max  
          end
上面有的这一段代码应该不需要重复输入吧

想要来回多重应该是循环吧,F1帮助里面有个循环,我对纯文字不理解,所以无法试验....
作者: stella    时间: 2011-9-19 15:54
本帖最后由 stella 于 2011-9-19 15:55 编辑
双叶GL 发表于 2011-9-19 15:13
因为else,除了这些情况以外的情况时就会移动距离X-10...

        if not @battler.nil? and not @battle ...


我就是要在播放攻击动画的时候多次循环啊,但是循环不出来啊,没有往复移动的效果,用loop do都没用啊。。!
  1.         if not @battler.nil? and not @battler.dead?
  2.           dd = 3
  3.           loop do
  4.             dd -= 1
  5.             target.add_x = 0 - target.add_x
  6.             if dd == 0
  7.               break
  8.             end
  9.           end
  10.         end
复制代码

作者: 双叶GL    时间: 2011-9-19 16:23
我也想等触手解答,
因为函数的重定义后,会使用最后一个函数,所以要先等等前一个触发完后在触发另外一个动作,

所以才不能直接在底下添加,那应该是找些代码加入脚本变为先后顺序吧??




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