设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1515|回复: 6
打印 上一主题 下一主题

全动画战斗无战斗胜利动画

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-1-26
帖子
206
跳转到指定楼层
1
发表于 2008-2-9 01:30:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-1-26
帖子
1544
2
发表于 2008-2-9 02:01:45 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

永久的旅行者

梦石
1
星屑
110
在线时间
404 小时
注册时间
2006-12-13
帖子
3091

开拓者贵宾第3届短篇游戏大赛主流游戏组季军第5届短篇游戏比赛季军

3
发表于 2008-2-9 02:14:13 | 只看该作者
看看脚本里注释的这一段,是你的战斗图名字设置错了吗?
#    2.战斗图的设置
#      战斗图其实只是一个透明的图片,它只是用来描述一个敌人或者角色的大小,并与相应的战斗动画编号相衔接。
#      战斗图的文件名格式如下:
#          名字★待机★防御★挨打★死亡动态★死亡静态★胜利动态★胜利静态.png
#          (其中“名字”一项与动画无关)
#          例如:
#          紫烟★140★141★148★149★150★144★145.png
#      对于敌人无胜利动画或者防御动画,请保持该位置为空,例如:
#          蓝若冰★124★★126★127★★★.png
#    综上,设置就这么完成了。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-1-26
帖子
206
4
 楼主| 发表于 2008-2-9 16:38:24 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

綾川司の姫様<

梦石
0
星屑
50
在线时间
796 小时
注册时间
2007-12-20
帖子
4520

贵宾第3届短篇游戏大赛R剧及RMTV组亚军

