Project1

标题: 有办法使敌人的所有动画改成反方向吗? [打印本页]

作者: jhhuang    时间: 2008-7-31 08:26
标题: 有办法使敌人的所有动画改成反方向吗?
我方技能很多动画都是向左发动攻击的,那样敌人要发动就显得很麻烦了....
有办法使敌人发动动画时,整个动画反转吗?
注意:是整个动画反转,不是每个单元左右反转. [LINE]1,#dddddd[/LINE]此贴于 2008-8-2 14:04:40 被版主darkten提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]此贴于 2008-8-6 11:23:24 被版主darkten提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]此贴于 2008-8-9 1:42:37 被版主darkten提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]此贴于 2008-8-15 20:34:03 被版主darkten提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]版务信息:版主帮忙结贴~
作者: 灯笼菜刀王    时间: 2008-7-31 08:29
一,做一个反方向动画的技能。然后敌人方都使用这类的反动画技能。

二,自己写个敌人使用动画为反方向的脚本。
作者: jhhuang    时间: 2008-7-31 08:33
以下引用灯笼菜刀王于2008-7-31 0:29:19的发言:

一,做一个反方向动画的技能。然后敌人方都使用这类的反动画技能。

二,自己写个敌人使用动画为反方向的脚本。

一,每个技能需要画几个小时去弄,免提-.-
二,不知道怎么写.......
作者: zl90349166    时间: 2008-7-31 11:13
提示: 作者被禁止或删除 内容自动屏蔽
作者: 关重7    时间: 2008-8-4 13:33
至少梦3是做了两套
作者: jhhuang    时间: 2008-8-7 06:18
2008-8-4 5:33:19
回复人: 关重7

???怎么我看不见回的帖子/....?
作者: 灯笼菜刀王    时间: 2008-8-7 06:25
捣乱被和谐掉了-。-

话说昨天刚学了招水平反转的办法。

试试在 module 的animation设置中用分歧判断角色和敌人,然后让self.mirror = true不知道能不能让整个动画反转~~

