幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1936|回复: 9

[求助]因在战斗中显示状态动画而出错。请见脚本

[复制链接]

13

主题

82

帖子

704

积分

⑤进阶

积分
704
QQ
发表于 2007-2-27 15:36:43 | 显示全部楼层 |阅读模式

  1. #--------------------------------------------------
  2. # 此脚本来自[url]www.66xxx.com[/url],使用请保留此信息
  3. #--------------------------------------------------
  4. module RPG
  5.   class Sprite < ::Sprite
  6.     def initialize(viewport = nil)
  7.       super(viewport)
  8.       @_whiten_duration = 0
  9.       @_appear_duration = 0
  10.       @_escape_duration = 0
  11.       @_collapse_duration = 0
  12.       @_damage_duration = 0
  13.       @_animation_duration = 0
  14.       @_blink = false
  15.       @_animation = []
  16.     end
  17.     def animation(animation, hit)
  18.       return if animation == nil
  19.       num = @_animation.size
  20.       @_animation.push([animation, hit, animation.frame_max, []])
  21.       bitmap = RPG::Cache.animation(animation.animation_name,
  22.                                     animation.animation_hue)
  23.       if @@_reference_count.include?(bitmap)
  24.         @@_reference_count[bitmap] += 1
  25.       else
  26.         @@_reference_count[bitmap] = 1
  27.       end
  28.       if @_animation[num][0] != 3 or not @@_animations.include?(animation)
  29.         for i in 0..15
  30.           sprite = ::Sprite.new(self.viewport)
  31.           sprite.bitmap = bitmap
  32.           sprite.visible = false
  33.           @_animation[num][3].push(sprite)
  34.         end
  35.         unless @@_animations.include?(animation)
  36.           @@_animations.push(animation)
  37.         end
  38.       end
  39.       update_animation(@_animation[num])
  40.     end
  41.     def loop_animation(animation)
  42.       return if animation == @_loop_animation
  43.       dispose_loop_animation
  44.       @_loop_animation = animation
  45.       return if @_loop_animation == nil
  46.       @_loop_animation_index = 0
  47.       animation_name = @_loop_animation.animation_name
  48.       animation_hue = @_loop_animation.animation_hue
  49.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  50.       if @@_reference_count.include?(bitmap)
  51.         @@_reference_count[bitmap] += 1
  52.       else
  53.         @@_reference_count[bitmap] = 1
  54.       end
  55.       @_loop_animation_sprites = []
  56.       for i in 0..15
  57.         sprite = ::Sprite.new
  58.         sprite.bitmap = bitmap
  59.         sprite.visible = false
  60.         @_loop_animation_sprites.push(sprite)
  61.       end
  62.       # update_loop_animation
  63.     end
  64.     def dispose_animation
  65.       for anime in @_animation.reverse
  66.         sprite = anime[3][0]
  67.         if sprite != nil
  68.           @@_reference_count[sprite.bitmap] -= 1
  69.           if @@_reference_count[sprite.bitmap] == 0
  70.             sprite.bitmap.dispose
  71.           end
  72.         end
  73.         for sprite in anime[3]
  74.           sprite.dispose
  75.         end
  76.         @_animation.delete(anime)
  77.       end
  78.     end
  79.    
  80.     def update
  81.       super
  82.       if @_whiten_duration > 0
  83.         @_whiten_duration -= 1
  84.         self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  85.       end
  86.       if @_appear_duration > 0
  87.         @_appear_duration -= 1
  88.         self.opacity = (16 - @_appear_duration) * 16
  89.       end
  90.       if @_escape_duration > 0
  91.         @_escape_duration -= 1
  92.         self.opacity = 256 - (32 - @_escape_duration) * 10
  93.       end
  94.       if @_collapse_duration > 0
  95.         @_collapse_duration -= 1
  96.         self.opacity = 256 - (48 - @_collapse_duration) * 6
  97.       end
  98.       if @_damage_duration > 0
  99.         @_damage_duration -= 1
  100.         case @_damage_duration
  101.         when 38..39
  102.           @_damage_sprite.y -= 4
  103.         when 36..37
  104.           @_damage_sprite.y -= 2
  105.         when 34..35
  106.           @_damage_sprite.y += 2
  107.         when 28..33
  108.           @_damage_sprite.y += 4
  109.         end
  110.         @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
  111.         if @_damage_duration == 0
  112.           dispose_damage
  113.         end
  114.       end
  115.       for anime in @_animation
  116.         if (Graphics.frame_count % 2 == 0)
  117.           anime[2] -= 1
  118.           update_animation(anime)
  119.         end
  120.       end
  121.       if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  122.         update_loop_animation
  123.         @_loop_animation_index += 1
  124.         @_loop_animation_index %= @_loop_animation.frame_max
  125.       end
  126.       if @_blink
  127.         @_blink_count = (@_blink_count + 1) % 32
  128.         if @_blink_count < 16
  129.           alpha = (16 - @_blink_count) * 6
  130.         else
  131.           alpha = (@_blink_count - 16) * 6
  132.         end
  133.         self.color.set(255, 255, 255, alpha)
  134.       end
  135.       @@_animations.clear
  136.     end
  137.     def update_animation(anime)
  138.       if anime[2] > 0
  139.         frame_index = anime[0].frame_max - anime[2]
  140.         cell_data = anime[0].frames[frame_index].cell_data
  141.         position = anime[0].position
  142.         animation_set_sprites(anime, cell_data, position)
  143.         for timing in anime[0].timings
  144.           if timing.frame == frame_index
  145.             animation_process_timing(timing, anime[1])
  146.           end
  147.         end
  148.       else
  149.         @@_reference_count[anime[3][0].bitmap] -= 1
  150.         if @@_reference_count[anime[3][0].bitmap] == 0
  151.             anime[3][0].bitmap.dispose
  152.         end
  153.         for sprite in anime[3]
  154.           sprite.dispose
  155.         end
  156.         @_animation.delete(anime)
  157.       end
  158.     end
  159.     def animation_set_sprites(sprites, cell_data, position)
  160.       for i in 0..15
  161.         sprite = sprites[3][i]
  162.         pattern = cell_data[i, 0]
  163.         if sprite == nil or pattern == nil or pattern == -1
  164.           sprite.visible = false if sprite != nil
  165.           next
  166.         end
  167.         sprite.visible = true
  168.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  169.         if position == 3
  170.           if self.viewport != nil
  171.             sprite.x = self.viewport.rect.width / 2
  172.             if $game_temp.in_battle and self.battler.is_a?(Game_Enemy)
  173.               sprite.y = self.viewport.rect.height - 320
  174.             else
  175.               sprite.y = self.viewport.rect.height - 160
  176.             end
  177.           else
  178.             sprite.x = 320
  179.             sprite.y = 240
  180.           end
  181.         else
  182.           sprite.x = self.x - self.ox + self.src_rect.width / 2
  183.           sprite.y = self.y - self.oy + self.src_rect.height / 2
  184.           sprite.y -= self.src_rect.height / 4 if position == 0
  185.           sprite.y += self.src_rect.height / 4 if position == 2
  186.         end
  187.         sprite.x += cell_data[i, 1]
  188.         sprite.y += cell_data[i, 2]
  189.         z = sprites[0].z == nil ? self.battler.screen_z : sprites[0].z.to_i
  190.         sprite.z = z#self.battler.screen_z#sprites[0].z
  191.         sprite.ox = 96
  192.         sprite.oy = 96
  193.         sprite.zoom_x = cell_data[i, 3] / 100.0
  194.         sprite.zoom_y = cell_data[i, 3] / 100.0
  195.         if position != 3
  196.           sprite.zoom_x *= self.zoom_x
  197.           sprite.zoom_y *= self.zoom_y
  198.         end
  199.         sprite.angle = cell_data[i, 4]
  200.         sprite.mirror = (cell_data[i, 5] == 1)
  201.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  202.         sprite.blend_type = cell_data[i, 7]
  203.       end
  204.     end
  205.   end
  206. end