5
发表于 2008-2-9 17:44:06 | 只看该作者
你自己用了什么脚本和其冲突了吧。或者就是动画编号没对应上。{/fd}
我手头这个就能正常显示啊- -
你测试下看看。(砍两截发= =)

  1. #==============================================================================
  2. # ■ 全动画战斗
  3. #------------------------------------------------------------------------------
  4. #  By whbm
  5. #   应用脚本 彩虹神剑 By 66
  6. #==============================================================================
  7.     $fangyu = 0
  8. #   修改内容:
  9. #   1.修改战斗失败继续后被怪打就出现死亡静态或者不再出现死亡动态的BUG
  10. #   2.改变防御方式,怪打的时候防御动作才显现,打完就恢复
  11. #   3.修正一个角色死亡后,其他角色添加第6号状态的问题,就是那个一个死了,其他的都要被
  12. #     打好几次的BUG.
  13. #   4.修正不显示战斗胜利图的BUG
  14. #                                        by 星云
  15. #==============================================================================
  16. #简要介绍:
  17. #    本脚本实现了战斗的动态效果,其中包含了待机、攻击、防御、挨打、胜利、死亡。类似于超级横版、超级战斗。但是本系统特色在于所有效果的实现并不是靠庞大的战斗图,而是使用了数据库中的动画。这样不仅突破了不同人不同祯数量的限制,并且方便了单动画单祯的修改。
  18. #使用方法:
  19. #    个人觉得还是比较简单,但是大量的怪物还是会令人头痛。
  20. #    1.数据库的设置
  21. #      敌人必要的动画有待机、挨打、死亡三个必要的动画
  22. #      角色必要的动画有待机、挨打、防御、死亡动态、胜利动态、死亡静态、胜利静态
  23. #
  24. #      死亡静态与胜利静态:动画中只有1祯,为相应动态动画的最后一祯
  25. #      
  26. #      剩下的就是人物攻击的动画,和正常的动画是一样设置
  27. #      如图中的攻击等待动画只是为了在播放攻击动画的同时消除人物本身(素材原因,人物攻击的时候离开了原位,如果是在原位置放魔法是用不上的)
  28. #    2.战斗图的设置
  29. #      战斗图其实只是一个透明的图片,它只是用来描述一个敌人或者角色的大小,并与相应的战斗动画编号相衔接。
  30. #      战斗图的文件名格式如下:
  31. #          名字★待机★防御★挨打★死亡动态★死亡静态★胜利动态★胜利静态.png
  32. #          (其中“名字”一项与动画无关)
  33. #          例如:
  34. #          紫烟★140★141★148★149★150★144★145.png
  35. #      对于敌人无胜利动画或者防御动画,请保持该位置为空,例如:
  36. #          蓝若冰★124★★126★127★★★.png
  37. #    综上,设置就这么完成了。
  38. #注意事项:
  39. #    1.由于系统中待机由动画实现,所以无法使用状态附带动画的功能。
  40. #    2.可以在脚本中使用Ctrl+Shift+F通篇搜索“小改动”,可以修改某些窗口的Z值。
  41. #    3.当您将此系统向您的工程中移植的时候也要注意事项2中的“小改动”。
  42. #    4.系统是从游戏“石焚刃暖”中提取出来的,或许会有疏漏与多余的东西,BUG也是不免的。大家尽管提便是。     
  43. #==============================================================================
  44. class Spriteset_Battle
  45.   #--------------------------------------------------------------------------
  46.   # ● 初始化变量
  47.   #--------------------------------------------------------------------------
  48.   def initialize
  49.     # 生成显示端口
  50.     @viewport1 = Viewport.new(0, 0, 640, 480)
  51.     @viewport2 = Viewport.new(0, 0, 640, 480)
  52.     @viewport3 = Viewport.new(0, 0, 640, 480)
  53.     @viewport4 = Viewport.new(0, 0, 640, 480)
  54.     @viewport2.z = 101
  55.     @viewport3.z = 200
  56.     @viewport4.z = 5000
  57.     # 生成战斗背景活动块
  58.     @battleback_sprite = Sprite.new(@viewport1)
  59.     # 生成敌人活动块
  60.     @enemy_sprites = []
  61.     for enemy in $game_troop.enemies.reverse
  62.       @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  63.     end
  64.     # 生成敌人活动块
  65.     @actor_sprites = []
  66.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  67.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  68.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  69.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  70.     # 生成天候
  71.     @weather = RPG::Weather.new(@viewport1)
  72.     # 生成图片活动块
  73.     @picture_sprites = []
  74.     for i in 51..100
  75.       @picture_sprites.push(Sprite_Picture.new(@viewport3,
  76.         $game_screen.pictures[i]))
  77.     end
  78.     # 生成计时器块
  79.     @timer_sprite = Sprite_Timer.new
  80.     # 刷新画面
  81.     update
  82.   end
  83.   #..........................................................................
  84.   #--------------------------------------------------------------------------
  85.   # ● 胜利图
  86.   #--------------------------------------------------------------------------
  87.   def win
  88.     for sprite in @actor_sprites
  89.       sprite.win
  90.     end
  91.   end
  92.   #..........................................................................
  93.   #--------------------------------------------------------------------------
  94.   # ● 刷新画面
  95.   #--------------------------------------------------------------------------
  96.   def update
  97.     # 刷新角色的活动块 (对应角色的替换)
  98.     @actor_sprites[0].battler = $game_party.actors[0]
  99.     @actor_sprites[1].battler = $game_party.actors[1]
  100.     @actor_sprites[2].battler = $game_party.actors[2]
  101.     @actor_sprites[3].battler = $game_party.actors[3]
  102.     # 战斗背景的文件名与现在情况有差异的情况下
  103.     if @battleback_name != $game_temp.battleback_name
  104.       @battleback_name = $game_temp.battleback_name
  105.       if @battleback_sprite.bitmap != nil
  106.         @battleback_sprite.bitmap.dispose
  107.       end
  108.       @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
  109.       @battleback_sprite.src_rect.set(0, 0, 640, 480)
  110.     end
  111.     # 刷新战斗者的活动块
  112.     for sprite in @enemy_sprites + @actor_sprites
  113.       sprite.update
  114.     end
  115.     # 刷新天气图形
  116.     @weather.type = $game_screen.weather_type
  117.     @weather.max = $game_screen.weather_max
  118.     @weather.update
  119.     # 刷新图片活动块
  120.     for sprite in @picture_sprites
  121.       sprite.update
  122.     end
  123.     # 刷新计时器活动块
  124.     @timer_sprite.update
  125.     # 设置画面的色调与震动位置
  126.     @viewport1.tone = $game_screen.tone
  127.     @viewport1.ox = $game_screen.shake
  128.     # 设置画面的闪烁色
  129.     @viewport4.color = $game_screen.flash_color
  130.     # 刷新显示端口
  131.     @viewport1.update
  132.     @viewport2.update
  133.     @viewport4.update
  134.   end
  135. end
  136. class Arrow_Enemy < Arrow_Base
  137.   #--------------------------------------------------------------------------
  138.   # ● 获取光标指向的敌人
  139.   #--------------------------------------------------------------------------
  140.   def enemy
  141.     return $game_troop.enemies[@index]
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ● 刷新画面
  145.   #--------------------------------------------------------------------------
  146.   def update
  147.     super
  148.     # 如果指向不存在的敌人就离开
  149.     $game_troop.enemies.size.times do
  150.       break if self.enemy.exist?
  151.       @index += 1
  152.       @index %= $game_troop.enemies.size
  153.     end
  154.     # 光标右
  155.     if Input.repeat?(Input::RIGHT)
  156.       $game_system.se_play($data_system.cursor_se)
  157.       $game_troop.enemies.size.times do
  158.         @index += 1
  159.         @index %= $game_troop.enemies.size
  160.         break if self.enemy.exist?
  161.       end
  162.     end
  163.     # 光标左
  164.     if Input.repeat?(Input::LEFT)
  165.       $game_system.se_play($data_system.cursor_se)
  166.       $game_troop.enemies.size.times do
  167.         @index += $game_troop.enemies.size - 1
  168.         @index %= $game_troop.enemies.size
  169.         break if self.enemy.exist?
  170.       end
  171.     end
  172.     # 设置活动块坐标
  173.     if self.enemy != nil
  174.       self.x = self.enemy.screen_x + self.ox
  175.       self.y = self.enemy.screen_y + self.oy
  176.     end
  177.   end
  178. end
  179. class Arrow_Actor < Arrow_Base
  180.   #--------------------------------------------------------------------------
  181.   # ● 获取光标指向的角色
  182.   #--------------------------------------------------------------------------
  183.   def actor
  184.     return $game_party.actors[@index]
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● 刷新画面
  188.   #--------------------------------------------------------------------------
  189.   def update
  190.     super
  191.     # 光标右
  192.     if Input.repeat?(Input::RIGHT)
  193.       $game_system.se_play($data_system.cursor_se)
  194.       @index += 1
  195.       @index %= $game_party.actors.size
  196.     end
  197.     # 光标左
  198.     if Input.repeat?(Input::LEFT)
  199.       $game_system.se_play($data_system.cursor_se)
  200.       @index += $game_party.actors.size - 1
  201.       @index %= $game_party.actors.size
  202.     end
  203.     # 设置活动块坐标
  204.     if self.actor != nil
  205.       self.x = self.actor.screen_x + self.ox
  206.       self.y = self.actor.screen_y + self.oy
  207.     end
  208.   end
  209. end
  210. class Scene_Battle
  211.   #--------------------------------------------------------------------------
  212.   # ● 刷新画面 (主回合步骤 3 : 行动方动画)
  213.   #--------------------------------------------------------------------------
  214.   def update_phase4_step3
  215.     # 行动方动画 (ID 为 0 的情况下是白色闪烁)
  216.     if @animation1_id == 0
  217.       @active_battler.white_flash = true
  218.     else
  219.       @active_battler.animation_id = @animation1_id
  220.       @active_battler.animation_hit = true
  221.     end
  222.     # 对像方动画
  223.     for target in @target_battlers
  224.       target.animation_id = @animation2_id
  225.       target.animation_hit = (target.damage != "打空")
  226.       ###########################################################
  227.       target.setup_battler_dead_ani(0)
  228.       ############################################################
  229.       #.......................................................................
  230.       if target.is_a?(Game_Actor)
  231.         ##############
  232.         if target.guarding?
  233.           $fangyu = 1
  234.        end
  235.         ##############
  236.        if target.current_action.kind == 0 and target.current_action.basic == 1
  237.            target.setup_battler_ani(target.battler_name.split(/★/)[2])
  238.         else
  239.          target.setup_battler_hurt_ani(0)
  240.         end
  241.       end
  242.       if target.is_a?(Game_Enemy)
  243.        if target.current_action.kind == 0 and target.current_action.basic == 1
  244.           target.setup_battler_ani(target.battler_name.split(/★/)[1])
  245.         else
  246.           target.setup_battler_hurt_ani(0)
  247.         end
  248.       end
  249.       #.......................................................................
  250.     end
  251.     # 对像方动画
  252.     for target in @target_battlers
  253.       target.animation_id = @animation2_id
  254.       target.animation_hit = (target.damage != "打空")
  255.       #......................................................................
  256.     end
  257.     # 限制动画长度、最低 8 帧
  258.     @wait_count = 8
  259.     # 移至步骤 5
  260.     @phase4_step = 5
  261.   end
  262.   #--------------------------------------------------------------------------
  263.   # ● 刷新画面 (主回合步骤 4 : 对像方动画) ★
  264.   #--------------------------------------------------------------------------
  265.   def update_phase4_step4
  266.     # 限制动画长度、最低 8 帧
  267.     @wait_count = 8
  268.     # 移至步骤 5
  269.     @phase4_step = 5
  270.   end
  271. end
  272. class Game_Actor < Game_Battler
  273.   #--------------------------------------------------------------------------
  274.   # ● 取得战斗画面的 X 坐标
  275.   #--------------------------------------------------------------------------
  276. #--------------------------------------------------------------------------
  277. # ● 取得战斗画面的 X 坐标
  278. #--------------------------------------------------------------------------
  279. def screen_x
  280. case self.index
  281. when 0
  282.    return 380
  283. when 1
  284.    return 480
  285. when 2
  286.    return 480
  287. when 3
  288.    return 560
  289. else
  290.    return 0

  291.   end
  292. end
  293. #--------------------------------------------------------------------------
  294. # ● 取得战斗画面的 Y 坐标
  295. #--------------------------------------------------------------------------
  296. def screen_y
  297. case self.index
  298. when 0
  299.    return 380
  300. when 1
  301.    return 320
  302. when 2
  303.    return 460
  304. when 3
  305.    return 400
  306. else
  307.    return 0
  308.   end
  309. end
  310. #--------------------------------------------------------------------------
  311. # ● 取得战斗画面的 Z 坐标
  312. #--------------------------------------------------------------------------
  313. def screen_z
  314. case self.index
  315. when 0
  316.    return 10
  317. when 1
  318.    return 9
  319. when 2
  320.    return 8
  321. when 3
  322.    return 7

  323. else
  324.    return 0
  325.    end
  326. end
  327. end
  328. class Scene_Battle
  329.   #..........................................................................
  330.   #--------------------------------------------------------------------------
  331.   # ● 返回phase
  332.   #--------------------------------------------------------------------------
  333.   def phase
  334.     return @phase
  335.   end
  336.   #--------------------------------------------------------------------------
  337.   # ● 返回phase4_step
  338.   #--------------------------------------------------------------------------
  339.   def phase4_step
  340.     return @phase4_step
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ● 返回phase4_step
  344.   #--------------------------------------------------------------------------
  345.   def actor_command_active?
  346.     return @actor_command_window.active
  347.   end
  348.   #..........................................................................
  349. end
  350. class Game_Battler
  351.   #..........................................................................
  352.   #--------------------------------------------------------------------------
  353.   # ● 获取循环的动画 ID
  354.   #--------------------------------------------------------------------------  
  355.   def show_damage(value)
  356.     @show_damage_value = value
  357.   end
  358.   #--------------------------------------------------------------------------
  359.   # ● 获取循环的动画 ID
  360.   #--------------------------------------------------------------------------
  361.   def show_damage_value
  362.     return @show_damage_value
  363.   end
  364.   #--------------------------------------------------------------------------
  365.   # ● 获取循环的动画 ID
  366.   #--------------------------------------------------------------------------
  367.   def battler_ani
  368.     return @battler_ani
  369.   end
  370.   #--------------------------------------------------------------------------
  371.   # ● 获取循环的动画 ID
  372.   #--------------------------------------------------------------------------
  373.   def setup_battler_ani(battler_ani, once = 0)
  374.     @battler_ani = battler_ani
  375.     @once = once
  376.   end
  377.   #--------------------------------------------------------------------------
  378.   # ● 获取循环的动画 ID
  379.   #--------------------------------------------------------------------------
  380.   def setup_battler_hurt_ani(hurt)
  381.     @hurt = hurt
  382.   end  
  383.   #--------------------------------------------------------------------------
  384.   # ● 获取循环的动画 ID
  385.   #--------------------------------------------------------------------------
  386.   def setup_battler_dead_ani(over)
  387.     @over = over
  388.   end
  389.   #--------------------------------------------------------------------------
  390.   # ● 获取循环的动画 ID
  391.   #--------------------------------------------------------------------------
  392.   def battler_dead_ani
  393.     return @over
  394.   end
  395.   #--------------------------------------------------------------------------
  396.   # ● 获取循环的动画 ID
  397.   #--------------------------------------------------------------------------
  398.   def battler_ani_once
  399.     return @once
  400.   end
  401.   #--------------------------------------------------------------------------
  402.   # ● 获取循环的动画 ID
  403.   #--------------------------------------------------------------------------
  404.   def battler_hurt_ani
  405.     return @hurt
  406.   end
  407.   #..........................................................................
  408. end
  409. class Sprite_Battler < RPG::Sprite
  410.   #..........................................................................
  411.   #--------------------------------------------------------------------------
  412.   # ● 胜利图
  413.   #--------------------------------------------------------------------------
  414.   def win
  415.     if @battler_name != nil and not @battler.hidden and not @battler.dead?
  416.       @battler.setup_battler_ani(@battler_name.split(/★/)[6], 1)
  417.     end
  418.   end
  419.   #..........................................................................
  420.   #--------------------------------------------------------------------------
  421.   # ● 释放
  422.   #--------------------------------------------------------------------------
  423.   def dispose
  424.     if self.bitmap != nil
  425.       self.bitmap.dispose
  426.     end
  427.     super
  428.   end
  429.   #--------------------------------------------------------------------------
  430.   # ● 刷新画面
  431.   #--------------------------------------------------------------------------
  432.   def update
  433.     super
  434.     # 战斗者为 nil 的情况下
  435.     if @battler == nil
  436.       self.bitmap = nil
  437.       loop_animation(nil)
  438.       return
  439.     end
  440.     # 文件名和色相与当前情况有差异的情况下
  441.     if @battler.battler_name != @battler_name or
  442.        @battler.battler_hue != @battler_hue
  443.       @battler_hue = @battler.battler_hue
  444.       # 获取、设置位图
  445.       @battler_name = @battler.battler_name
  446.       self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  447.       #.......................................................................
  448.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  449.       #.......................................................................
  450.       @width = bitmap.width
  451.       @height = bitmap.height
  452.       self.ox = @width / 2
  453.       self.oy = @height
  454.       # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  455.       if @battler.is_a?(Game_Enemy)
  456.         if @battler.dead? or @battler.hidden
  457.           self.opacity = 0
  458.         end
  459.       end
  460.     end
  461.     # 动画 ID 与当前的情况有差异的情况下
  462.     #.........................................................................
  463.     if @battler.battler_ani != @battler_ani
  464.       @battler_ani = @battler.battler_ani
  465.       loop_animation($data_animations[@battler_ani.to_i])
  466.     end
  467.     #.........................................................................
  468.     # 应该被显示的角色的情况下
  469.     if @battler.is_a?(Game_Actor) and @battler_visible
  470.       # 不是主状态的时候稍稍降低点透明度
  471.       if $game_temp.battle_main_phase
  472.         self.opacity += 3 if self.opacity < 255
  473.       else
  474.         self.opacity -= 3 if self.opacity > 207
  475.       end
  476.     end
  477.     # 明灭
  478.     if @battler.blink
  479.       blink_on
  480.     else
  481.       blink_off
  482.     end
  483.     # 不可见的情况下
  484.     unless @battler_visible
  485.       # 出现 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  486.       if not @battler.hidden and not @battler.dead? and
  487.          (@battler.damage == nil or @battler.damage_pop)
  488.         if @battler.is_a?(Game_Enemy)
  489.           appear
  490.         else
  491.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  492.         end
  493.         @battler_visible = true
  494.       end
  495.     end
  496.     # 可见的情况下
  497.     if @battler_visible
  498.       # 逃跑
  499.       if @battler.hidden
  500.         $game_system.se_play($data_system.escape_se)
  501.         escape
  502.         @battler_visible = false
  503.       end
  504.       # 白色闪烁
  505.       if @battler.white_flash
  506.         whiten
  507.         @battler.white_flash = false
  508.       end
  509.       # 动画
  510.       if @battler.animation_id != 0
  511.         animation = $data_animations[@battler.animation_id]
  512.         animation(animation, @battler.animation_hit)
  513.         @battler.animation_id = 0
  514.       end
  515.       # 伤害
  516.       if @battler.damage_pop
  517.         damage(@battler.damage, @battler.critical)
  518.         @battler.damage = nil
  519.         @battler.critical = false
  520.         @battler.damage_pop = true################################
  521.       end
  522.       # korapusu
  523.       if @battler.damage == nil and @battler.dead?
  524.         #....................................................................
  525.         if @battler.is_a?(Game_Enemy)
  526.           $game_system.se_play($data_system.enemy_collapse_se)
  527.           #collapse
  528.         else
  529.           $game_system.se_play($data_system.actor_collapse_se)
  530.         end
  531.         #....................................................................
  532.         @battler_visible = false
  533.       end
  534.     end
  535.     # 设置活动块的坐标
  536.     self.x = @battler.screen_x
  537.     self.y = @battler.screen_y
  538.     self.z = @battler.screen_z
  539.   end
  540. end
  541. module RPG
  542.   class Sprite < ::Sprite
  543.     def damage(value, critical)
  544.       dispose_damage
  545.       if value.is_a?(Numeric)
  546.         damage_string = value.abs.to_s
  547.       else
  548.         damage_string = value.to_s
  549.       end
  550.       bitmap = Bitmap.new(160, 48)
  551.       bitmap.font.name = "隶书"
  552.       bitmap.font.size = 24
  553.       bitmap.font.color.set(0, 0, 0)
  554.       bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  555.       bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  556.       bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  557.       bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  558.       if value.is_a?(Numeric) and value < 0
  559.         bitmap.font.color.set(176, 255, 144)
  560.       else
  561.         bitmap.font.color.set(255, 255, 255)
  562.       end
  563.       bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  564.       if critical
  565.         bitmap.font.size = 16
  566.         bitmap.font.color.set(0, 0, 0)
  567.         bitmap.draw_text(-1, -1, 160, 20, "重击", 1)
  568.         bitmap.draw_text(+1, -1, 160, 20, "重击", 1)
  569.         bitmap.draw_text(-1, +1, 160, 20, "重击", 1)
  570.         bitmap.draw_text(+1, +1, 160, 20, "重击", 1)
  571.         bitmap.font.color.set(255, 255, 255)
  572.         bitmap.draw_text(0, 0, 160, 20, "重击", 1)
  573.       end
  574.       @_damage_sprite = ::Sprite.new(self.viewport)
  575.       @_damage_sprite.bitmap = bitmap
  576.       @_damage_sprite.ox = 80
  577.       @_damage_sprite.oy = 20
  578.       @_damage_sprite.x = self.x
  579.       @_damage_sprite.x -= self.bitmap.width/2 if @battler.is_a?(Game_Actor)
  580.       @_damage_sprite.y = self.y - self.oy / 2
  581.       @_damage_sprite.z = 3000
  582.       @_damage_duration = 40
  583.     end
  584.   end
  585. end
