O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Animação sobrepor uma imagem.

Iniciado por andrewzoka, 24/01/2018 às 16:59

Há alguma forma de fazer qualquer animação ficar por cima de uma imagem que eu chamar? (VX ACE)

Harus Game is coming.
https://www.indiexpo.net/pt/games/harus
© 2020 copyright.

Não entendi bem o que você quer fazer...
O que quer dizer com animação?

Da uma explicada mais aprofundada pra sabermos do que se trata.

Achei isso aqui fazendo uma pesquisa, veja se te serve:
Código: Colocar no Banco de Scripts
# Créditos para: TheoAllen
class Game_Interpreter
  
  def anim_pic(pic_num, anim_id, mirror = false)
    if $game_party.in_battle
      pic = $game_troop.screen.pictures[pic_num]
    else
      pic = $game_map.screen.pictures[pic_num]
    end
    pic.anim_id = anim_id
    pic.anim_mirror = mirror
  end
  
end

class Game_Picture
  attr_accessor :anim_id
  attr_accessor :anim_mirror
  
  alias theo_animpic_init initialize
  def initialize(number)
    theo_animpic_init(number)
    @anim_id = 0
    @anim_mirror = false
  end
  
end

class Sprite_Picture
  
  @@ani_checker = []
  @@ani_spr_checker = []
  @@_reference_count = {}
  
  alias theo_animpic_init initialize
  def initialize(viewport, picture)
    @use_sprite = true        
    theo_animpic_init(viewport, picture)
  end
  
  alias theo_animpic_dispose dispose
  def dispose
    theo_animpic_dispose
    dispose_animation
  end
  
  alias theo_animpic_update update
  def update
    theo_animpic_update
    update_animation
    @@ani_checker.clear
    @@ani_spr_checker.clear
    update_anim_flag
  end
  
  def update_anim_flag
    if @picture.anim_id > 0
      start_animation($data_animations[@picture.anim_id], @picture.anim_mirror)
      @picture.anim_id = 0
    end
  end
  
  def animation?
    @animation != nil
  end
  
  def start_animation(animation, mirror = false)
    dispose_animation
    @animation = animation
    if @animation
      @ani_mirror = mirror
      set_animation_rate
      @ani_duration = @animation.frame_max * @ani_rate + 1
      load_animation_bitmap
      make_animation_sprites
      set_animation_origin
    end
  end
  
  def set_animation_rate
    @ani_rate = 4     # Fixed value by default
    @ani_rate = YEA::CORE::ANIMATION_RATE if $imported["YEA-CoreEngine"]
  end
  
  def load_animation_bitmap
    animation1_name = @animation.animation1_name
    animation1_hue = @animation.animation1_hue
    animation2_name = @animation.animation2_name
    animation2_hue = @animation.animation2_hue
    @ani_bitmap1 = Cache.animation(animation1_name, animation1_hue)
    @ani_bitmap2 = Cache.animation(animation2_name, animation2_hue)
    if @@_reference_count.include?(@ani_bitmap1)
      @@_reference_count[@ani_bitmap1] += 1
    else
      @@_reference_count[@ani_bitmap1] = 1
    end
    if @@_reference_count.include?(@ani_bitmap2)
      @@_reference_count[@ani_bitmap2] += 1
    else
      @@_reference_count[@ani_bitmap2] = 1
    end
    Graphics.frame_reset
  end
  
  def make_animation_sprites
    @ani_sprites = []
    if @use_sprite && !@@ani_spr_checker.include?(@animation)
      16.times do
        sprite = ::Sprite.new(viewport)
        sprite.visible = false
        @ani_sprites.push(sprite)
      end
      if @animation.position == 3
        @@ani_spr_checker.push(@animation)
      end
    end
    @ani_duplicated = @@ani_checker.include?(@animation)
    if !@ani_duplicated && @animation.position == 3
      @@ani_checker.push(@animation)
    end
  end
  
  def set_animation_origin
    if @animation.position == 3
      if viewport == nil
        @ani_ox = Graphics.width / 2
        @ani_oy = Graphics.height / 2
      else
        @ani_ox = viewport.rect.width / 2
        @ani_oy = viewport.rect.height / 2
      end
    else
      @ani_ox = x - ox + width / 2
      @ani_oy = y - oy + height / 2
      if @animation.position == 0
        @ani_oy -= height / 2
      elsif @animation.position == 2
        @ani_oy += height / 2
      end
    end
  end
  
  def dispose_animation
    if @ani_bitmap1
      @@_reference_count[@ani_bitmap1] -= 1
      if @@_reference_count[@ani_bitmap1] == 0
        @ani_bitmap1.dispose
      end
    end
    if @ani_bitmap2
      @@_reference_count[@ani_bitmap2] -= 1
      if @@_reference_count[@ani_bitmap2] == 0
        @ani_bitmap2.dispose
      end
    end
    if @ani_sprites
      @ani_sprites.each {|sprite| sprite.dispose }
      @ani_sprites = nil
      @animation = nil
    end
    @ani_bitmap1 = nil
    @ani_bitmap2 = nil
  end
  
  def update_animation
    return unless animation?
    @ani_duration -= 1
    if @ani_duration % @ani_rate == 0
      if @ani_duration > 0
        frame_index = @animation.frame_max
        frame_index -= (@ani_duration + @ani_rate - 1) / @ani_rate
        animation_set_sprites(@animation.frames[frame_index])
        @animation.timings.each do |timing|
          animation_process_timing(timing) if timing.frame == frame_index
        end
      else
        end_animation
      end
    end
  end
  
  def end_animation
    dispose_animation
  end
  
  def animation_set_sprites(frame)
    cell_data = frame.cell_data
    @ani_sprites.each_with_index do |sprite, i|
      next unless sprite
      pattern = cell_data[i, 0]
      if !pattern || pattern < 0
        sprite.visible = false
        next
      end
      sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
      sprite.visible = true
      sprite.src_rect.set(pattern % 5 * 192,
        pattern % 100 / 5 * 192, 192, 192)
      if @ani_mirror
        sprite.x = @ani_ox - cell_data[i, 1]
        sprite.y = @ani_oy + cell_data[i, 2]
        sprite.angle = (360 - cell_data[i, 4])
        sprite.mirror = (cell_data[i, 5] == 0)
      else
        sprite.x = @ani_ox + cell_data[i, 1]
        sprite.y = @ani_oy + cell_data[i, 2]
        sprite.angle = cell_data[i, 4]
        sprite.mirror = (cell_data[i, 5] == 1)
      end
      sprite.z = self.z + 300 + i
      sprite.ox = 96
      sprite.oy = 96
      sprite.zoom_x = cell_data[i, 3] / 100.0
      sprite.zoom_y = cell_data[i, 3] / 100.0
      sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
      sprite.blend_type = cell_data[i, 7]
    end
  end
  
  def animation_process_timing(timing)
    timing.se.play unless @ani_duplicated
    case timing.flash_scope
    when 1
      self.flash(timing.flash_color, timing.flash_duration * @ani_rate)
    when 2
      if viewport && !@ani_duplicated
        viewport.flash(timing.flash_color, timing.flash_duration * @ani_rate)
      end
    when 3
      self.flash(nil, timing.flash_duration * @ani_rate)
    end
  end
end

Código: Usar isso no lugar do comando de exibir animação
anim_pic(picture_number, animation_id)

Post original.


24/01/2018 às 18:04 #3 Última edição: 24/01/2018 às 21:54 por andrewzoka
Citação de: Revali online 24/01/2018 às 17:57
Achei isso aqui fazendo uma pesquisa, veja se te serve:

Hmm, só pelo fato de ter que chamar um script no lugar de chamar a animação, não sei se vai funcionar... É um ABS, ao atacar, aparece uma animação na tela... De qualquer forma, vai me servir MUITO pra outros propósitos. Só não entendi o por que na hora em que eu utilizei, a animação passou bem longe do evento em que esta configurado dessa forma :c

Citação de: Kalmorph online 24/01/2018 às 17:54
Não entendi bem o que você quer fazer...
O que quer dizer com animação?

Da uma explicada mais aprofundada pra sabermos do que se trata.

Uma animação na tela, exemplo, explosões, etc.

Harus Game is coming.
https://www.indiexpo.net/pt/games/harus
© 2020 copyright.