复制代码


本来没事,但是请人后续加入了挨打动画与攻击动画同步显示后,出现了如上错误.
请人修复!谢谢.  [s:3]
回复

使用道具 举报

101

主题

1053

帖子

214748万

积分

版主

令人怀念的故乡~

Rank: 7Rank: 7Rank: 7

积分
2147483647
QQ
发表于 2007-2-27 15:54:56 | 显示全部楼层
估计是冲突原因,试试合并下
勇士归来
回复 支持 反对

使用道具 举报

79

主题

617

帖子

6150

积分

⑦老手

暗夜下可怜人

积分
6150
发表于 2007-2-27 22:36:36 | 显示全部楼层
呵呵,这不就是多重动画吗?

加上鼠标LZ不嫌卡吗?
希望破灭是因为发现真实,宁可背负罪孽也要维护爱我之人,永远的娜乌西卡!!!!!!
回复 支持 反对

使用道具 举报

好人卡的 该用户已被删除
发表于 2007-2-27 22:48:03 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

13

主题

82

帖子

704

积分

⑤进阶

积分
704
QQ
 楼主| 发表于 2007-2-27 22:52:44 | 显示全部楼层
引用第2楼美兽2007-02-27 22:36发表的:
呵呵,这不就是多重动画吗?

加上鼠标LZ不嫌卡吗?
我去掉了,听说了有更好的鼠标系统orz
回复 支持 反对

