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

Project1

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

17VIP帮忙改个脚本[事件显示多个动画]的

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2005-10-26
帖子
144
跳转到指定楼层
1
发表于 2007-8-11 04:23:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
这个…我对显示类的脚本头疼…
1-原效果
  当在事件中显示动画时移动,动画跟随地图的不紧凑,在移动时,过了一小会时间 动画显示才跟随那个事件移动(不是主角,因为如果是主角的话,动画就不会相对屏幕作运动…)

2-改动效果
  希望动画相对屏幕移动时流畅,就像把这个脚本删掉后,让一个事件显示动画,角色再移动一样…但又要有多动画显示的功能,所以不能删…

3-希望这个问题不是RM引擎的问题,否则就郁闷了,因为视觉的缘故,当其他事件身上有动画,角色移动时,如果你注意到了那个动画,会有卡的感觉,但其实是不卡的 只是动画移动跟不上屏幕移动的速度,让你产生这样的感觉…

4-希望有达人能帮忙解决,目前的全部VIP用于感谢了!

脚本:
http://rpg.blue/web/htm/news572.htm
在下唯一完整版Game完成…死而无憾了!

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2005-10-26
帖子
144
2
 楼主| 发表于 2007-8-11 04:23:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
这个…我对显示类的脚本头疼…
1-原效果
  当在事件中显示动画时移动,动画跟随地图的不紧凑,在移动时,过了一小会时间 动画显示才跟随那个事件移动(不是主角,因为如果是主角的话,动画就不会相对屏幕作运动…)

2-改动效果
  希望动画相对屏幕移动时流畅,就像把这个脚本删掉后,让一个事件显示动画,角色再移动一样…但又要有多动画显示的功能,所以不能删…

3-希望这个问题不是RM引擎的问题,否则就郁闷了,因为视觉的缘故,当其他事件身上有动画,角色移动时,如果你注意到了那个动画,会有卡的感觉,但其实是不卡的 只是动画移动跟不上屏幕移动的速度,让你产生这样的感觉…

4-希望有达人能帮忙解决,目前的全部VIP用于感谢了!

脚本:
http://rpg.blue/web/htm/news572.htm
在下唯一完整版Game完成…死而无憾了!

Lv1.梦旅人

空靈

梦石
0
星屑
50
在线时间
11 小时
注册时间
2006-7-27
帖子
521
3
发表于 2007-8-11 04:29:30 | 只看该作者
话说筒子....你有那么多VIP?{/fd}

星星在哪里都是很亮的,就看你有沒有抬頭去看他們                       --------華麗麗的百變暖暖窩
本人之作《夙誓》龜速進行中。。= =!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
451
在线时间
127 小时
注册时间
2006-11-2
帖子
1200
4
发表于 2007-8-11 04:34:21 | 只看该作者
以下引用天天于2007-8-10 20:29:30的发言:

话说筒子....你有那么多VIP?

已扣除放进悬赏了。


刚才去测试了一下,没有发现楼主所说的问题(是偶太缺乏观察力?{/gg}), 使用的是默认的发动特技,治疗和土1三个动画。 也许楼主是碰到了这个问题,http://rpg.blue/web/htm/news217.htm 由于动画文件过大,N个同时读取造成读取时卡一下,所以跟不上人物移动吧。
以上纯属个人推论,建议是--转到应援区。
和记忆一起封存着的ID...
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2005-10-26
帖子
144
5
 楼主| 发表于 2007-8-11 05:35:23 | 只看该作者
以下引用K’于2007-8-10 20:34:21的发言:


以下引用天天于2007-8-10 20:29:30的发言:

话说筒子....你有那么多VIP?


已扣除放进悬赏了。


刚才去测试了一下,没有发现楼主所说的问题(是偶太缺乏观察力?), 使用的是默认的发动特技,治疗和土1三个动画。 也许楼主是碰到了这个问题,http://rpg.blue/web/htm/news217.htm 由于动画文件过大,N个同时读取造成读取时卡一下,所以跟不上人物移动吧。
以上纯属个人推论,建议是--转到应援区。