囧乱想乱猜,可以无视我....
作者: zhong    时间: 2008-8-7 07:45
vx里的动画有定义这个mirror参数,XP没有,不过可以重定义一下..进行实现.....以下脚本楼主试下....插在main之上,应该可以初步实现翻转....这里定义了敌人的施展动画不翻转,楼主试试...
.

  1. module RPG
  2.   class Sprite < ::Sprite
  3.    
  4.     def animation(animation, hit,mirror)
  5.       dispose_animation
  6.       @_animation = animation
  7.       return if @_animation == nil
  8.       #==============
  9.       @animation_mirror = mirror
  10.       #==============
  11.       @_animation_hit = hit
  12.       @_animation_duration = @_animation.frame_max
  13.       animation_name = @_animation.animation_name
  14.       animation_hue = @_animation.animation_hue
  15.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  16.       if @@_reference_count.include?(bitmap)
  17.         @@_reference_count[bitmap] += 1
  18.       else
  19.         @@_reference_count[bitmap] = 1
  20.       end
  21.       @_animation_sprites = []
  22.       if @_animation.position != 3 or not @@_animations.include?(animation)
  23.         for i in 0..15
  24.           sprite = ::Sprite.new(self.viewport)
  25.           sprite.bitmap = bitmap
  26.           sprite.visible = false
  27.           @_animation_sprites.push(sprite)
  28.         end
  29.         unless @@_animations.include?(animation)
  30.           @@_animations.push(animation)
  31.         end
  32.       end
  33.       update_animation
  34.     end


  35.     def animation_set_sprites(sprites, cell_data, position)
  36.         for i in 0..15
  37.         sprite = sprites[i]
  38.         pattern = cell_data[i, 0]
  39.         if sprite == nil or pattern == nil or pattern == -1
  40.           sprite.visible = false if sprite != nil
  41.           next
  42.         end
  43.         sprite.visible = true
  44.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  45.         if position == 3
  46.           if self.viewport != nil
  47.             sprite.x = self.viewport.rect.width / 2
  48.             sprite.y = self.viewport.rect.height - 160
  49.           else
  50.             sprite.x = 320
  51.             sprite.y = 240
  52.           end
  53.         else
  54.           sprite.x = self.x - self.ox + self.src_rect.width / 2
  55.           sprite.y = self.y - self.oy + self.src_rect.height / 2
  56.           sprite.y -= self.src_rect.height / 4 if position == 0
  57.           sprite.y += self.src_rect.height / 4 if position == 2
  58.         end
  59.         sprite.x += cell_data[i, 1]
  60.         sprite.y += cell_data[i, 2]
  61.         sprite.z = 2000
  62.         sprite.ox = 96
  63.         sprite.oy = 96
  64.         sprite.zoom_x = cell_data[i, 3] / 100.0
  65.         sprite.zoom_y = cell_data[i, 3] / 100.0
  66.         
  67.         #==============================================
  68.         if @animation_mirror
  69.           sprite.angle = (360 - cell_data[i, 4])
  70.           sprite.mirror = (cell_data[i, 5] == 0)
  71.         else  
  72.          sprite.angle = cell_data[i, 4]
  73.          sprite.mirror = (cell_data[i, 5] == 1)
  74.         end
  75.         #================================================
  76.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  77.         sprite.blend_type = cell_data[i, 7]
  78.       end
  79.    
  80.     end
  81.    
  82.   end
  83. end

  84. class Sprite_Battler < RPG::Sprite
  85.   
  86.   #--------------------------------------------------------------------------
  87.   # ● 刷新画面
  88.   #--------------------------------------------------------------------------
  89.   def update
  90.     super
  91.     # 战斗者为 nil 的情况下
  92.     if @battler == nil
  93.       self.bitmap = nil
  94.       loop_animation(nil)
  95.       return
  96.     end
  97.     # 文件名和色相与当前情况有差异的情况下
  98.     if @battler.battler_name != @battler_name or
  99.        @battler.battler_hue != @battler_hue
  100.       # 获取、设置位图
  101.       @battler_name = @battler.battler_name
  102.       @battler_hue = @battler.battler_hue
  103.       self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  104.       @width = bitmap.width
  105.       @height = bitmap.height
  106.       self.ox = @width / 2
  107.       self.oy = @height
  108.       # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  109.       if @battler.dead? or @battler.hidden
  110.         self.opacity = 0
  111.       end
  112.     end
  113.     # 动画 ID 与当前的情况有差异的情况下
  114.     if @battler.damage == nil and
  115.        @battler.state_animation_id != @state_animation_id
  116.       @state_animation_id = @battler.state_animation_id
  117.       loop_animation($data_animations[@state_animation_id])
  118.     end
  119.     # 应该被显示的角色的情况下
  120.     if @battler.is_a?(Game_Actor) and @battler_visible
  121.       # 不是主状态的时候稍稍降低点透明度
  122.       if $game_temp.battle_main_phase
  123.         self.opacity += 3 if self.opacity < 255
  124.       else
  125.         self.opacity -= 3 if self.opacity > 207
  126.       end
  127.     end
  128.     # 明灭
  129.     if @battler.blink
  130.       blink_on
  131.     else
  132.       blink_off
  133.     end
  134.     # 不可见的情况下
  135.     unless @battler_visible
  136.       # 出现
  137.       if not @battler.hidden and not @battler.dead? and
  138.          (@battler.damage == nil or @battler.damage_pop)
  139.         appear
  140.         @battler_visible = true
  141.       end
  142.     end
  143.     # 可见的情况下
  144.     if @battler_visible
  145.       # 逃跑
  146.       if @battler.hidden
  147.         $game_system.se_play($data_system.escape_se)
  148.         escape
  149.         @battler_visible = false
  150.       end
  151.       # 白色闪烁
  152.       if @battler.white_flash
  153.         whiten
  154.         @battler.white_flash = false
  155.       end
  156.       # 动画
  157.       if @battler.animation_id != 0
  158.         animation = $data_animations[@battler.animation_id]
  159.       
  160.         unless $scene.animation1_id == @battler.animation_id and $scene.animation2_id != @battler.animation_id
  161.       
  162.         #==================================
  163.          mirror = @battler.is_a?(Game_Enemy)? false : true
  164.         #==================================
  165.         else
  166.          mirror = false
  167.         end
  168.       
  169.         animation(animation, @battler.animation_hit,mirror)
  170.         @battler.animation_id = 0
  171.       end
  172.       # 伤害
  173.       if @battler.damage_pop
  174.         damage(@battler.damage, @battler.critical)
  175.         @battler.damage = nil
  176.         @battler.critical = false
  177.         @battler.damage_pop = false
  178.       end
  179.       # korapusu
  180.       if @battler.damage == nil and @battler.dead?
  181.         if @battler.is_a?(Game_Enemy)
  182.           $game_system.se_play($data_system.enemy_collapse_se)
  183.         else
  184.           $game_system.se_play($data_system.actor_collapse_se)
  185.         end
  186.         collapse
  187.         @battler_visible = false
  188.       end
  189.     end
  190.     # 设置活动块的坐标
  191.     self.x = @battler.screen_x
  192.     self.y = @battler.screen_y
  193.     self.z = @battler.screen_z
  194.   end
  195.   
  196.   
  197.   
  198. end  
  199. #==============================================================================
  200. # ■ Scene_Battle
  201. #------------------------------------------------------------------------------
  202. #  处理战斗画面的类。
  203. #==============================================================================

  204. class Scene_Battle
  205. #--------------------------------------------------------------------------
  206. # ● 定义实例变量
  207. #--------------------------------------------------------------------------
  208. attr_reader   :animation1_id       # 行动方动画ID
  209. attr_reader   :animation2_id        #对象动画ID
  210. end