使用道具 举报

13

主题

82

帖子

704

积分

⑤进阶

积分
704
QQ
 楼主| 发表于 2007-2-27 22:53:43 | 显示全部楼层
忘记说了,出现错误的条件是,给怪物加上状态动画orz
回复 支持 反对

使用道具 举报

79

主题

617

帖子

6150

积分

⑦老手

暗夜下可怜人

积分
6150
发表于 2007-2-27 23:40:21 | 显示全部楼层
引用第4楼颠倒的彩虹2007-02-27 22:52发表的:

我去掉了,听说了有更好的鼠标系统orz


如果真有不掉FPS的鼠标系统,我可以帮你做个不冲突的多重动画做为交换.
希望破灭是因为发现真实,宁可背负罪孽也要维护爱我之人,永远的娜乌西卡!!!!!!
回复 支持 反对

使用道具 举报

13

主题

82

帖子

704

积分

⑤进阶

积分
704
QQ
 楼主| 发表于 2007-2-28 12:03:02 | 显示全部楼层
好象那个是靠dll来带动的.我只是听说 …
回复 支持 反对

使用道具 举报

38

主题

3468

帖子

1

积分

超级版主

传说中的Bunny火神~!

Rank: 8Rank: 8

积分
1
发表于 2007-3-2 01:55:32 | 显示全部楼层
从脚本看来,和状态的附加对象没有关系……估计是那个挨打攻击动画同步显示造成的问题?但是理论上来说两者应该没有影响才对(如果你说的那个挨打攻击动画同步显示的做法是我印象中的那样)。
我突然发现,我是一个很幸运的好人。老婆真好~ 点我进入JQ(激情)教程范例收集!
回复 支持 反对

使用道具 举报

13

主题

82

帖子

704

积分

⑤进阶

积分
704
QQ
 楼主| 发表于 2007-3-2 11:31:30 | 显示全部楼层
是..施展法术同跑过去法术的前奏一样.等待3秒好象,怪物挨打和跑出去的动画(如果是施展法术就是怪物身上的法术特技)同时显示.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2025-6-24 22:19 , Processed in 0.017729 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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