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

Project1

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

[已经解决] 可不可以在一个特技里显示两个不同的动画????

 关闭 [复制链接]

Lv2.观梦者

路人

梦石
0
星屑
590
在线时间
943 小时
注册时间
2011-8-20
帖子
1011
跳转到指定楼层
1
发表于 2011-8-23 08:33:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
可以的话请哪位告诉我一下啊,嘿嘿

Lv1.梦旅人

梦石
0
星屑
50
在线时间
320 小时
注册时间
2011-6-23
帖子
260
2
发表于 2011-8-23 09:09:40 | 只看该作者
为什么一定要两个动画?
将两个动画元件拼接,用一个不就行了?
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
777
在线时间
1270 小时
注册时间
2011-2-14
帖子
5589
3
发表于 2011-8-23 09:14:47 | 只看该作者
同时显示两个动画么?
那样要对动画数据库的数据进行扩展,还要对战斗者专用精灵类进行改写(邪恶,完全不懂你在说什么)

这样,加QQ 1371455177 暗号 二重怪物
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
365
在线时间
142 小时
注册时间
2008-11-20
帖子
231
4
发表于 2011-8-23 09:20:22 | 只看该作者
两种方法:
1.简单的事件方法,把使用者动画和对象方动画改动设置,用公共事件来模拟动画,然后在公共事件里模拟自己需要的条件进行分歧,播放动画.
2.复杂的脚本方法,在Scene_Battle 4 247,248有这样写
        @animation1_id = @skill.animation1_id
        @animation2_id = @skill.animation2_id
   这是特技的使用者动画和对象方动画,可以改成
        @animation1_id = @skill.animation1_id + rand(1) #随机生成0或者1
        @animation2_id = @skill.animation2_id + rand(1) #随机生成0或者1
   所以动画就成了两个,就是你设置的动画或者是你这的动画的下一个,当然也可以特别设置某一个的,某侠不在赘述了,有问题欢迎继续提问!!
  
【RPGXP视频教学】脚本不是高手的专利 (正在更新...)
http://rpg.blue/thread-238457-1-1.html



回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
130
在线时间
0 小时
注册时间
2011-8-23
帖子
3
5
发表于 2011-8-23 09:50:21 | 只看该作者
比较难,我都没有做过呢!

点评

这是来灌水的么……  发表于 2011-8-23 20:08

评分

参与人数 1星屑 -50 收起 理由
亿万星辰 -50 灌水灌的太直接了吧……

查看全部评分

我是新手......
回复

使用道具 举报

Lv2.观梦者

路人

梦石
0
星屑
590
在线时间
943 小时
注册时间
2011-8-20
帖子
1011
6
 楼主| 发表于 2011-8-23 12:32:27 | 只看该作者
liuziyuan201019 发表于 2011-8-23 09:09
为什么一定要两个动画?
将两个动画元件拼接,用一个不就行了?

这个我试过了,但是动画的颜色会改变。


