Project1

标题: 请问如何让动画跟随NPC…… [打印本页]

作者: 圣痕    时间: 2008-3-24 23:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: 火鸡三毛老大    时间: 2008-3-25 05:27
的却......不过...不知道这时VX的BUG还是XP的BUG
作者: 圣痕    时间: 2008-3-25 05:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: 火鸡三毛老大    时间: 2008-3-25 06:22
以下引用圣痕于2008-3-24 21:37:45的发言:

这个是VX的…………

也许在XP这是个漏洞     制作者认为这个是好处  而日本方面认为这在XP里是个BUG
所以官方修正了   拿XP的动画方面 和VX的对比一下 看看有何不同  也许能看出来
作者: 暴风の龙    时间: 2008-3-25 06:25
我记得之前已经有高手做了一个补丁修复这个问题的了。
作者: 火鸡三毛老大    时间: 2008-3-25 06:38
  1. #==============================================================================
  2. # ■ VX_非官方补丁 1 [动画显示相关修正]    —— By 诡异の猫
  3. #------------------------------------------------------------------------------
  4. #    注意: 此补丁包括官方补丁 VX_SP1
  5. #------------------------------------------------------------------------------
  6. #    补丁内容: 修正地图上播放动画(以画面为中心除外),动画跟随画面移动问题.                                         
  7. #==============================================================================
  8. class Sprite_Base < Sprite
  9.   #--------------------------------------------------------------------------
  10.   # ● 开始播放动画
  11.   #--------------------------------------------------------------------------
  12.   def start_animation(animation, mirror = false)
  13.     dispose_animation
  14.     @animation = animation
  15.     return if @animation == nil
  16.     @animation_mirror = mirror
  17.     @animation_duration = @animation.frame_max * 4 + 1
  18.     load_animation_bitmap
  19.     @animation_sprites = []
  20.     if @animation.position != 3 or not @@animations.include?(animation)
  21.       if @use_sprite
  22.         for i in 0..15
  23.           sprite = ::Sprite.new(viewport)
  24.           sprite.visible = false
  25.           @animation_sprites.push(sprite)
  26.         end
  27.         unless @@animations.include?(animation)
  28.           @@animations.push(animation)
  29.         end
  30.       end
  31.     end
  32.     update_animation
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # ● 释放动画
  36.   #--------------------------------------------------------------------------
  37.   alias eb_sp1_dispose_animation dispose_animation
  38.   def dispose_animation
  39.     eb_sp1_dispose_animation
  40.     @animation_bitmap1 = nil
  41.     @animation_bitmap2 = nil
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 设置动画活动块
  45.   #     frame : 画面数据 (RPG::Animation::Frame)
  46.   #--------------------------------------------------------------------------
  47.   def animation_set_sprites(frame)
  48.     cell_data = frame.cell_data
  49.     for i in 0..15
  50.       sprite = @animation_sprites[i]
  51.       next if sprite == nil
  52.       pattern = cell_data[i, 0]
  53.       if pattern == nil or pattern == -1
  54.         sprite.visible = false
  55.         next
  56.       end
  57.       if pattern < 100
  58.         sprite.bitmap = @animation_bitmap1
  59.       else
  60.         sprite.bitmap = @animation_bitmap2
  61.       end
  62.       sprite.visible = true
  63.       sprite.src_rect.set(pattern % 5 * 192,
  64.         pattern % 100 / 5 * 192, 192, 192)
  65.       position = @animation.position
  66.       if position == 3
  67.         if self.viewport != nil
  68.           sprite.x = self.viewport.rect.width / 2
  69.           sprite.y = self.viewport.rect.height / 2
  70.         else
  71.           sprite.x = 272
  72.           sprite.y = 208
  73.         end
  74.       else
  75.         sprite.x = self.x - self.ox + self.src_rect.width / 2
  76.         sprite.y = self.y - self.oy + self.src_rect.height / 2
  77.         sprite.y -= self.src_rect.height / 2 if position == 0
  78.         sprite.y += self.src_rect.height / 2 if position == 2
  79.       end
  80.       if @animation_mirror
  81.         sprite.x -= cell_data[i, 1]
  82.         sprite.y += cell_data[i, 2]
  83.         sprite.angle = (360 - cell_data[i, 4])
  84.         sprite.mirror = (cell_data[i, 5] == 0)
  85.       else
  86.         sprite.x += cell_data[i, 1]
  87.         sprite.y += cell_data[i, 2]
  88.         sprite.angle = cell_data[i, 4]
  89.         sprite.mirror = (cell_data[i, 5] == 1)
  90.       end
  91.       sprite.z = self.z + 300 + i
  92.       sprite.ox = 96
  93.       sprite.oy = 96
  94.       sprite.zoom_x = cell_data[i, 3] / 100.0
  95.       sprite.zoom_y = cell_data[i, 3] / 100.0
  96.       sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  97.       sprite.blend_type = cell_data[i, 7]
  98.     end
  99.   end
  100.    
  101.   def x=(x)
  102.     sx = x - self.x
  103.     if sx != 0
  104.       if @animation_sprites != nil
  105.         for i in 0..15
  106.           @animation_sprites[i].x += sx
  107.         end
  108.       end
  109.     end
  110.     super
  111.   end
  112.   
  113.   def y=(y)
  114.     sy = y - self.y
  115.     if sy != 0
  116.       if @animation_sprites != nil
  117.         for i in 0..15
  118.           @animation_sprites[i].y += sy
  119.         end
  120.       end
  121.     end
  122.     super
  123.   end

  124. end
复制代码


这个能解决问题...我测试过了 我删掉这脚本动画就停在事件原位显示
插入后  动画始终显示在事件上 [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~




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