复制代码

作者: 灯笼菜刀王    时间: 2008-8-7 12:14
以下引用zhong于2008-8-6 23:45:53的发言:
[quote]额,理解错误= =

自我屏蔽.......

作者: jhhuang    时间: 2008-8-8 01:32
错误比较严重....以上脚本并非画面的翻转,只是每单元的左右反转了而已,单元位置不变.
作者: dbshy    时间: 2008-8-8 02:07
屏蔽
作者: zhong    时间: 2008-8-8 03:55
呵呵~~~理解错误。。。。比较直接的解决方法就是在我那个脚本的这部分
if @animation_mirror
          sprite.angle = (360 - cell_data[i, 4])
          sprite.mirror = (cell_data[i, 5] == 0)

加上
if @animation_mirror
          sprite.angle = (360 - cell_data[i, 4])
          sprite.mirror = (cell_data[i, 5] == 0)
          sprite.x -= 2*cell_data[i, 1]
          sprite.y -= 2*cell_data[i, 2]

这两句试试~~~~~ [LINE]1,#dddddd[/LINE]版主对此帖的认可:『zhong大与dbshy大辛苦了,虽然不清楚效果如何,但是诚意可嘉,补上少许奖励,感激你们的热情...』,积分『+150』。
作者: jhhuang    时间: 2008-8-13 21:24
以下引用dbshy于2008-8-7 18:07:38的发言:
   sprite.x = self.x - self.ox + self.src_rect.width / 2
   sprite.y = self.y - self.oy + self.src_rect.height / 2
LZ只需改下计算公式即可


[本贴由作者于 2008-8-7 18:25:51 最后编辑]


不会改....
zhong的那个也是加了之后就乱飞了.
作者: dbshy    时间: 2008-8-14 00:27
  1.   module RPG
  2.   class Sprite < ::Sprite
  3.   
  4.     def animation_set_sprites(sprites, cell_data, position)
  5.       for i in 0..15
  6.         sprite = sprites[i]
  7.         pattern = cell_data[i, 0]
  8.         if sprite == nil or pattern == nil or pattern == -1
  9.           sprite.visible = false if sprite != nil
  10.           next
  11.         end
  12.         sprite.visible = true
  13.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  14.         if position == 3
  15.           if self.viewport != nil
  16.             sprite.x = self.viewport.rect.width / 2
  17.             sprite.y = self.viewport.rect.height - 160
  18.           else
  19.             sprite.x = 320
  20.             sprite.y = 240
  21.           end
  22.         else
  23.           sprite.x = self.x - self.ox + self.src_rect.width / 2
  24.           sprite.y = self.y - self.oy + self.src_rect.height / 2
  25.           sprite.y -= self.src_rect.height / 4 if position == 0
  26.           sprite.y += self.src_rect.height / 4 if position == 2
  27.         end
  28.         sprite.x += - cell_data[i, 1]
  29.         sprite.y += cell_data[i, 2]
  30.         sprite.z = 2000
  31.         sprite.ox = 96
  32.         sprite.oy = 96
  33.         sprite.zoom_x = cell_data[i, 3] / 100.0
  34.         sprite.zoom_y = cell_data[i, 3] / 100.0
  35.         sprite.angle = cell_data[i, 4]
  36.         sprite.mirror = (cell_data[i, 5] == 1)
  37.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  38.         sprite.blend_type = cell_data[i, 7]
  39.       end
  40.     end
  41.    
  42.   end
  43. end
复制代码


前面的搞错了,理解错了LZ的意思 = =

插入脚本到MAIN前 [LINE]1,#dddddd[/LINE]版主对此帖的认可:『zhong大与dbshy大辛苦了,虽然不清楚效果如何,但是诚意可嘉,补上少许奖励,感激你们的热情...』,积分『+150』。
作者: 3535    时间: 2008-8-17 08:59
http://rpg.blue/web/htm/news867.htm [LINE]1,#dddddd[/LINE]系统信息:本贴由本区版主认可为正确答案,66RPG感谢您的热情解答~




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