aaalbx于2011-8-23 12:34补充以下内容:
有人能拿个范例来吗
为填坑而修炼中……
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
777
在线时间
1270 小时
注册时间
2011-2-14
帖子
5589
7
发表于 2011-8-23 14:09:51 | 只看该作者
把这个脚本贴上去,然后你就知道了,现在设定是1号动画链接2号动画
  1. #=============================================================================
  2. #   设定
  3. #=============================================================================



  4. $an = { #动画编号  => [2号动画启动时机(帧),2号动画的id]
  5.         1 => [10,2]      #1号动画在第10帧启动2号动画
  6. }

  7. module RPG
  8.   class Sprite < ::Sprite
  9.     def animation(animation, hit)
  10.       dispose_animation
  11.       @_animation = animation
  12.       return if @_animation == nil
  13.       @_animation_hit = hit
  14.       @_animation_duration = @_animation.frame_max
  15.       animation_name = @_animation.animation_name
  16.       animation_hue = @_animation.animation_hue
  17.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  18.       if @@_reference_count.include?(bitmap)
  19.         @@_reference_count[bitmap] += 1
  20.       else
  21.         @@_reference_count[bitmap] = 1
  22.       end
  23.       @_animation_sprites = []
  24.       if @_animation.position != 3 or not @@_animations.include?(animation)
  25.         for i in 0..15
  26.           sprite = ::Sprite.new(self.viewport)
  27.           sprite.bitmap = bitmap
  28.           sprite.visible = false
  29.           @_animation_sprites.push(sprite)
  30.         end
  31.         unless @@_animations.include?(animation)
  32.           @@_animations.push(animation)
  33.         end
  34.       end
  35.       update_animation
  36.     end
  37.     def dispose_animation
  38.       if @_animation_sprites != nil
  39.         sprite = @_animation_sprites[0]
  40.         if sprite != nil
  41.           @@_reference_count[sprite.bitmap] -= 1
  42.           if @@_reference_count[sprite.bitmap] == 0
  43.             sprite.bitmap.dispose
  44.           end
  45.         end
  46.         for sprite in @_animation_sprites
  47.           sprite.dispose
  48.         end
  49.         @_animation_sprites = nil
  50.         @_animation = nil
  51.       end
  52.     end
  53.     def update
  54.       super
  55.       if @_whiten_duration > 0
  56.         @_whiten_duration -= 1
  57.         self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  58.       end
  59.       if @_appear_duration > 0
  60.         @_appear_duration -= 1
  61.         self.opacity = (16 - @_appear_duration) * 16
  62.       end
  63.       if @_escape_duration > 0
  64.         @_escape_duration -= 1
  65.         self.opacity = 256 - (32 - @_escape_duration) * 10
  66.       end
  67.       if @_collapse_duration > 0
  68.         @_collapse_duration -= 1
  69.         self.opacity = 256 - (48 - @_collapse_duration) * 6
  70.       end
  71.       if @_damage_duration > 0
  72.         @_damage_duration -= 1
  73.         case @_damage_duration
  74.         when 38..39
  75.           @_damage_sprite.y -= 4
  76.         when 36..37
  77.           @_damage_sprite.y -= 2
  78.         when 34..35
  79.           @_damage_sprite.y += 2
  80.         when 28..33
  81.           @_damage_sprite.y += 4
  82.         end
  83.         @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
  84.         if @_damage_duration == 0
  85.           dispose_damage
  86.         end
  87.       end
  88.       if @_animation != nil and (Graphics.frame_count % 2 == 0)
  89.         @_animation_duration -= 1
  90.         update_animation
  91.       end
  92.       if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  93.         update_loop_animation
  94.         @_loop_animation_index += 1
  95.         @_loop_animation_index %= @_loop_animation.frame_max
  96.       end
  97.       if @_blink
  98.         @_blink_count = (@_blink_count + 1) % 32
  99.         if @_blink_count < 16
  100.           alpha = (16 - @_blink_count) * 6
  101.         else
  102.           alpha = (@_blink_count - 16) * 6
  103.         end
  104.         self.color.set(255, 255, 255, alpha)
  105.       end
  106.       @@_animations.clear
  107.     end
  108.     def update_animation

  109.         frame_index = @_animation.frame_max - @_animation_duration - 1
  110.         cell_data = @_animation.frames[frame_index].cell_data
  111.         position = @_animation.position
  112.         animation_set_sprites(@_animation_sprites, cell_data, position)
  113.         for timing in @_animation.timings
  114.           if timing.frame == frame_index
  115.             animation_process_timing(timing, @_animation_hit)
  116.           end
  117.         end
  118.               if @_animation_duration > 0
  119.       if $an.include?(@_animation.id)
  120.         if $an[@_animation.id][0] == frame_index
  121.           animation22222222($data_animations[$an[@_animation.id][1]], @_animation_hit)
  122.         end
  123.       end

  124.       else
  125.         dispose_animation
  126.       end
  127.     end
  128.     def update_loop_animation
  129.       frame_index = @_loop_animation_index
  130.       cell_data = @_loop_animation.frames[frame_index].cell_data
  131.       position = @_loop_animation.position
  132.       animation_set_sprites(@_loop_animation_sprites, cell_data, position)
  133.       for timing in @_loop_animation.timings
  134.         if timing.frame == frame_index
  135.           animation_process_timing(timing, true)
  136.         end
  137.       end
  138.     end
  139.     def animation_set_sprites(sprites, cell_data, position)
  140.       for i in 0..15
  141.         sprite = sprites[i]
  142.         pattern = cell_data[i, 0]
  143.         if sprite == nil or pattern == nil or pattern == -1
  144.           sprite.visible = false if sprite != nil
  145.           next
  146.         end
  147.         sprite.visible = true
  148.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  149.         if position == 3
  150.           if self.viewport != nil
  151.             sprite.x = self.viewport.rect.width / 2
  152.             sprite.y = self.viewport.rect.height - 160
  153.           else
  154.             sprite.x = 320
  155.             sprite.y = 240
  156.           end
  157.         else
  158.           sprite.x = self.x - self.ox + self.src_rect.width / 2
  159.           sprite.y = self.y - self.oy + self.src_rect.height / 2
  160.           sprite.y -= self.src_rect.height / 4 if position == 0
  161.           sprite.y += self.src_rect.height / 4 if position == 2
  162.         end
  163.         sprite.x += cell_data[i, 1]
  164.         sprite.y += cell_data[i, 2]
  165.         sprite.z = 2000
  166.         sprite.ox = 96
  167.         sprite.oy = 96
  168.         sprite.zoom_x = cell_data[i, 3] / 100.0
  169.         sprite.zoom_y = cell_data[i, 3] / 100.0
  170.         sprite.angle = cell_data[i, 4]
  171.         sprite.mirror = (cell_data[i, 5] == 1)
  172.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  173.         sprite.blend_type = cell_data[i, 7]
  174.       end
  175.     end
  176.     def animation_process_timing(timing, hit)
  177.       
  178.       if (timing.condition == 0) or
  179.          (timing.condition == 1 and hit == true) or
  180.          (timing.condition == 2 and hit == false)
  181.         if timing.se.name != ""
  182.           se = timing.se
  183.           Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
  184.         end
  185.         case timing.flash_scope
  186.         when 1
  187.           self.flash(timing.flash_color, timing.flash_duration * 2)
  188.         when 2
  189.           if self.viewport != nil
  190.             self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
  191.           end
  192.         when 3
  193.           self.flash(nil, timing.flash_duration * 2)
  194.         end
  195.       end
  196.     end
  197.     def x=(x)
  198.       sx = x - self.x
  199.       if sx != 0
  200.         if @_animation_sprites != nil
  201.           for i in 0..15
  202.             @_animation_sprites[i].x += sx
  203.           end
  204.         end
  205.         if @_loop_animation_sprites != nil
  206.           for i in 0..15
  207.             @_loop_animation_sprites[i].x += sx
  208.           end
  209.         end
  210.       end
  211.       super
  212.     end
  213.     def y=(y)
  214.       sy = y - self.y
  215.       if sy != 0
  216.         if @_animation_sprites != nil
  217.           for i in 0..15
  218.             @_animation_sprites[i].y += sy
  219.           end
  220.         end
  221.         if @_loop_animation_sprites != nil
  222.           for i in 0..15
  223.             @_loop_animation_sprites[i].y += sy
  224.           end
  225.         end
  226.       end
  227.       super
  228.     end
  229.   end
  230. end
  231. module RPG
  232.   class Sprite < ::Sprite
  233.     @@_animation22222222s = []
  234.     @@_animations = []
  235.     @@_reference_count = {}
  236.     def initialize(viewport = nil)
  237.       super(viewport)
  238.       @_whiten_duration = 0
  239.       @_appear_duration = 0
  240.       @_escape_duration = 0
  241.       @_collapse_duration = 0
  242.       @_damage_duration = 0
  243.       @_animation22222222_duration = 0
  244.       @_animation_duration = 0
  245.       @_blink = false
  246.     end
  247.     def dispose
  248.       dispose_damage
  249.       dispose_animation22222222
  250.       dispose_animation
  251.       dispose_loop_animation
  252.       super
  253.     end
  254.     def animation22222222(animation22222222, hit)
  255.       dispose_animation22222222
  256.       @_animation22222222 = animation22222222
  257.       return if @_animation22222222 == nil
  258.       @_animation22222222_hit = hit
  259.       @_animation22222222_duration = @_animation22222222.frame_max
  260.       animation22222222_name = @_animation22222222.animation_name
  261.       animation22222222_hue = @_animation22222222.animation_hue
  262.       bitmap = RPG::Cache.animation(animation22222222_name, animation22222222_hue)
  263.       if @@_reference_count.include?(bitmap)
  264.         @@_reference_count[bitmap] += 1
  265.       else
  266.         @@_reference_count[bitmap] = 1
  267.       end
  268.       @_animation22222222_sprites = []
  269.       if @_animation22222222.position != 3 or not @@_animation22222222s.include?(animation22222222)
  270.         for i in 0..15
  271.           sprite = ::Sprite.new(self.viewport)
  272.           sprite.bitmap = bitmap
  273.           sprite.visible = false
  274.           @_animation22222222_sprites.push(sprite)
  275.         end
  276.         unless @@_animation22222222s.include?(animation22222222)
  277.           @@_animation22222222s.push(animation22222222)
  278.         end
  279.       end
  280.       update_animation22222222
  281.     end
  282.     def dispose_animation22222222
  283.       if @_animation22222222_sprites != nil
  284.         sprite = @_animation22222222_sprites[0]
  285.         if sprite != nil
  286.           @@_reference_count[sprite.bitmap] -= 1
  287.           if @@_reference_count[sprite.bitmap] == 0
  288.             sprite.bitmap.dispose
  289.           end
  290.         end
  291.         for sprite in @_animation22222222_sprites
  292.           sprite.dispose
  293.         end
  294.         @_animation22222222_sprites = nil
  295.         @_animation22222222 = nil
  296.       end
  297.     end
  298.     def update
  299.       super
  300.       if @_whiten_duration > 0
  301.         @_whiten_duration -= 1
  302.         self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  303.       end
  304.       if @_appear_duration > 0
  305.         @_appear_duration -= 1
  306.         self.opacity = (16 - @_appear_duration) * 16
  307.       end
  308.       if @_escape_duration > 0
  309.         @_escape_duration -= 1
  310.         self.opacity = 256 - (32 - @_escape_duration) * 10
  311.       end
  312.       if @_collapse_duration > 0
  313.         @_collapse_duration -= 1
  314.         self.opacity = 256 - (48 - @_collapse_duration) * 6
  315.       end
  316.       if @_damage_duration > 0
  317.         @_damage_duration -= 1
  318.         case @_damage_duration
  319.         when 38..39
  320.           @_damage_sprite.y -= 4
  321.         when 36..37
  322.           @_damage_sprite.y -= 2
  323.         when 34..35
  324.           @_damage_sprite.y += 2
  325.         when 28..33
  326.           @_damage_sprite.y += 4
  327.         end
  328.         @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
  329.         if @_damage_duration == 0
  330.           dispose_damage
  331.         end
  332.       end
  333.       if @_animation != nil and (Graphics.frame_count % 2 == 0)
  334.         @_animation_duration -= 1
  335.         update_animation
  336.       end
  337.       if @_animation22222222 != nil and (Graphics.frame_count % 2 == 0)
  338.         @_animation22222222_duration -= 1
  339.         update_animation22222222
  340.       end
  341.       if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  342.         update_loop_animation
  343.         @_loop_animation_index += 1
  344.         @_loop_animation_index %= @_loop_animation.frame_max
  345.       end
  346.       if @_blink
  347.         @_blink_count = (@_blink_count + 1) % 32
  348.         if @_blink_count < 16
  349.           alpha = (16 - @_blink_count) * 6
  350.         else
  351.           alpha = (@_blink_count - 16) * 6
  352.         end
  353.         self.color.set(255, 255, 255, alpha)
  354.       end
  355.       @@_animations.clear
  356.       @@_animation22222222s.clear
  357.     end
  358.     def update_animation22222222
  359.       if @_animation22222222_duration > 0
  360.         frame_index = @_animation22222222.frame_max - @_animation22222222_duration
  361.         cell_data = @_animation22222222.frames[frame_index].cell_data
  362.         position = @_animation22222222.position
  363.         animation22222222_set_sprites(@_animation22222222_sprites, cell_data, position)
  364.         for timing in @_animation22222222.timings
  365.           if timing.frame == frame_index
  366.             animation22222222_process_timing(timing, @_animation22222222_hit)
  367.           end
  368.         end
  369.       else
  370.         dispose_animation22222222
  371.       end
  372.     end
  373.     def animation22222222_set_sprites(sprites, cell_data, position)
  374.       for i in 0..15
  375.         sprite = sprites[i]
  376.         pattern = cell_data[i, 0]
  377.         if sprite == nil or pattern == nil or pattern == -1
  378.           sprite.visible = false if sprite != nil
  379.           next
  380.         end
  381.         sprite.visible = true
  382.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  383.         if position == 3
  384.           if self.viewport != nil
  385.             sprite.x = self.viewport.rect.width / 2
  386.             sprite.y = self.viewport.rect.height - 160
  387.           else
  388.             sprite.x = 320
  389.             sprite.y = 240
  390.           end
  391.         else
  392.           sprite.x = self.x - self.ox + self.src_rect.width / 2
  393.           sprite.y = self.y - self.oy + self.src_rect.height / 2
  394.           sprite.y -= self.src_rect.height / 4 if position == 0
  395.           sprite.y += self.src_rect.height / 4 if position == 2
  396.         end
  397.         sprite.x += cell_data[i, 1]
  398.         sprite.y += cell_data[i, 2]
  399.         sprite.z = 2000
  400.         sprite.ox = 96
  401.         sprite.oy = 96
  402.         sprite.zoom_x = cell_data[i, 3] / 100.0
  403.         sprite.zoom_y = cell_data[i, 3] / 100.0
  404.         sprite.angle = cell_data[i, 4]
  405.         sprite.mirror = (cell_data[i, 5] == 1)
  406.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  407.         sprite.blend_type = cell_data[i, 7]
  408.       end
  409.     end
  410.     def animation22222222_process_timing(timing, hit)
  411.       if (timing.condition == 0) or
  412.          (timing.condition == 1 and hit == true) or
  413.          (timing.condition == 2 and hit == false)
  414.         if timing.se.name != ""
  415.           se = timing.se
  416.           Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
  417.         end
  418.         case timing.flash_scope
  419.         when 1
  420.           self.flash(timing.flash_color, timing.flash_duration * 2)
  421.         when 2
  422.           if self.viewport != nil
  423.             self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
  424.           end
  425.         when 3
  426.           self.flash(nil, timing.flash_duration * 2)
  427.         end
  428.       end
  429.     end
  430.     def x=(x)
  431.       sx = x - self.x
  432.       if sx != 0
  433.         if @_animation22222222_sprites != nil
  434.           for i in 0..15
  435.             @_animation22222222_sprites[i].x += sx
  436.           end
  437.         end
  438.         if @_loop_animation_sprites != nil
  439.           for i in 0..15
  440.             @_loop_animation_sprites[i].x += sx
  441.           end
  442.         end
  443.       end
  444.       super
  445.     end
  446.     def effect?
  447.       @_whiten_duration > 0 or
  448.       @_appear_duration > 0 or
  449.       @_escape_duration > 0 or
  450.       @_collapse_duration > 0 or
  451.       @_damage_duration > 0 or
  452.       @_animation_duration > 0 or
  453.       @_animation22222222_duration > 0
  454.     end

  455.     def y=(y)
  456.       sy = y - self.y
  457.       if sy != 0
  458.         if @_animation22222222_sprites != nil
  459.           for i in 0..15
  460.             @_animation22222222_sprites[i].y += sy
  461.           end
  462.         end
  463.         if @_loop_animation_sprites != nil
  464.           for i in 0..15
  465.             @_loop_animation_sprites[i].y += sy
  466.           end
  467.         end
  468.       end
  469.       super
  470.     end
  471.   end
  472. end
复制代码
回复

使用道具 举报

Lv2.观梦者

路人

梦石
0
星屑
590
在线时间
943 小时
注册时间
2011-8-20
帖子
1011
8
 楼主| 发表于 2011-8-23 19:30:46 | 只看该作者
R-零 发表于 2011-8-23 14:09
把这个脚本贴上去,然后你就知道了,现在设定是1号动画链接2号动画

鄙人是个脚本盲


aaalbx于2011-8-23 19:32补充以下内容:
大虾你教一下呗
为填坑而修炼中……
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
777
在线时间
1270 小时
注册时间
2011-2-14
帖子
5589
9
发表于 2011-8-23 19:37:31 | 只看该作者
本帖最后由 R-零 于 2011-8-23 19:38 编辑
aaalbx 发表于 2011-8-23 19:30
鄙人是个脚本盲


我是水君不是大虾(话说大虾体内的色素是不是遇热就变红呢?)
你不是加号码了么,自己明天问
回复

使用道具 举报

Lv2.观梦者

路人

梦石
0
星屑
590
在线时间
943 小时
注册时间
2011-8-20
帖子
1011
10
 楼主| 发表于 2011-8-23 19:42:01 | 只看该作者
......
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-23 13:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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