首先新建两个工程,其中一个加脚本,把每个工程的3号动画改成全部显示和第4帧一样
的动画…然后把每个工程的角色初始地图改成50*50,因为默认大小 角色移动 屏幕不会动

然后都让一个事件并行处理如下
显示3号动画
等待16帧

再让角色往右或者往下移动 ,两个工程都看看 就很明显了
一个流畅
一个不太流畅

不太流畅的就是加了脚本的
在下唯一完整版Game完成…死而无憾了!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
400 小时
注册时间
2005-10-24
帖子
634
6
发表于 2007-8-16 17:25:01 | 只看该作者
修改后的多动画播放脚本:
  1. #--------------------------------------------------
  2. # 此脚本来自www.66RPG.com,使用请保留此信息
  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
  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.         # 修改:原来的是2帧更新一次,现在1帧更新一次
  117.         #if (Graphics.frame_count % 2 == 0)
  118.           anime[2] -= 1 if (Graphics.frame_count % 2 == 0)
  119.           update_animation(anime)
  120.         #end
  121.       end
  122.       if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  123.         update_loop_animation
  124.         @_loop_animation_index += 1
  125.         @_loop_animation_index %= @_loop_animation.frame_max
  126.       end
  127.       if @_blink
  128.         @_blink_count = (@_blink_count + 1) % 32
  129.         if @_blink_count < 16
  130.           alpha = (16 - @_blink_count) * 6
  131.         else
  132.           alpha = (@_blink_count - 16) * 6
  133.         end
  134.         self.color.set(255, 255, 255, alpha)
  135.       end
  136.       @@_animations.clear
  137.     end

  138.     def update_animation(anime)
  139.       if anime[2] > 0
  140.         frame_index = anime[0].frame_max - anime[2]
  141.         cell_data = anime[0].frames[frame_index].cell_data
  142.         position = anime[0].position
  143.         animation_set_sprites(anime[3], cell_data, position)
  144.         for timing in anime[0].timings
  145.           if timing.frame == frame_index
  146.             animation_process_timing(timing, anime[1])
  147.           end
  148.         end
  149.       else
  150.         @@_reference_count[anime[3][0].bitmap] -= 1
  151.         if @@_reference_count[anime[3][0].bitmap] == 0
  152.             anime[3][0].bitmap.dispose
  153.         end
  154.         for sprite in anime[3]
  155.           sprite.dispose
  156.         end
  157.         @_animation.delete(anime)
  158.       end
  159.     end
  160.     def animation_set_sprites(sprites, cell_data, position)
  161.       for i in 0..15
  162.         sprite = sprites[i]
  163.         pattern = cell_data[i, 0]
  164.         if sprite == nil or pattern == nil or pattern == -1
  165.           sprite.visible = false if sprite != nil
  166.           next
  167.         end
  168.         sprite.visible = true
  169.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  170.         if position == 3
  171.           if self.viewport != nil
  172.             sprite.x = self.viewport.rect.width / 2
  173.             if $game_temp.in_battle and self.battler.is_a?(Game_Enemy)
  174.               sprite.y = self.viewport.rect.height - 320
  175.             else
  176.               sprite.y = self.viewport.rect.height - 160
  177.             end
  178.           else
  179.             sprite.x = 320
  180.             sprite.y = 240
  181.           end
  182.         else
  183.           sprite.x = self.x + self.viewport.rect.x -
  184.                       self.ox + self.src_rect.width / 2
  185.           if $game_temp.in_battle and self.battler.is_a?(Game_Enemy)
  186.             sprite.y = self.y - self.oy * self.zoom_y / 2 +
  187.                         self.viewport.rect.y
  188.             if position == 0
  189.               sprite.y -= self.src_rect.height * self.zoom_y / 4
  190.             elsif position == 2
  191.               sprite.y += self.src_rect.height * self.zoom_y / 4
  192.             end
  193.           else
  194.             sprite.y = self.y + self.viewport.rect.y -
  195.                         self.oy + self.src_rect.height / 2
  196.             sprite.y -= self.src_rect.height / 4 if position == 0
  197.             sprite.y += self.src_rect.height / 4 if position == 2
  198.           end
  199.         end
  200.         sprite.x += cell_data[i, 1]
  201.         sprite.y += cell_data[i, 2]
  202.         sprite.z = 2000
  203.         sprite.ox = 96
  204.         sprite.oy = 96
  205.         sprite.zoom_x = cell_data[i, 3] / 100.0
  206.         sprite.zoom_y = cell_data[i, 3] / 100.0
  207.         if position != 3
  208.           sprite.zoom_x *= self.zoom_x
  209.           sprite.zoom_y *= self.zoom_y
  210.         end
  211.         sprite.angle = cell_data[i, 4]
  212.         sprite.mirror = (cell_data[i, 5] == 1)
  213.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  214.         sprite.blend_type = cell_data[i, 7]
  215.       end
  216.       
  217.       #p sprites[0].x - self.x, @_animation.size
  218.       
  219.     end
  220.   end
  221. end