复制代码

系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~

生命即是责任。自己即是世界。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

綾川司の姫様<

梦石
0
星屑
50
在线时间
796 小时
注册时间
2007-12-20
帖子
4520

贵宾第3届短篇游戏大赛R剧及RMTV组亚军

6
发表于 2008-2-9 17:44:34 | 只看该作者
下半截……{/gg}

  1. module RPG
  2. #--------------------------------------------------------------------------
  3. # ● 常量设定
  4. #--------------------------------------------------------------------------
  5. # 是否显示总伤害
  6. SHOW_TOTAL_DAMAGE = true
  7. # 角色受攻击时是否跳一下
  8. BATTLER_JUMP = true

  9. class Sprite < ::Sprite
  10.    #==========================================
  11.    # 修改说明:
  12.    # @flash_shake用来制作挨打时候跳跃
  13.    # @_damage    用来记录每次打击之后弹出数字
  14.    # @_total_damage 记录总伤害
  15.    # @_total_damage_duration 总伤害持续帧
  16.    #==========================================
  17.    #alias 66RPG_rainbow_initialize : initialize
  18.    def initialize(viewport = nil)
  19.      #66RPG_rainbow_initialize(viewport)
  20.      super(viewport)
  21.      @_whiten_duration = 0
  22.      @_appear_duration = 0
  23.      @_escape_duration = 0
  24.      @_collapse_duration = 0
  25.      @_damage_duration = 0
  26.      @_animation_duration = 0
  27.      @_blink = false
  28.      # 挨打时候跳跃
  29.      @flash_shake = 0
  30.      # 伤害记录数组
  31.      @_damage = []
  32.      # 总伤害数字
  33.      @_total_damage = 0
  34.      # 总伤害持续帧
  35.      @_total_damage_duration = 0
  36.      #.........................................................................
  37.      @hits = 0
  38.      #.........................................................................
  39.    end
  40.    def damage(value, critical)
  41.      #.........................................................................
  42.      #清除hit数
  43.      dispose_hit
  44.      #.........................................................................
  45.      if value.is_a?(Numeric)
  46.        damage_string = value.abs.to_s
  47.      else
  48.        damage_string = value.to_s
  49.      end
  50.      bitmap = Bitmap.new(160, 48)
  51.      bitmap.font.name = "隶书"
  52.      bitmap.font.size = 24
  53.      bitmap.font.color.set(0, 0, 0)
  54.      bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  55.      bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  56.      bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  57.      bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  58.      #=======================================
  59.      # 修改:颜色
  60.      #=======================================
  61.      if value.is_a?(Numeric) and value < 0
  62.        bitmap.font.color.set(176, 255, 144)
  63.      else
  64.        bitmap.font.color.set(255, 55, 55)
  65.      end
  66.      bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  67.      if critical
  68.        bitmap.font.size = 16
  69.        bitmap.font.color.set(0, 0, 0)
  70.        bitmap.draw_text(-1, -1, 160, 20, "重击", 1)
  71.        bitmap.draw_text(+1, -1, 160, 20, "重击", 1)
  72.        bitmap.draw_text(-1, +1, 160, 20, "重击", 1)
  73.        bitmap.draw_text(+1, +1, 160, 20, "重击", 1)
  74.        bitmap.font.color.set(255, 255, 255)
  75.        bitmap.draw_text(0, 0, 160, 20, "重击", 1)
  76.      end
  77.      @_damage_sprite = ::Sprite.new#(self.viewport)
  78.      @_damage_sprite.bitmap = bitmap
  79.      @_damage_sprite.ox = 80
  80.      @_damage_sprite.oy = 20
  81.      @_damage_sprite.x = self.x
  82.      @_damage_sprite.y = self.y - self.oy / 2
  83.      @_damage_sprite.z = 3000
  84.      @_damage_duration = 40
  85.      #=======================================
  86.      # 修改:推入新的伤害
  87.      #=======================================
  88.      @_damage.push([@_damage_sprite,@_damage_duration-10,0, rand(30) - 15, rand(3)])
  89.      # 总伤害处理
  90.      make_total_damage(value)
  91.    end
  92.    #--------------------------------------------------------------------------
  93.    # ● 返回 @hits
  94.    #--------------------------------------------------------------------------
  95.    def get_hit
  96.      return @hits
  97.    end
  98.    #--------------------------------------------------------------------------
  99.    # ● hit数的美化描绘
  100.    #--------------------------------------------------------------------------
  101.    #..........................................................................
  102.    def hit
  103.      # 如果伤害值是数值
  104.      # 转为字符串
  105.      value=@hits
  106.      hits_string = value.to_s
  107.      # 初始化位图
  108.      bitmap = Bitmap.new(320, 64)
  109.      bitmap.font.name = "隶书"
  110.      bitmap.font.size = 26
  111.      # 分割伤害值字符串
  112.      hits_array = hits_string.scan(/./)
  113.      hits_x = - 36.2#hits_string.size * 18.1 # 81 - hits_string.size * 18.1
  114.      rect_y = 0
  115.      # 循环伤害值字符串
  116.      for char in hits_array
  117.        # 后移一位
  118.        hits_x += 36.2
  119.        number = char.to_i
  120.        # 显示伤害数字
  121.        bitmap.blt(hits_x, 0, RPG::Cache.picture("Number"),
  122.        Rect.new(number * 36.2, rect_y, 36.2, 50))
  123.      end
  124.      hits_x += 18.1
  125.      bitmap.blt(hits_x, 0, RPG::Cache.picture("HITS"),
  126.                 Rect.new(0, -21, 90, 50))
  127.      # 伤害值定位
  128.      @_hits_sprite = ::Sprite.new(self.viewport)
  129.      @_hits_sprite.bitmap = bitmap
  130.      @_hits_sprite.x = 560 - hits_string.size * 36.2
  131.      @_hits_sprite.y = 70
  132.      @_hits_sprite.z = 3000
  133.      @_hits_duration = 40
  134.    end
  135.    #..........................................................................
  136.    #--------------------------------------------------------------------------
  137.    # ● 总伤害处理
  138.    #--------------------------------------------------------------------------
  139.    def make_total_damage(value)
  140.      if value.is_a?(Numeric) and SHOW_TOTAL_DAMAGE
  141.        @_total_damage += value
  142.      else
  143.        return
  144.      end
  145.      bitmap = Bitmap.new(300, 150)
  146.      bitmap.font.name = "隶书"
  147.      bitmap.font.size = 36
  148.      bitmap.font.color.set(0, 0, 0)
  149.      bitmap.draw_text(+2, 12+2, 160, 36, @_total_damage.abs.to_s, 1)
  150.      if @_total_damage < 0
  151.        bitmap.font.color.set(80, 255, 00)
  152.      else
  153.        bitmap.font.color.set(255, 140, 0)
  154.      end
  155.      bitmap.draw_text(0, 12, 160, 36, @_total_damage.abs.to_s, 1)
  156.      if @_total_damage_sprite.nil?
  157.        @_total_damage_sprite = ::Sprite.new#(self.viewport)
  158.        @_total_damage_sprite.ox = 80
  159.        @_total_damage_sprite.oy = 20
  160.        @_total_damage_sprite.z = 3000
  161.      end
  162.      @_total_damage_sprite.bitmap = bitmap
  163.      @_total_damage_sprite.zoom_x = 1.5
  164.      @_total_damage_sprite.zoom_y = 1.5
  165.      @_total_damage_sprite.x = self.x
  166.      @_total_damage_sprite.y = self.y  - self.oy / 2 - 64
  167.      @_total_damage_sprite.z = 3001
  168.      #.........................................................................
  169.      @_total_damage_duration = 40
  170.      #.........................................................................
  171.      #.........................................................................
  172.      #hit数描绘
  173.      @hits+=1
  174.      hit
  175.      #.........................................................................
  176.    end
  177.    def animation(animation, hit, battler_damage="", battler_critical=false)
  178.      dispose_animation      
  179.      #=======================================
  180.      # 修改:记录伤害和critical
  181.      #=======================================
  182.      @battler_damage = battler_damage
  183.      @battler_critical = battler_critical
  184.      @_animation = animation
  185.      return if @_animation == nil
  186.      @_animation_hit = hit
  187.      @_animation_duration = @_animation.frame_max
  188.      animation_name = @_animation.animation_name
  189.      animation_hue = @_animation.animation_hue
  190.      bitmap = RPG::Cache.animation(animation_name, animation_hue)
  191.      #=======================================
  192.      # 修改:计算总闪光权限值
  193.      #=======================================
  194.      for timing in @_animation.timings
  195.        quanzhong = animation_process_timing(timing, @_animation_hit,true)
  196.        @all_quanzhong += quanzhong
  197.        # 记录最后一次闪光
  198.        @_last_frame = timing.frame if quanzhong != 0
  199.      end
  200.      #.........................................................................
  201.      @last_frame = @_last_frame
  202.      #.........................................................................
  203.      if @@_reference_count.include?(bitmap)
  204.        @@_reference_count[bitmap] += 1
  205.      else
  206.        @@_reference_count[bitmap] = 1
  207.      end
  208.      #=======================================
  209.      # 修改:行动方动画不显示伤害
  210.      #=======================================
  211.      if $scene.is_a?(Scene_Battle)
  212.        if $scene.animation1_id == @battler.animation_id
  213.          @battler_damage = ""
  214.        end
  215.      end
  216.      @_animation_sprites = []
  217.      if @_animation.position != 3 or not @@_animations.include?(animation)
  218.        for i in 0..15
  219.          sprite = ::Sprite.new(self.viewport)
  220.          sprite.bitmap = bitmap
  221.          sprite.visible = false
  222.          @_animation_sprites.push(sprite)
  223.        end
  224.        unless @@_animations.include?(animation)
  225.          @@_animations.push(animation)
  226.        end
  227.      end
  228.      update_animation
  229.    end
  230.    #=======================================
  231.    # 修改:更换清除伤害的算法,以防万一
  232.    #       本内容在脚本中没有使用过
  233.    #=======================================
  234.    def dispose_damage
  235.      for damage in @_damage.reverse
  236.        damage[0].bitmap.dispose
  237.        damage[0].dispose
  238.        @_damage.delete(damage)
  239.      end
  240.      @_total_damage = 0
  241.      @_last_frame = -1
  242.      if @_total_damage_sprite != nil
  243.        @_total_damage_duration = 0
  244.        @_total_damage_sprite.bitmap.dispose
  245.        @_total_damage_sprite.dispose
  246.        @_total_damage_sprite = nil
  247.      end
  248.    end
  249.    #=======================================
  250.    # 清除hit数
  251.    #=======================================
  252.    #...........................................................................
  253.    def dispose_hit
  254.      if @_hits_sprite != nil
  255.        @_hits_sprite.bitmap.dispose
  256.        @_hits_sprite.dispose
  257.        @_hits_sprite = nil
  258.      end
  259.    end
  260.    #...........................................................................
  261.    def dispose_animation
  262.      #=======================================
  263.      # 修改:清除记录的伤害,清除权重记录
  264.      #=======================================
  265.      @battler_damage = nil
  266.      @battler_critical = nil
  267.      @all_quanzhong = 1
  268.      @_total_damage = 0
  269.      @_last_frame = -1
  270.      #.........................................................................
  271.      @hits = 0
  272.      #.........................................................................
  273.      if @_animation_sprites != nil
  274.        sprite = @_animation_sprites[0]
  275.        if sprite != nil
  276.          @@_reference_count[sprite.bitmap] -= 1
  277.          if @@_reference_count[sprite.bitmap] == 0
  278.            sprite.bitmap.dispose
  279.          end
  280.        end
  281.        for sprite in @_animation_sprites
  282.          sprite.dispose
  283.        end
  284.        @_animation_sprites = nil
  285.        @_animation = nil
  286.      end
  287.    end
  288.    def update
  289.      super
  290.      if @_whiten_duration > 0
  291.        @_whiten_duration -= 1
  292.        self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  293.      end
  294.      if @_appear_duration > 0
  295.        @_appear_duration -= 1
  296.        self.opacity = (16 - @_appear_duration) * 16
  297.      end
  298.      if @_escape_duration > 0
  299.        @_escape_duration -= 1
  300.        self.opacity = 256 - (32 - @_escape_duration) * 10
  301.      end
  302.      if @_collapse_duration > 0
  303.        @_collapse_duration -= 1
  304.        self.opacity = 256 - (48 - @_collapse_duration) * 6
  305.      end
  306.      #=======================================
  307.      # 修改:更新算法,更新弹出
  308.      #=======================================
  309.      if @_damage_duration > 0
  310.        @_damage_duration -= 1
  311.        for damage in @_damage
  312.          damage[0].x = self.x + self.viewport.rect.x -
  313.                        self.ox + self.src_rect.width / 2 +
  314.                        (40 - damage[1]) * damage[3] / 10
  315.          damage[0].y -= damage[4]+damage[1]/10
  316.          damage[0].opacity = damage[1]*20
  317.          damage[1] -= 1
  318.          if damage[1]==0
  319.            damage[0].bitmap.dispose
  320.            damage[0].dispose
  321.            @_damage.delete(damage)
  322.            next
  323.          end
  324.        end
  325.      end
  326.      #=======================================
  327.      # 添加:弹出总伤害
  328.      #=======================================
  329.      if @_total_damage_duration > 0
  330.        @_total_damage_duration -= 1
  331.        @_total_damage_sprite.y -= 1 if @_total_damage_duration % 2 == 0
  332.        if @_total_damage_sprite.zoom_x > 1.0
  333.          @_total_damage_sprite.zoom_x -= 0.05
  334.        end
  335.        if @_total_damage_sprite.zoom_y > 1.0
  336.          @_total_damage_sprite.zoom_y -= 0.05
  337.        end
  338.        @_total_damage_sprite.opacity = 256 - (24 - @_total_damage_duration) * 16
  339.        #......................................................................
  340.        if @_total_damage_duration <= 7 and @_total_damage_duration > 0
  341.          @_hits_sprite.opacity -= 32
  342.          @_hits_sprite.x += 1
  343.        end
  344.        #......................................................................
  345.        if @_total_damage_duration <= 0
  346.          #.....................................................................
  347.          dispose_hit
  348.          #.....................................................................
  349.          @_total_damage = 0
  350.          @_total_damage_duration = 0
  351.          @_total_damage_sprite.bitmap.dispose
  352.          @_total_damage_sprite.dispose
  353.          @_total_damage_sprite = nil
  354.        end
  355.      end
  356.      #=======================================
  357.      if @_animation != nil and (Graphics.frame_count % 2 == 0)
  358.        @_animation_duration -= 1
  359.        update_animation
  360.      end
  361.      if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  362.        update_loop_animation
  363.        @_loop_animation_index += 1
  364.        #......................................................................
  365.        @loop_animation_once = 0
  366.        @loop_animation_once = 1 if @once == 1 and @_loop_animation_index == @_loop_animation.frame_max
  367.        #......................................................................
  368.        @_loop_animation_index %= @_loop_animation.frame_max
  369.      end
  370.      if @_blink
  371.        @_blink_count = (@_blink_count + 1) % 32
  372.        if @_blink_count < 16
  373.          alpha = (16 - @_blink_count) * 6
  374.        else
  375.          alpha = (@_blink_count - 16) * 6
  376.        end
  377.        self.color.set(255, 255, 255, alpha)
  378.      end
  379.      @@_animations.clear
  380.    end
  381.    #..........................................................................
  382.    def loop_animation_once
  383.      return @_loop_animation_once
  384.    end
  385.    #..........................................................................
  386.    def update_animation
  387.      if @_animation_duration > 0
  388.        frame_index = @_animation.frame_max - @_animation_duration
  389.        @frame_index = frame_index
  390.        cell_data = @_animation.frames[frame_index].cell_data
  391.        position = @_animation.position
  392.        animation_set_sprites(@_animation_sprites, cell_data, position)
  393.        #=======================================
  394.        # 修改:弹出伤害,权重计算
  395.        #=======================================
  396.        for timing in @_animation.timings
  397.          if timing.frame == frame_index
  398.            t = 1.0 * animation_process_timing(timing, @_animation_hit)            
  399.            #p t,"当前权重", @all_quanzhong,"总权重"
  400.            if @battler_damage.is_a?(Numeric) and t != 0
  401.              t *= @battler_damage
  402.              t /= @all_quanzhong
  403.              #p t,"当前伤害",@battler_damage,"总伤害"
  404.              t = t.to_i
  405.              # 最后一次闪光的话,伤害修正
  406.              if frame_index == @_last_frame
  407.                @_total_damage = @battler_damage - t
  408.              end
  409.              #p t,@battler_damage,@all_quanzhong
  410.              damage(t,@battler_critical)
  411.            # 防止重复播放miss
  412.            elsif !@battler_damage.is_a?(Numeric) and timing.flash_scope != 0
  413.              damage(@battler_damage,@battler_critical)
  414.            end
  415.          end
  416.        end
  417.      else
  418.        dispose_animation
  419.      end
  420.    end
  421.    #=======================================
  422.    # 修改:敌人跳跃的功能 + 添加返回数值
  423.    #=======================================
  424.    def update_loop_animation
  425.      frame_index = @_loop_animation_index
  426.      cell_data = @_loop_animation.frames[frame_index].cell_data
  427.      position = @_loop_animation.position
  428.      #·改·
  429.      if @wait_count.to_i <= 0
  430.        @wait_count = 0
  431.        animation_set_sprites(@_loop_animation_sprites, cell_data, position)
  432.      else
  433.        @wait_count -= 1
  434.        for sprite in @_loop_animation_sprites
  435.          sprite.visible = false
  436.        end
  437.      end
  438.      if @wait_flash.to_i <= 0
  439.        @wait_flash = 0
  440.      else
  441.        @wait_flash -= 1
  442.        for sprite in @_loop_animation_sprites
  443.          sprite.blend_type = 1
  444.        end
  445.      end
  446.      #·改·
  447.      for timing in @_loop_animation.timings
  448.        if timing.frame == frame_index
  449.          animation_process_timing(timing, true)
  450.        end
  451.      end
  452.    end
  453.    #=======================================
  454.    # 修改:敌人跳跃的功能 + 添加返回数值
  455.    #=======================================
  456.    def loop_animation(animation)
  457.      return if animation == @_loop_animation
  458.      dispose_loop_animation
  459.      @_loop_animation = animation
  460.      return if @_loop_animation == nil
  461.      @_loop_animation_index = 0
  462.      animation_name = @_loop_animation.animation_name
  463.      animation_hue = @_loop_animation.animation_hue
  464.      bitmap = RPG::Cache.animation(animation_name, animation_hue)
  465.      if @@_reference_count.include?(bitmap)
  466.        @@_reference_count[bitmap] += 1
  467.      else
  468.        @@_reference_count[bitmap] = 1
  469.      end
  470.      @_loop_animation_sprites = []
  471.      for i in 0..15
  472.        sprite = ::Sprite.new
  473.        sprite.bitmap = bitmap
  474.        sprite.visible = false
  475.        @_loop_animation_sprites.push(sprite)
  476.      end
  477.      update_loop_animation
  478.    end
  479.    #=======================================
  480.    # 修改:敌人跳跃的功能 + 添加返回数值
  481.    #=======================================
  482.     def animation_process_timing(timing, hit,dontflash=false)
  483.       if (timing.condition == 0) or
  484.          (timing.condition == 1 and hit == true) or
  485.          (timing.condition == 2 and hit == false)
  486.         unless dontflash
  487.           if timing.se.name != ""
  488.             se = timing.se
  489.             Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
  490.           end
  491.         end
  492.         case timing.flash_scope
  493.         when 1
  494.           unless dontflash
  495.             self.flash(timing.flash_color, timing.flash_duration * 2)
  496.             #....................................................................
  497.             @wait_flash = timing.flash_duration
  498.             #....................................................................
  499.             if @_total_damage >0
  500.               @flash_shake_switch = true
  501.               @flash_shake = 10
  502.             end
  503.           end
  504.           return timing.flash_color.alpha * timing.flash_duration
  505.         when 2
  506.           unless dontflash
  507.             if self.viewport != nil
  508.               self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
  509.               return timing.flash_color.alpha * timing.flash_duration
  510.             end
  511.           end
  512.         when 3
  513.           unless dontflash
  514.             self.flash(nil, timing.flash_duration * 2)
  515.             #@_loop_animation_count = 1
  516.             #·改·
  517.             @wait_count = timing.flash_duration
  518.             #·改·
  519.           end
  520.           return timing.flash_color.alpha * timing.flash_duration
  521.         end
  522.       end      
  523.       return 0
  524.     end   
  525. end
  526. end
  527. #==============================================================================
  528. # ■ Sprite_Battler
  529. #==============================================================================
  530. class Sprite_Battler < RPG::Sprite
  531. #--------------------------------------------------------------------------
  532. # ● 初始化对像
  533. #    添加跳跃记录
  534. #--------------------------------------------------------------------------
  535. def initialize(viewport, battler = nil)
  536.   super(viewport)
  537.   @battler = battler
  538.   @battler_visible = false
  539.   @flash_shake_switch = true
  540.   #........................................................................
  541.   @once = 0
  542.   @frame_index = -1
  543.   @last_frame = 0
  544.   #........................................................................
  545. end
  546. #--------------------------------------------------------------------------
  547. # ● 刷新画面
  548. #    增添跳跃功能
  549. #--------------------------------------------------------------------------
  550. def update
  551.   super
  552.   # 战斗者为 nil 的情况下
  553.   if @battler == nil
  554.     self.bitmap = nil
  555.     loop_animation(nil)
  556.     return
  557.   end
  558.   # 文件名和色相与当前情况有差异的情况下
  559.   if @battler.battler_name != @battler_name or
  560.      @battler.battler_hue != @battler_hue
  561.     # 获取、设置位图
  562.     @battler_name = @battler.battler_name
  563.     @battler_hue = @battler.battler_hue
  564.     self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  565.     #.......................................................................
  566.     if not @battler.hidden and not @battler.dead?
  567.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  568.     end
  569.     #.......................................................................
  570.     @width = bitmap.width
  571.     @height = bitmap.height
  572.     self.ox = @width / 2
  573.     self.oy = @height
  574.   end
  575.   #.......................................................................
  576.   update_actor_animation
  577.   update_enemy_animation
  578.   #.......................................................................
  579.   # 动画 ID 与当前的情况有差异的情况下
  580.   #.........................................................................
  581.   if @battler.is_a?(Game_Enemy)
  582.     if @once == 1 and @loop_animation_once == 1 and
  583.        @battler.battler_dead_ani == 1
  584.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[5])
  585.     elsif @once == 1 and @loop_animation_once == 1 and $scene.phase != 5
  586.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  587.     end
  588.   end
  589.   if @battler.is_a?(Game_Actor)
  590.     ####################################################################
  591.     if @once == 1 and @loop_animation_once == 1 and $scene.phase != 5 and
  592.        @battler.battler_dead_ani == 1 and @battler.dead?
  593.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[5])
  594.     #######################################################################
  595.     elsif @once == 1 and @loop_animation_once == 1 and $scene.phase != 5
  596.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  597.       #################################################################
  598.       $fangyu = 0
  599.       @battler.setup_battler_dead_ani(0)
  600.       ########################################################
  601.     elsif @once == 1 and @loop_animation_once == 1 and $scene.phase == 5 and
  602.           not @battler.dead?
  603.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[7])
  604.       ######################################################
  605.       $fangyu = 0
  606.       @battler.setup_battler_dead_ani(0)
  607.       ######################################################
  608.     end
  609.   end
  610.   if @battler.battler_ani != @battler_ani
  611.     @battler_ani = @battler.battler_ani
  612.     @once = @battler.battler_ani_once
  613.     loop_animation($data_animations[@battler_ani.to_i])
  614.   end
  615.   #.........................................................................
  616.   # 应该被显示的角色的情况下
  617. #if @battler.is_a?(Game_Actor) and @battler_visible
  618.     # 不是主状态的时候稍稍降低点透明度
  619.   #  if $game_temp.battle_main_phase
  620.   #    self.opacity += 10 if self.opacity < 255
  621.   #  else
  622.   #    self.opacity -= 10 if self.opacity > 207
  623. #   end
  624. # end
  625.   # 明灭
  626.   if @battler.blink
  627.     blink_on
  628.   else
  629.     blink_off
  630.   end
  631.   # 不可见的情况下
  632.   unless @battler_visible
  633.     # 出现
  634.     if not @battler.hidden and not @battler.dead? and
  635.        (@battler.damage == nil or @battler.damage_pop)
  636.       #.......................................................................
  637.       if @battler.is_a?(Game_Enemy)
  638.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  639.         #appear
  640.       else
  641.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  642.       end
  643.       #.......................................................................
  644.       @battler_visible = true
  645.     end
  646.   end
  647.   # 可见的情况下
  648.   if @battler_visible
  649.     # 逃跑
  650.     if @battler.hidden
  651.       $game_system.se_play($data_system.escape_se)
  652.       escape
  653.       @battler_visible = false
  654.     end
  655.     # 白色闪烁
  656.     if @battler.white_flash
  657.       whiten
  658.       @battler.white_flash = false
  659.     end
  660.     # 动画
  661.     if @battler.animation_id != 0
  662.       animation = $data_animations[@battler.animation_id]
  663.       animation(animation, @battler.animation_hit,@battler.damage, @battler.critical)
  664.       @battler.animation_id = 0
  665.     end
  666.     # 伤害
  667.     if @battler.damage_pop
  668.       @battler.damage = nil
  669.       @battler.critical = false
  670.       @battler.damage_pop = false
  671.     end
  672.     # korapusu
  673.     if @battler.damage == nil and @battler.dead?
  674.       if @battler.is_a?(Game_Enemy)
  675.         if @battler.battler_dead_ani != 1
  676.           #p "Battler Death Error"
  677.           $game_system.se_play($data_system.enemy_collapse_se)
  678.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  679.           @battler.setup_battler_dead_ani(1)
  680.         end
  681.         #.....................................................................
  682.         collapse
  683.         #.....................................................................
  684.       else
  685.         #.....................................................................
  686.         if @battler.battler_dead_ani != 1
  687.           #p "Battler Death Error"
  688.           $game_system.se_play($data_system.enemy_collapse_se)
  689.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  690.           @battler.setup_battler_dead_ani(1)
  691.         end
  692.         #.....................................................................
  693.       end
  694.       @battler_visible = false
  695.     end
  696.   end
  697.   # 设置活动块的坐标
  698.   if @flash_shake_switch == true
  699.     self.x = @battler.screen_x
  700.     self.y = @battler.screen_y
  701.     self.z = @battler.screen_z
  702.     @flash_shake_switch = false
  703.   end
  704.   if @flash_shake != 0 and @battler.damage != nil and RPG::BATTLER_JUMP
  705.     if @battler.is_a?(Game_Enemy)
  706.       case @flash_shake
  707.       when 9..10
  708.         self.x -=4
  709.         self.y -=4
  710.         self.z = @battler.screen_z
  711.       when 6..8
  712.         self.x -=2
  713.         self.y -=2
  714.         self.z = @battler.screen_z
  715.       when 3..5
  716.         self.x +=2
  717.         self.y +=2
  718.         self.z = @battler.screen_z
  719.       when 1..2
  720.         self.x +=4
  721.         self.y +=4
  722.         self.z = @battler.screen_z
  723.       end
  724.     end
  725.     if @battler.is_a?(Game_Actor)
  726.       case @flash_shake
  727.       when 9..10
  728.         self.x +=4
  729.         self.y +=4
  730.         self.z = @battler.screen_z
  731.       when 6..8
  732.         self.x +=2
  733.         self.y +=2
  734.         self.z = @battler.screen_z
  735.       when 3..5
  736.         self.x -=2
  737.         self.y -=2
  738.         self.z = @battler.screen_z
  739.       when 1..2
  740.         self.x -=4
  741.         self.y -=4
  742.         self.z = @battler.screen_z
  743.       end
  744.     end
  745.     @flash_shake -= 1
  746.   end
  747. end
  748. end

  749. #==============================================================================
  750. # ■ Scene_Battle
  751. #------------------------------------------------------------------------------
  752. #  处理战斗画面的类。
  753. #==============================================================================

  754. class Scene_Battle
  755. #--------------------------------------------------------------------------
  756. # ● 定义实例变量
  757. #--------------------------------------------------------------------------
  758. attr_reader   :animation1_id                    # 行动方动画ID
  759. end
  760. class Sprite_Battler < RPG::Sprite
  761.   #--------------------------------------------------------------------------
  762.   # ● 处理角色动作
  763.   #--------------------------------------------------------------------------
  764.   def update_actor_animation
  765.     if @battler.is_a?(Game_Actor)
  766.       if @battler.show_damage_value != nil
  767.         self.damage(@battler.show_damage_value, false)
  768.         @battler.show_damage(nil)
  769.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1)
  770.         @battler.setup_battler_hurt_ani(1)
  771.       end
  772.       if @battler.current_action.kind == 0 and @battler.current_action.basic == 1
  773.         ######################################################################
  774.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  775.           @battler.setup_battler_hurt_ani(1)
  776.         ####################################################################
  777.       else
  778.         if @hits == 1 and not @battler.dead? and @battler.battler_hurt_ani != 1 and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and $fangyu != 1
  779.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1)
  780.           @battler.setup_battler_hurt_ani(1)
  781.         ########################################################################
  782.         elsif @hits == 1 and not @battler.dead? and @battler.battler_hurt_ani != 1 and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and $fangyu == 1
  783.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  784.           @battler.setup_battler_hurt_ani(1)
  785.           #################################################################
  786.         elsif @frame_index == @last_frame and @battler.dead? and @battler.battler_dead_ani != 1
  787.        #   for actor in $game_party.actors
  788.        #     if @battler != actor
  789.        #       actor.add_state(6)
  790.        #     end
  791.        #   end
  792.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  793.           @battler.setup_battler_dead_ani(1)
  794.         elsif $scene.phase == 5 and @once == 0 and @battler_name != nil and not @battler.hidden and not @battler.dead?
  795.              @once = 1
  796.              @battler.setup_battler_ani(@battler_name.split(/★/)[6], 1)
  797.         end
  798.       end
  799.     end
  800.   end
  801.   #--------------------------------------------------------------------------
  802.   # ● 处理敌人动作
  803.   #--------------------------------------------------------------------------
  804.   def update_enemy_animation
  805.     if @battler.is_a?(Game_Enemy)
  806.       if @battler.show_damage_value != nil
  807.         self.damage(@battler.show_damage_value, false)
  808.         @battler.show_damage(nil)
  809.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1)
  810.         @battler.setup_battler_hurt_ani(1)
  811.       end
  812.       if @battler.current_action.kind == 0 and @battler.current_action.basic == 1
  813.       else
  814.         if @hits == 1 and not @battler.dead? and @battler.battler_hurt_ani != 1 and @battler.damage.is_a?(Numeric) and @battler.damage > 0
  815.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1)
  816.           @battler.setup_battler_hurt_ani(1)
  817.         elsif @frame_index == @last_frame and @battler.dead? and @battler.battler_dead_ani != 1
  818.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  819.           @battler.setup_battler_dead_ani(1)
  820.           collapse
  821.         end
  822.       end
  823.     end
  824.   end
  825. end
复制代码

生命即是责任。自己即是世界。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-1-26
帖子
206
7
 楼主| 发表于 2008-2-9 17:53:09 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-3 06:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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