Project1

标题: 如何用闪光来限定挨打战斗图的出现时机? [打印本页]

作者: soulframe    时间: 2008-7-17 09:39
标题: 如何用闪光来限定挨打战斗图的出现时机?
对scene_battle4进行的超级横版修改中挨打图和防御图等显示都有个严重的问题,就是一旦进入挨打环节,不管对方是在拔刀还是收招,一律显示成挨打,相当不好——比如主角跳上天,摆个pose,然后再砍,只应当在砍的时候敌人才应当出现挨打图,而现在的情况是从跳上天开始就在那儿傻乎乎地作挨打状。
我在想如果能够只在自身动画闪烁的时候变成挨打图,配合彩虹神剑蹦血,效果就相当完美了。

全动画战斗系统也不是很好用……不知有无高人能够在彩虹神剑的基础上稍作修改,或者是能在超级横版战斗中添加一些判定达到这个效果~多谢。 [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: soulframe    时间: 2008-7-19 20:49
没人作答么……先顶上来看看好了……
作者: ★_茄孓    时间: 2008-7-19 21:01
我也有碰到过类似问题,就是我们还没出招,他就显示挨打图了。是吧?
不果我觉的可以把挨打图和防御图的情况,放在显示伤害哪里判定,把转化为
原来的战斗图放在刷新环节判定
作者: 尐臉?嗵紅    时间: 2008-7-19 21:20
楼上的也就是说设置成动作过后(即下血时候)再现实。再设置个没有下血做格挡的动作(其中设置不下血)。。。就是以上这种方法吧。
作者: soulframe    时间: 2008-7-19 22:04
这样若是连击也不好办,因为下不下血倒是不重要,重要的是得跟挨打动画结合起来。如果把换图放在伤害的时候,可能又会出现出完招了再换图的情况。

其实就是能把彩虹神剑改一改,蹦血的时候同时换图就最好了。

以下引用★_茄孓于2008-7-19 13:01:37的发言:

我也有碰到过类似问题,就是我们还没出招,他就显示挨打图了。是吧?
不果我觉的可以把挨打图和防御图的情况,放在显示伤害哪里判定,把转化为
原来的战斗图放在刷新环节判定


作者: 灯笼菜刀王    时间: 2008-7-20 00:17
以下引用★_茄孓于2008-7-19 13:01:37的发言:

我也有碰到过类似问题,就是我们还没出招,他就显示挨打图了。是吧?
不果我觉的可以把挨打图和防御图的情况,放在显示伤害哪里判定,把转化为
原来的战斗图放在刷新环节判定


我试过,放在伤害显示后面显示动画,结果还是一样,角色一有攻击动机(暂且这么说好了囧...)马上就播放动画。不过,我用的是行走图横版,不是全动画脚本。
作者: dbshy    时间: 2008-7-20 02:20
animation_process_timing
    case timing.flash_scope   
       when 1
         self.flash(timing.flash_color, timing.flash_duration * 2)
       when 2
         if self.viewport != nil
           self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
         end
       when 3
         self.flash(nil, timing.flash_duration * 2)
       end

在这里该,然后动画播放完之后在该回来
作者: lhbadsl    时间: 2008-7-20 02:34
其实楼主可以参考下,彩虹神剑的编写脚本,它是用闪光显示伤害,那么它一定有闪光的判断,应该可以套用在防御过程中,我也是在想着这个问题,不过是vx的。
作者: soulframe    时间: 2008-7-20 06:34
具体?我之前也找到这段判定了……能提供个思路么?

以下引用dbshy于2008-7-19 18:20:49的发言:

animation_process_timing
   case timing.flash_scope   
      when 1
        self.flash(timing.flash_color, timing.flash_duration * 2)
      when 2
        if self.viewport != nil
          self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
        end
      when 3
        self.flash(nil, timing.flash_duration * 2)
      end

在这里该,然后动画播放完之后在该回来


作者: soulframe    时间: 2008-7-20 06:35
没错,我一直想在彩虹神剑上做文章。。没做成……

以下引用lhbadsl于2008-7-19 18:34:08的发言:

其实楼主可以参考下,彩虹神剑的编写脚本,它是用闪光显示伤害,那么它一定有闪光的判断,应该可以套用在防御过程中,我也是在想着这个问题,不过是vx的。


作者: lhbadsl    时间: 2008-7-20 06:48
楼主必须要在防御过程中做,因为彩虹神剑本来不是应用在防御过程上的,可惜我不懂 xp的,正在研究vx呢?或许我明天看一下xp的彩虹神,看看有什么办法,不过xp我是肯定写不了,xp的代码太乱了。。。。
作者: lhbadsl    时间: 2008-7-20 06:56
只要找到其中判定闪光的代码就可以了,并且要做到你的那样,一定要用自己定义的战斗者动画播放引擎,在vx上有一个,并且判定挨打的动画语句不能写在战斗场景中,因为有时会判定不准,最好写在战斗精灵的类中,我也试过做同样的东西“龙虎乱舞”,就像在街机上的那样。每次攻击就挨打一次。
作者: soulframe    时间: 2008-7-20 07:00
恩,多谢!~xp里彩虹神剑也不难,就是偶白不知道怎么加,66也暂时抽不出手来帮忙……

以下引用lhbadsl于2008-7-19 22:48:09的发言:

楼主必须要在防御过程中做,因为彩虹神剑本来不是应用在防御过程上的,可惜我不懂 xp的,正在研究vx呢?或许我明天看一下xp的彩虹神,看看有什么办法,不过xp我是肯定写不了,xp的代码太乱了。。。。


作者: lhbadsl    时间: 2008-7-20 07:07
不用,我也很喜欢雨血的,听说你在招募,战斗图的绘画者,我只会画战斗动作的线稿,只要你给出设定图,我可以帮你画出它的动作线稿,不知有没有用的。
作者: soulframe    时间: 2008-7-20 07:28
现在战斗图用像素做,跟行走图一样处理,所以暂时不需要线图。
还是多谢啦,以后有需要会请你帮忙的~若是你对脚本熟的话可以暂时帮忙debug,hoho

以下引用lhbadsl于2008-7-19 23:07:16的发言:

不用,我也很喜欢雨血的,听说你在招募,战斗图的绘画者,我只会画战斗动作的线稿,只要你给出设定图,我可以帮你画出它的动作线稿,不知有没有用的。


作者: lhbadsl    时间: 2008-7-20 07:30
呵呵,没事我明天还是看看你的这个脚本吧,我画战斗图是用矢量画动作再转成位图ps上色的。看来是没有用的了。。。
作者: soulframe    时间: 2008-7-20 07:36
恩,跟我前作一样~多谢哈。

以下引用lhbadsl于2008-7-19 23:30:57的发言:

呵呵,没事我明天还是看看你的这个脚本吧,我画战斗图是用矢量画动作再转成位图ps上色的。看来是没有用的了。。。


作者: doranikofu    时间: 2008-7-20 07:49
某云用vx做的那个轩三的同人游戏就有这个效果 不过基本上都是自己写的脚本
看起来比较费力{/gg}

lz说的这个效果我试过 刚开始也是想通过闪烁判定 不过一直没摸清楚那些变量要怎么弄 后来就换了方法
就是狗夜叉那个游戏用的 不过方法比较白痴而且也很卡
我是超级横板+彩虹神剑 改的比较多
攻击方动画和挨打动画同时播放的
然后我通过数据库里面的动画名称给一个动画增加一个属性 就是挨打动作等待的帧数
在update_phase4_step4里面读取这个数值 代入@ani_delay
把挨打动作显示的脚本单独拿出来定义为update_hit_action
然后再update里面刷新
  1.   if @ani_delay > 0 and @phase == 4
  2.     @ani_delay-= 1 #扣除等待帧数
  3.    for battler_sprite in @spriteset.actor_sprites + @spriteset.enemy_sprites
  4.     battler_sprite.update
  5.    end
  6.     update_hit_action if @ani_delay == 0 #开始更新挨打动画
  7.    return
  8.   end
复制代码


很业余的办法 不过效果倒是有了 见笑{/gg}
作者: soulframe    时间: 2008-7-20 08:36
哦?能给个简单范例么?试试看~

以下引用doranikofu于2008-7-19 23:49:20的发言:

某云用vx做的那个轩三的同人游戏就有这个效果 不过基本上都是自己写的脚本
看起来比较费力

lz说的这个效果我试过 刚开始也是想通过闪烁判定 不过一直没摸清楚那些变量要怎么弄 后来就换了方法
就是狗夜叉那个游戏用的 不过方法比较白痴而且也很卡
我是超级横板+彩虹神剑 改的比较多
攻击方动画和挨打动画同时播放的
然后我通过数据库里面的动画名称给一个动画增加一个属性 就是挨打动作等待的帧数
在update_phase4_step4里面读取这个数值 代入@ani_delay
把挨打动作显示的脚本单独拿出来定义为update_hit_action
然后再update里面刷新

   本帖相关代码如下:
if @ani_delay > 0 and @phase == 4
   @ani_delay-= 1 #扣除等待帧数
  for battler_sprite in @spriteset.actor_sprites + @spriteset.enemy_sprites
   battler_sprite.update
  end
   update_hit_action if @ani_delay == 0 #开始更新挨打动画
  return
end


很业余的办法 不过效果倒是有了 见笑


[本贴由作者于 2008-7-19 23:51:02 最后编辑]


作者: lhbadsl    时间: 2008-7-20 09:00
ms他的方法只是不断刷新挨打图而已。。。。没有判定啊。。。。。可能是我不了解xp吧,请无视之。。。。这个也是替代方案之一啊。。。
作者: soulframe    时间: 2008-7-20 09:23
在彩虹神剑判断敌人跳跃处增加定义target之后,便可以改变对象战斗图的图形……试验了一下用在角色身上似乎可行,由于对脚本不熟没办法改得比较到位~

   
  1. case timing.flash_scope
  2.         when 1
  3.           unless dontflash
  4.             self.flash(timing.flash_color, timing.flash_duration * 2)
  5.             if @_total_damage >0
  6.               @flash_shake_switch = true
  7.               @flash_shake = 2
  8.               target=$game_party.random_target_actor
  9.               target.battler_name = target.battler_name.split(/★/)[0]
  10.               target.battler_name = target.battler_name + "★2"         
  11.             end
  12.           end
  13.           return timing.flash_color.alpha * timing.flash_duration
  14.         when 2
  15.           unless dontflash
  16.             if self.viewport != nil
  17.               self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
  18.               target=$game_party.random_target_actor
  19.               target.battler_name = target.battler_name.split(/★/)[0]
  20.               target.battler_name = target.battler_name + "★2"
  21.               return timing.flash_color.alpha * timing.flash_duration
  22.             end
  23.           end
  24.         when 3
  25.           unless dontflash
  26.             self.flash(nil, timing.flash_duration * 2)
  27.           end
  28.           return timing.flash_color.alpha * timing.flash_duration
  29.         end
  30.       end      

  31.       return 0
  32.     end   
  33. end
  34. end
复制代码

作者: lhbadsl    时间: 2008-7-20 09:23
我刚才看了看彩虹神剑,不过时间太短,判定还没有知道在那,不过有点思路了,如
  1. def damage(value, critical)
  2.       # 释放伤害,效果是伤害数字快速消失,觉得不如不消失好看......
  3.       #dispose_damage
  4.       #清除hit数
  5.       dispose_hit
  6.       # 如果伤害值是数值
  7.       if value.is_a?(Numeric)
  8.         # 绝对值转为字符串
  9.         damage_string = value.abs.to_s
  10.       else
  11.         # 转为字符串
  12.         damage_string = value.to_s
  13.       end
  14.       # 初始化位图
  15.       bitmap = Bitmap.new(162, 64)
  16.       bitmap.font.name = ["华文行楷","黑体", "宋体"]
  17.       bitmap.font.size = 32
  18.       # 伤害值是数值的情况下
  19.       if value.is_a?(Numeric)
  20.         # 分割伤害值字符串
  21.         damage_array = damage_string.scan(/./)
  22.         damage_x = 81 - damage_string.size * 9
  23.         # 伤害值为负的情况下
  24.         if value < 0
  25.           # 调用回复数字表
  26.           rect_y = 32
  27.         else
  28.           # 调用伤害数字表
  29.           rect_y = 0
  30.         end
  31.         # 循环伤害值字符串
  32.         for char in damage_array
  33.           number = char.to_i
  34.           # 显示伤害数字
  35.           bitmap.blt(damage_x, 32, RPG::Cache.picture("Damagenew"),
  36.           Rect.new(number * 18, rect_y, 18, 32))
  37.           # 后移一位
  38.           damage_x += 18
  39.         end
  40.       # 伤害值不是数值的情况
  41.       else
  42.         # 如果伤害值不是 Miss
  43.         unless value == "Miss"
  44.           # 系统默认描画字符串
  45.           bitmap.font.color.set(0, 0, 0)
  46.           bitmap.draw_text(-1, 27, 162, 36, damage_string, 1)
  47.           bitmap.draw_text(+1, 27, 162, 36, damage_string, 1)
  48.           bitmap.draw_text(-1, 29, 162, 36, damage_string, 1)
  49.           bitmap.draw_text(+1, 29, 162, 36, damage_string, 1)
  50.           bitmap.font.color.set(255, 255, 255)
  51.           bitmap.draw_text(0, 28, 162, 36, damage_string, 1)
  52.         # Miss 的情况下
  53.         else
  54.           # 显示未击中图画
  55.           bitmap.blt(36, 28, RPG::Cache.picture("Damage"), Rect.new(90, 64, 90, 32))
  56.         end
  57.       end
  58.       # 会心一击标志打开的情况
  59.       if critical
  60.         # 显示会心一击图画
  61.         bitmap.blt(36, 0, RPG::Cache.picture("Damage"), Rect.new(0, 64, 90, 32))
  62.       end
  63.       # 伤害值定位
  64.       @_damage_sprite = ::Sprite.new(self.viewport)
  65.       @_damage_sprite.bitmap = bitmap
  66.       @_damage_sprite.ox = 81
  67.       @_damage_sprite.oy = 20
  68.       @_damage_sprite.x = self.x
  69.       @_damage_sprite.y = self.y - self.oy / 2
  70.       @_damage_sprite.z = 3000
  71.       @_damage_duration = 40
  72.       @_damage.push([@_damage_sprite,@_damage_duration-10,0, rand(30) - 15, rand(3)])
  73.       make_total_damage(value)  

  74.     end
复制代码
这一段,它是伤害处理的,应该是每次伤害都要调用的,因为彩虹圣剑本身就是闪烁都要调用伤害处理的,所以楼主可以试试把挨打动画写入其中,当然刷新部分也要写,不过只是思路,明天如果还没有解决,并且我知道的话就做一个工程给你参考一下把。这方法肯定和超级横板的挨打部分冲突,把它去掉就可。还有就是必须要在伤害处理完结时,把动画去掉。如果miss时,不挨打最好是写入hit那里
作者: lhbadsl    时间: 2008-7-20 09:25
呵呵,思路一样。。。明天我试试把,现在太晚了,困死了,888
作者: soulframe    时间: 2008-7-20 09:31
好的多谢~

以下引用lhbadsl于2008-7-20 1:25:40的发言:

呵呵,思路一样。。。明天我试试把,现在太晚了,困死了,888


作者: lhbadsl    时间: 2008-7-21 02:45
呵呵,不好意思,问题只解决了一半。。还差一个等待函数。。。个人真的对rgss1.0十分的无奈,万恶的xp。。居然没有wait()函数,不过其他已经解决了。。。我的方法是,在彩虹圣剑代码中的def damage(value, critical)中就是我昨天告诉你的那里加入了。。。
  1. bat=@battler
  2.       #p @battler
  3.        #p bat.damage
  4.        if bat.damage != nil
  5.         temp_name=bat.battler_name
  6.         p temp_name
  7.         bat.battler_name = bat.battler_name.split(/★/)[0]
  8.         bat.battler_name = bat.battler_name + "★3"
  9.         #wait(20)#这里写入等待数帧,因为如果不等待“挨打”是不会显示出来的,因为
  10.         #xp没有wait()这个在vx中常用的等待函数,我还在想解决的办法。。。。就是它
  11.         #所以问题才解决了一半,我想你的xp比我好一点,可能会知道办法,我先发出来,
  12.         #给你看一下,好看看对你这会不会更容易一点(比我这个xp白痴。。。)
  13.         p bat.battler_name
  14.         bat.battler_name=temp_name
  15.         #p bat.battler_name
  16.         end
复制代码

几句,它的意思是这样的,因为彩虹神剑每次闪光都要调用def damage(value, critical)函数,所以我把它写在这里,因为我看过柳柳的彩虹,应该没有比这个地方更好的(用代码少,冲突少,基本上除了和超级横板的挨打那里冲突外,这是肯定的,要把它去掉,我手上没有超级横板,对他的研究很少,不过因为超级和彩虹都是66写的,我估计他们本身是不会冲突的),上面我用了@battler这个变量是因为damage(value, critical)是在内部类定义的,很底层所以直接用battler_name肯定不行,只有用@battler这个同样底层的变量了(它的意思是画面上的所有战斗者),为了避免和其他有用到@battler的地方冲突,写了这一句bat=@battler,就是用另外一个变量代替它。但是到了这里直接用@battler会出现一个问题,就是行动方也会改变图,因为在这个地方同样不能用target这个方法,原因是父类不能用子类的方法。。。。所以你的重定义target是一个非常不好的方法(当然也不是不行,不过问题会更加复杂,冲突多如牛毛),所以我用了if bat.damage != nil这一句就是受到伤害的都“挨打”,后面的你也可以看得动了,不用我讲了吧。。我试过可以的,判定很准确,一闪光就挨打。。。p语句是测试它的功能性的,全#了就可,我做了个工程是满足了你的要求了,不过由于xp没有wait()就是等待函数,这就是为什么问题只解决了一半的原因,我在看着vx的说明书看看有什么办法把它翻译成rgss...无奈也
作者: lhbadsl    时间: 2008-7-21 02:57
http://rpg.blue/upload_program/files/Project4_97008665.rar
这个是我做的脚本工程,一开始就开始战斗,直接用十字斩,敌人也只会用十字斩,看过后,再看看我数据库中的十字斩定义就可以知道,这个东西有用并且也就知道了这个东西为什么只完成了一半。。。。。谁叫我不懂xp呢。。。。正在努力找出xp的做wait()函数的办法。。埃,如果楼主用的是vx那有多好啊!!!!!!!!!!
作者: lhbadsl    时间: 2008-7-21 03:05
http://rpg.blue/upload_program/files/Project4_97009179.rar
那个下不了,重新发一个。。。还有楼主打开游戏后,不用管主角liu的战斗图,它是有的不过由于没有调坐标,看不到。。如果找到等待代码的方法请告诉在下。。。我也在想办法,应该不久后会知道的。。。
作者: soulframe    时间: 2008-7-21 04:05
p出来的战斗图名字确实是加过星的,但是去掉p以后正常运行看着并没有变化,果然是等待的问题么……

以下引用lhbadsl于2008-7-20 19:05:29的发言:

http://rpg.blue/upload_program/files/Project4_97009179.rar
那个下不了,重新发一个。。。还有楼主打开游戏后,不用管主角liu的战斗图,它是有的不过由于没有调坐标,看不到。。如果找到等待代码的方法请告诉在下。。。我也在想办法,应该不久后会知道的。。。


作者: soulframe    时间: 2008-7-21 04:38
你看他那个脚本里面有无什么刷新的步骤能够把战斗图变回来放到那步去处理?

以下引用lhbadsl于2008-7-20 19:05:29的发言:

http://rpg.blue/upload_program/files/Project4_97009179.rar
那个下不了,重新发一个。。。还有楼主打开游戏后,不用管主角liu的战斗图,它是有的不过由于没有调坐标,看不到。。如果找到等待代码的方法请告诉在下。。。我也在想办法,应该不久后会知道的。。。


作者: lhbadsl    时间: 2008-7-21 04:39
呵呵,已经解决了,等我在上传完整版的,这次好了,呵呵呵。xp啊。。。
作者: lhbadsl    时间: 2008-7-21 04:44
http://rpg.blue/upload_program/files/Project4_97015330.rar
呵呵,这个总可以了吧。试试看,如果还有问题的话,再问我,我看看怎么把它做完美
作者: lhbadsl    时间: 2008-7-21 06:02
哎,还是要连贴,其实vx的wait()函数本身就是就是从main调用内含刷新,如果不刷新,等待就没用了,我不是没有wait()函数就没有办法了,别误会。不过因为我对xp的代码不认识,害怕有bug所以就必须用这个办法,如果没有通用性的话,那就一点用都没有了。你的那个游戏不用想肯定是有很多脚本堆起来的,所以就用这个办法,令他自身刷新,虽然代码有点多余,不过就就插就用这个思想来讲的话,这个是很好的。代码如下:
  1.   #--------------------------------------------------------------------------
  2.   # ● 基本更新处理
  3.   #     main : 从main里调用
  4.   #--------------------------------------------------------------------------
  5.   def update_basic(main = false)
  6.     Graphics.update unless main     # 更新游戏画面
  7.     Input.update unless main        # 更新输入处理
  8.     $game_system.update             # 更新计时器
  9.     #$game_troop.update               # 更新敌人队伍
  10.     if @battler.battler_name != nil
  11.     self.update    # 更新活动块组
  12.      else
  13.     return
  14.     end
  15.     #@message_window.update          # 更新讯息窗口
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● 等待
  19.   #     duration : 等待时间(祯数)
  20.   #     no_fast  : 无效化瞬间显示
  21.   #    一个在场景类更新中等待时间用的方法。一般来说,update每祯都会被调用一次。
  22.   #    但是在战斗中不容易掌握流程,所以这个方法是作为一个例外使用。
  23.   #--------------------------------------------------------------------------
  24.      def wait(duration, no_fast = false)
  25.     for i in 0...duration
  26.       update_basic
  27.       break if not no_fast and i >= duration / 2 #and show_fast?
  28.        end
  29.      end
复制代码
[LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: soulframe    时间: 2008-7-21 06:44
效果相当完美,多谢~把你名字加到雨血2片头的制作组里面~~

以下引用lhbadsl于2008-7-20 20:44:16的发言:

http://rpg.blue/upload_program/files/Project4_97015330.rar
呵呵,这个总可以了吧。试试看,如果还有问题的话,再问我,我看看怎么把它做完美


作者: lhbadsl    时间: 2008-7-21 07:04
呵呵,个人认为xp的超级横板不是很好懒的看,柳柳最好的东西,个人认为还是彩虹神剑,所以就用了个最通用的办法,我的东西都很追求通用的,建议楼主看看我的rmvx自定义全动画战斗系统表系统教程(无责任教程)里面的代码,虽然不是你用的,但是里面的思想,可以令你的战斗系统更好。这么好的东西被无视了。。如果说雨雪还有什么不好的,就是应该用龙虎乱舞脚本,我很喜欢,又不是很难,如果你这样做了,那么它肯定大红的,呵呵。http://rpg.blue/viewthread.php?t ... 7%2D20+22%3A59%3A27
作者: soulframe    时间: 2008-7-21 07:20
好像还有点问题……就是遇到连续快速闪光的时候(比如被乱舞类的招打到),战斗图会消失或者蹦血和动画脱节。一击型的目前已经没有问题了。是不是因为是先处理等待再处理了蹦血?这样如果遇到快速连续闪光会有问题吧?
龙虎乱舞原来看过,考虑过,不过感觉不太适合于传统的rpg,所以就没用。而且那样打久了也会有点无聊吧,还不如arpg了……

以下引用lhbadsl于2008-7-20 23:04:46的发言:

呵呵,个人认为xp的超级横板不是很好懒的看,柳柳最好的东西,个人认为还是彩虹神剑,所以就用了个最通用的办法,我的东西都很追求通用的,建议楼主看看我的rmvx自定义全动画战斗系统表系统教程(无责任教程)里面的代码,虽然不是你用的,但是里面的思想,可以令你的战斗系统更好。这么好的东西被无视了。。如果说雨雪还有什么不好的,就是应该用龙虎乱舞脚本,我很喜欢,又不是很难,如果你这样做了,那么它肯定大红的,呵呵。http://rpg.blue/viewthread.php?tid=93536&ntime=2008%2D7%2D20+22%3A59%3A27


作者: lhbadsl    时间: 2008-7-21 07:38
你可以调它的等待时间的,我那里默认是20帧(很卡吧),为了令你更能看到它的效果,因为我看超级是四帧“挨打”的,这是由它的动画播放引擎确定的,限制帧数这就是我认为它不好的地方,不够自由,不过你要设计一个很短的技能,又有很多闪光的,这是不好的,卡死了,有很多较顺。你可以调wait(20)这里,把它调小一点,不过所有闪光间隔一定要比设定数字小,还有个问题就是,死了还要打两次,晕,不过这是彩虹的问题,我无奈也。。。。如果有必要,还是要大调彩虹的{/ll}
作者: lhbadsl    时间: 2008-7-21 07:47
不好意思,因为你如果闪光间隔小于wait就会失真,再说战斗精灵也不可能这么灵敏,绝对会卡死的,这个你要小心。“挨打”动画四帧设为一样,因为没有不同,很多格斗游戏都是一帧挨打的。。。速度就可以快了,我设计这个脚本的时候就为你想到了这个问题,如果有不对的话,那就要你给确定的要求给我了,不过可能要大修系统的,我还是不敢托大。。。
作者: lhbadsl    时间: 2008-7-21 08:05
如果这样都不行,我就看看还有没有别的办法吧。没有东西是做不出来的,只要有思路就可以。
因为我不知道你的战斗代码是什么,如果你给我看看你的战斗系统的话,可能有机会,因为要考虑到它的bug问题,没有原始系统没办法。我看思路就是如果是后面是连续每帧都有的话,加上一句判断代码,让他不刷新就可以了。这样就不用考虑战斗精灵的灵敏度了。
作者: lhbadsl    时间: 2008-7-21 08:12
还有就是直接在精灵的类中刷新代码中刷新动画应该可以和彩虹同步的(昨天没考虑这种办法,因为通用性不好,其实就是彩虹和闪光也是不同步的,晕,只是因为它不是用战斗精灵播发的,看不出而已),还是我上面的方法有机会一点。明天吧,我想想。。。
作者: soulframe    时间: 2008-7-21 08:20
可不可以加个限定,使得遇到这类招的时候就不改图了?比如如果对象动画id=多少时就不运行这一段。

以下引用lhbadsl于2008-7-20 23:38:44的发言:

你可以调它的等待时间的,我那里默认是20帧(很卡吧),为了令你更能看到它的效果,因为我看超级是四帧“挨打”的,这是由它的动画播放引擎确定的,限制帧数这就是我认为它不好的地方,不够自由,不过你要设计一个很短的技能,又有很多闪光的,这是不好的,卡死了,有很多较顺。你可以调wait(20)这里,把它调小一点,不过所有闪光间隔一定要比设定数字小,还有个问题就是,死了还要打两次,晕,不过这是彩虹的问题,我无奈也。。。。如果有必要,还是要大调彩虹的


作者: soulframe    时间: 2008-7-21 08:22
恩,可以给你个系统和测试用素材,我qq17275769你加我吧~ 其实我系统很简单,主要也就是彩虹+超级。其他都是些cp,血条之类的东西。

以下引用lhbadsl于2008-7-21 0:12:28的发言:

还有就是直接在精灵的类中刷新代码中刷新动画应该可以和彩虹同步的(昨天没考虑这种办法,因为通用性不好,其实就是彩虹和闪光也是不同步的,晕,只是因为它不是用战斗精灵播发的,看不出而已),还是我上面的方法有机会一点。明天吧,我想想。。。


作者: lhbadsl    时间: 2008-7-21 08:26
呵呵,应该可以,明天吧,今天太晚了。不过可能思路就和原来的不怎么相同,昨天我是以通用性为第一考虑的,时间可能要就一点,请不要介意。。。我想的东西就是要精雕的,有点不考虑“货期”了不好{/pz},我会尽快的。。如果我能的话。
作者: lhbadsl    时间: 2008-7-21 08:28
明天再加吧,我女朋友再用qq。。。
作者: lhbadsl    时间: 2008-7-21 09:42
呵呵,有思路了,给你两个选择,选项一(比较适合你使用),定义技能表,就是把数据库的技能动画按id分为两种,1.间隔型,闪烁在两帧以上。2.连闪型(乱舞),每帧都闪。这个思路我觉的比较合乎实际,改动代码少,通用性高,自由度差一点点,明天就可做出来,有个缺点就是不可以处理先打一两下在连打(个人觉得没有用处,因为你都回气了,还怎么连下去啊。。{/gg},拳王也是这样的,乱舞时敌人都在挨打,这种技能估计没有任何用处),个人推荐。选项二(脚本追求型),不太符合实际,看到我括号里讲的吧!如果觉得不好还要改回来,比如你做个这样的动画,先一闪很就的,如果敌人回气了,再打(总觉的不论不类的),如果连帧又要不断扣血无用。。。不推荐,还有就是十分困难,时间很久的。。。如果你要的话,我也可以做,就看你的要求咯。。。最好不要叫我做。。。好难,还要动脚本手术,debug等等{/ll}。呵呵,开个玩笑,我其实可以挑战一下的,我本身就是个脚本的玩家。。。没有问题的。。。
作者: soulframe    时间: 2008-7-21 10:28
当然第一种就够了~多谢啦。

以下引用lhbadsl于2008-7-21 1:42:04的发言:

呵呵,有思路了,给你两个选择,选项一(比较适合你使用),定义技能表,就是把数据库的技能动画按id分为两种,1.间隔型,闪烁在两帧以上。2.连闪型(乱舞),每帧都闪。这个思路我觉的比较合乎实际,改动代码少,通用性高,自由度差一点点,明天就可做出来,有个缺点就是不可以处理先打一两下在连打(个人觉得没有用处,因为你都回气了,还怎么连下去啊。。,拳王也是这样的,乱舞时敌人都在挨打,这种技能估计没有任何用处),个人推荐。选项二(脚本追求型),不太符合实际,看到我括号里讲的吧!如果觉得不好还要改回来,比如你做个这样的动画,先一闪很就的,如果敌人回气了,再打(总觉的不论不类的),如果连帧又要不断扣血无用。。。不推荐,还有就是十分困难,时间很久的。。。如果你要的话,我也可以做,就看你的要求咯。。。最好不要叫我做。。。好难,还要动脚本手术,debug等等。呵呵,开个玩笑,我其实可以挑战一下的,我本身就是个脚本的玩家。。。没有问题的。。。


作者: lhbadsl    时间: 2008-7-21 10:33
我也有碰到过类似问题,就是我们还没出招,他就显示挨打图了。是吧?
不果我觉的可以把挨打图和防御图的情况,放在显示伤害哪里判定,把转化为
原来的战斗图放在刷新环节判定
看了这段话后我想到了一个很重要的问题,那就是我这个系统本身就犯了脚本追求综合整,没有考虑到使用问题,晕,原来是写多了代码。。。。好像你一招之中,它还有回气{/gg},应该是第一次闪光就挨打,招完再换图{/gg}。这个效果应该是最好的,我明天就写出这两个效果,整合超级横板和彩虹神剑的。soulframe看着用吧,多一种选择总是好的。

作者: lhbadsl    时间: 2008-7-22 02:12
不好意思,今天太忙了,还差一点点,放出部分代码,这个系统基本已经做好,可是现在的代码还是很乱,可能会有bug,正在完整中,先看看这些把。
技能类型判断函数:

  1.   #---------------------------------------------------------------------------
  2. # 检测技能种类的方法(函数),1为连帧,2为乱舞,这里只定义了两个,其实你喜欢的话
  3. # 可以定义无数中,还可以为一个技能定义一种类型,这样你就可以做出不同的挨打动作,
  4. # 配合后面的挨打动画播放引擎(这个是二次引擎,要用好要大改柳柳超级战斗系统的动画
  5. # 播放引擎,把帧数限制去掉,改成像我的vx全动画战斗表系统那样的引擎,这个有点难
  6. # 度,不过我做过,对我也不是很难。如果你要求,我可以免费定做,不过。。。呵呵),
  7. # 比如好像街机格斗那样,敌人挨打可以完全配合你的招式动画,好像拳王八神的无双,
  8. # 打到最后,敌人会趴下。。。效果非常好,只是也有受害者。。就是你了。。为了一招
  9. # 要为所有的敌人定义大约五六个挨打动画。虽然我帮你定做系统内可以减少你的工作量
  10. # 不过也是比较美工自虐方法,慎用。
  11. #-----------------------------------------------------------------------------  
  12. def  check_skill_type(no_skill_id)
  13.       many_hit=[10,20,30,56]
  14.       luan_wu=[60,57]
  15.       for i in 1..many_hit.size
  16.         if many_hit[i]== no_skill_id
  17.         skill_type=1
  18.         end
  19.       end
  20.       for i in 1..luan_wu.size
  21.         if luan_wu[i]== no_skill_id
  22.           skill_type=2
  23.         end
  24.         return skill_type
  25.       end
  26.       end
复制代码

主处理部分:
  1.       bat=@battler
  2.       p bat
  3.       #b=$data_skills
  4.       if bat.damage != nil
  5.       @temp_name=bat.battler_name
  6.       bat_skill_id=bat.current_action.skill_id
  7.       skill_type_no=check_skill_type(bat_skill_id)
  8.       bat.battler_name = bat.battler_name.split(/★/)[0]
  9.       bat.battler_name = bat.battler_name + "★3"
  10.       wait_ani()
  11.       end
复制代码

还有wait_ani()函数部分要处理一下,有一些代码还没找到,要完美的话就要就一点,这个部分比较重要,实际上是一个动画播放引擎,为了扩展性更好,正在努力完成。。。
作者: lhbadsl    时间: 2008-7-22 02:51
这个wait_ani()函数的实际意义是,当主处理开始(第一次闪光时),主处理首先播放“挨打”图1号,确定目标受到什么样的技能攻击,然后进入“挨打”动画播放模式(就是wait_ani()函数处理,它根据条件确定播放顺序和内容,可以很简陋也可以很复杂,通过改进版的wait() 函数等待控制动画时机,在代码上修改,其实就和数据库中设置动画没有区别,不过使用代码而不是“拖”,这样你可以自定义每个技能的挨打动画,不过是每个怪物都通用的,前提是你要为所有的怪物设定各种挨打图,美工要求吗。。好高,当然如果你不想这么复杂让他们只有一两张挨打也可以,代码改动容易,我会教你),其实只有第一次闪光有用(做为进入判定,过后他按照所中的技能自己播放的了),如你设置了一个招,先打肚子,敌人弯腰,再一飞腿,敌人跌倒,那么可以获一张敌人弯腰(挨打图2号),敌人跌倒(挨打图3号),再画一张敌人起身跑回的动画(挨打图4号,挨打图可以是多帧的),时机用wait()控制,位置用screen.x等坐标控制,这样敌人的挨打可以完全配合你的招式动画。
作者: lhbadsl    时间: 2008-7-22 02:58
改进版wait()还没做好,动画播放引擎wait_ani()规则还在debug中,请再给我一两天时间,让我做到最好。
作者: soulframe    时间: 2008-7-22 05:35
这个脚本实在太强大了,出乎我意料之外啊~我尽量把素材方面做到最好,想象中一定会异常华丽的……

以下引用lhbadsl于2008-7-21 18:51:41的发言:

这个wait_ani()函数的实际意义是,当主处理开始(第一次闪光时),主处理首先播放“挨打”图1号,确定目标受到什么样的技能攻击,然后进入“挨打”动画播放模式(就是wait_ani()函数处理,它根据条件确定播放顺序和内容,可以很简陋也可以很复杂,通过改进版的wait() 函数等待控制动画时机,在代码上修改,其实就和数据库中设置动画没有区别,不过使用代码而不是“拖”,这样你可以自定义每个技能的挨打动画,不过是每个怪物都通用的,前提是你要为所有的怪物设定各种挨打图,美工要求吗。。好高,当然如果你不想这么复杂让他们只有一两张挨打也可以,代码改动容易,我会教你),其实只有第一次闪光有用(做为进入判定,过后他按照所中的技能自己播放的了),如你设置了一个招,先打肚子,敌人弯腰,再一飞腿,敌人跌倒,那么可以获一张敌人弯腰(挨打图2号),敌人跌倒(挨打图3号),再画一张敌人起身跑回的动画(挨打图4号,挨打图可以是多帧的),时机用wait()控制,位置用screen.x等坐标控制,这样敌人的挨打可以完全配合你的招式动画。


作者: 灯笼菜刀王    时间: 2008-7-22 05:49
以下引用lhbadsl于2008-7-21 18:51:41的发言:

这个wait_ani()函数的实际意义是,当主处理开始(第一次闪光时),主处理首先播放“挨打”图1号,确定目标受到什么样的技能攻击,然后进入“挨打”动画播放模式(就是wait_ani()函数处理,它根据条件确定播放顺序和内容,可以很简陋也可以很复杂,通过改进版的wait() 函数等待控制动画时机,在代码上修改,其实就和数据库中设置动画没有区别,不过使用代码而不是“拖”,这样你可以自定义每个技能的挨打动画,不过是每个怪物都通用的,前提是你要为所有的怪物设定各种挨打图,美工要求吗。。好高,当然如果你不想这么复杂让他们只有一两张挨打也可以,代码改动容易,我会教你),其实只有第一次闪光有用(做为进入判定,过后他按照所中的技能自己播放的了),如你设置了一个招,先打肚子,敌人弯腰,再一飞腿,敌人跌倒,那么可以获一张敌人弯腰(挨打图2号),敌人跌倒(挨打图3号),再画一张敌人起身跑回的动画(挨打图4号,挨打图可以是多帧的),时机用wait()控制,位置用screen.x等坐标控制,这样敌人的挨打可以完全配合你的招式动画。


有个建议可以减少美工要求且画面效果不会降低,还有可能提高。
就是改动战斗图的跳动幅度。这个幅度可以自定义,就像换挨打图一样。
漂流幻境 不知道各位玩过没有。虽然它的战斗画面不算精美,但是效果很热血看起来很爽快。
我有尝试过将战斗系统RM化,不过技术方面卡住了....
它的表现就是,挨打图最多只有2,3张,但是实现多种效果。比如龙卷旋风,敌人就是换挨打图,然后呈螺旋状摇晃上升,最后变倒地图落地,还有哈肯,动画就是主角一边高速前进一边连续攻击带着残像。敌人换成挨打图,随着闪光不规则晃动同时配合动画的移动速度后移。
看这位的脚本效果描述,实现这些应该不难,而且彩虹剑也有配合闪光进行跳跃的功能,但是它的跳跃是固定的。如果能扩展,不比直接动画差。

话说,口袋妖怪系列全是用晃动来代替复杂的动作动画....
作者: soulframe    时间: 2008-7-22 06:03
此外你尽快加我q吧,可以给你提供个带部分素材的测试工程~

以下引用lhbadsl于2008-7-21 18:58:22的发言:

改进版wait()还没做好,动画播放引擎wait_ani()规则还在debug中,请再给我一两天时间,让我做到最好。


作者: lhbadsl    时间: 2008-7-22 07:17
加不了啊,老大
作者: lhbadsl    时间: 2008-7-22 07:18
我qq526133218
作者: lhbadsl    时间: 2008-7-22 07:22
有个建议可以减少美工要求且画面效果不会降低,还有可能提高。
就是改动战斗图的跳动幅度。这个幅度可以自定义,就像换挨打图一样。
漂流幻境 不知道各位玩过没有。虽然它的战斗画面不算精美,但是效果很热血看起来很爽快。
我有尝试过将战斗系统RM化,不过技术方面卡住了....
它的表现就是,挨打图最多只有2,3张,但是实现多种效果。比如龙卷旋风,敌人就是换挨打图,然后呈螺旋状摇晃上升,最后变倒地图落地,还有哈肯,动画就是主角一边高速前进一边连续攻击带着残像。敌人换成挨打图,随着闪光不规则晃动同时配合动画的移动速度后移。
看这位的脚本效果描述,实现这些应该不难,而且彩虹剑也有配合闪光进行跳跃的功能,但是它的跳跃是固定的。如果能扩展,不比直接动画差。

话说,口袋妖怪系列全是用晃动来代替复杂的动作动画....

呵呵,不完美的东西我是不做的,我宁愿做好了,全部的然后再去掉,都要把一个系统做到最好。还有我的东西都是很虐待美工的。。。我自己也有画,自己的游戏变成了一个大坑,这就是我追求的结果,soulframe比我好一点吧。。。所以我把最好的留了给他。。。{/dy}
作者: lhbadsl    时间: 2008-7-22 07:34
灯笼菜刀王,其实你这个效果我的完美版是可以做到的,都说了可以自定义动画了,“动画”不会没有声音把和震动把,留下的,让使用者去取舍,我认为这才是一个脚本编写者应有的态度。。。我没有叫他用最困难的办法啊,呵呵
作者: lhbadsl    时间: 2008-7-27 22:49
soulframe你要的东西已经搞好,这次是真的完美了,不过好像看你没有上QQ发送不能,看到请发留言给我,过段时间较忙,肯没有时间再改了,请速度拿回去测试。。。看能不能发现问题。。。速度啊!
作者: lhbadsl    时间: 2008-8-2 09:39
脚本打击感增强已经完成,效果非常好,还有的时打击感可以设定,不同的招式可以有不同的“打击阻力”,你对比下我这个工程和你的工程就可以明显感觉到改变,还有就是击中音效方面也已经做好,虽然比较简陋,可是打击的感觉摆在那里,打怪不在轻飘飘了,在请速度试一下。。。。
作者: doranikofu    时间: 2008-8-2 13:02
拜一下…
能贴出来看看么 想学习下 不知道俺能看得懂不{/hx}
作者: lhbadsl    时间: 2008-8-3 01:47
拜一下…
能贴出来看看么 想学习下 不知道俺能看得懂不
到时候看雨血2吧,如果soulframe能够取用这个脚本的话。。。。就可以看到了。。。我是不会也不可以发的。。只有soulframe可以发。。。。就算是他不采用也是这样,如果他不用也不发的话那就估计永远也看不到了,这个东西美工要求变态。呵呵,没有多少人用的,没用的东西。。。sorry




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