复制代码

另外还需在Sprite_Character中找到def update,把下一行那个super放到这个定义的最后,也就是这样
  1. #==============================================================================
  2. # ■ Sprite_Character
  3. #------------------------------------------------------------------------------
  4. #  角色显示用脚本。监视 Game_Character 类的实例、
  5. # 自动变化脚本状态。
  6. #==============================================================================

  7. class Sprite_Character < RPG::Sprite
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_accessor :character                # 角色
  12.   #--------------------------------------------------------------------------
  13.   # ● 初始化对像
  14.   #     viewport  : 查看端口
  15.   #     character : 角色 (Game_Character)
  16.   #--------------------------------------------------------------------------
  17.   def initialize(viewport, character = nil)
  18.     super(viewport)
  19.     @character = character
  20.     update
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 更新画面
  24.   #--------------------------------------------------------------------------
  25.   def update
  26.     # 元件 ID、文件名、色相与现在的情况存在差异的情况下
  27.     if @tile_id != @character.tile_id or
  28.        @character_name != @character.character_name or
  29.        @character_hue != @character.character_hue
  30.       # 记忆元件 ID 与文件名、色相
  31.       @tile_id = @character.tile_id
  32.       @character_name = @character.character_name
  33.       @character_hue = @character.character_hue
  34.       # 元件 ID 为有效值的情况下
  35.       if @tile_id >= 384
  36.         self.bitmap = RPG::Cache.tile($game_map.tileset_name,
  37.           @tile_id, @character.character_hue)
  38.         self.src_rect.set(0, 0, 32, 32)
  39.         self.ox = 16
  40.         self.oy = 32
  41.       # 元件 ID 为无效值的情况下
  42.       else
  43.         self.bitmap = RPG::Cache.character(@character.character_name,
  44.           @character.character_hue)
  45.         @cw = bitmap.width / 4
  46.         @ch = bitmap.height / 4
  47.         self.ox = @cw / 2
  48.         self.oy = @ch
  49.       end
  50.     end
  51.     # 设置可视状态
  52.     self.visible = (not @character.transparent)
  53.     # 图形是角色的情况下
  54.     if @tile_id == 0
  55.       # 设置传送目标的矩形
  56.       sx = @character.pattern * @cw
  57.       sy = (@character.direction - 2) / 2 * @ch
  58.       self.src_rect.set(sx, sy, @cw, @ch)
  59.     end
  60.     # 设置脚本的坐标
  61.     self.x = @character.screen_x
  62.     self.y = @character.screen_y
  63.     self.z = @character.screen_z(@ch)
  64.     # 设置不透明度、合成方式、茂密
  65.     self.opacity = @character.opacity
  66.     self.blend_type = @character.blend_type
  67.     self.bush_depth = @character.bush_depth
  68.     # 动画
  69.     if @character.animation_id != 0
  70.       animation = $data_animations[@character.animation_id]
  71.       animation(animation, true)
  72.       @character.animation_id = 0
  73.     end
  74.     super
  75.   end
  76. end
复制代码

系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2005-10-26
帖子
144
7
 楼主| 发表于 2007-8-16 18:36:18 | 只看该作者
谢了,解决了…
在下唯一完整版Game完成…死而无憾了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 10:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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