Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

(Ayuda)Como cambiarle prioridad a las imágenes(Vx Ace)

Ver el tema anterior Ver el tema siguiente Ir abajo

(Ayuda)Como cambiarle prioridad a las imágenes(Vx Ace)

Mensaje por Dariel Lopez el 2018-02-27, 22:05

Hola a todos y disculpen que los moleste de nuevo pero tengo un problema con las imágenes al usar el comando Mostrar Imagen ya que quiero saber si se le puede cambiar la prioridad para que no bloqueen a los charas ni a los mapas porque quiero probar algo que tengo en mente a ver si se puede, y creo que cambiándole la prioridad a las imágenes se puede lograr lo que pienso.
Si alguien sabe si se puede lograr eso y me dice como hacerlo se lo agradezco de antemano.
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 702

Gracias : 41

Volver arriba Ir abajo

Re: (Ayuda)Como cambiarle prioridad a las imágenes(Vx Ace)

Mensaje por newold el 2018-02-27, 23:43

Si vas al script Spriteset_Map verás que las imágenes se crean con el @viewport2 y los personajes y el escenario con el @viewport1. El @viewport2 tiene una prioridad z mayor a la del @viewport1, por lo que todo lo que lleve el @viewport2 estará por encima del @viewport1. Vamos a modificarlo:

Buscas esto en el script Spriteset_Map
Código:
  def update_pictures
    $game_map.screen.pictures.each do |pic|
      @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport2, pic)
      @picture_sprites[pic.number].update
    end
  end

y cambia donde pone @viewport2 por @viewport1


Ahora cuando creas una imagen se dibuja en el @viewport1 y por defecto tienen una prioridad que es igual al número de la imagen (la imagen 0 es 0, la 50 pues 50). A número más grande sale por encima de las que tengan un número más pequeño. Pero ahora también puedes controlar esa prioridad y darle el valor que tu quieras usando el comando llamar script con este código:

Código:
$game_map.screen.pictures[id de la image].z = numero

Y así vas cambiando el número hasta que la imagen salga encima o debajo de donde quieras (vas probando)

Ejemplo:

Código:
$game_map.screen.pictures[3].z = 5000000 # La imagen 3 va a salir encima de todo lo demás que esté en el @viewport1 (a menos que haya otra cosa coon una z mayor a 5000000 xd)
avatar
newold
Principiante
Principiante

0/3

Créditos 1253

Gracias : 129

Volver arriba Ir abajo

Re: (Ayuda)Como cambiarle prioridad a las imágenes(Vx Ace)

Mensaje por newold el 2018-02-27, 23:44

Si vas al script Spriteset_Map verás que las imágenes se crean con el @viewport2 y los personajes y el escenario con el @viewport1. El @viewport2 tiene una prioridad z mayor a la del @viewport1, por lo que todo lo que lleve el @viewport2 estará por encima del @viewport1. Vamos a modificarlo:

Buscas esto en el script Spriteset_Map
Código:
 def update_pictures
    $game_map.screen.pictures.each do |pic|
      @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport2, pic)
      @picture_sprites[pic.number].update
    end
  end

y cambia donde pone @viewport2 por @viewport1


Ahora cuando creas una imagen se dibuja en el @viewport1 y por defecto tienen una prioridad que es igual al número de la imagen (la imagen 0 es 0, la 50 pues 50). A número más grande sale por encima de las que tengan un número más pequeño. Pero ahora también puedes controlar esa prioridad y darle el valor que tu quieras usando el comando llamar script con este código:

Código:
$game_map.screen.pictures[id de la image].z = numero

Y así vas cambiando el número hasta que la imagen salga encima o debajo de donde quieras (vas probando)

Ejemplo:

Código:
$game_map.screen.pictures[3].z = 5000000 # La imagen 3 va a salir encima de todo lo demás que esté en el @viewport1 (a menos que haya otra cosa coon una z mayor a 5000000 xd)
avatar
newold
Principiante
Principiante

0/3

Créditos 1253

Gracias : 129

Volver arriba Ir abajo

Re: (Ayuda)Como cambiarle prioridad a las imágenes(Vx Ace)

Mensaje por Dariel Lopez el 2018-02-28, 04:12

Muchas gracias por tu invaluable ayuda newold, porque gracias a tí ya puedo hacer lo que quería...en parte.
Bueno, lo que quiero hacer es animar los fondos de mi juego y por eso lo de la prioridad de las imágenes porque los scripts que he encontrado me parecieron muy complicados además de que hay que editar las imágenes lo cual dado el detalle de las mismas me resulta casi imposible.
El problema ahora es que al cambiar lo que me dijiste en el script Spriteset_Map los autotiles que uso en el mapa de prueba salen invisibles, y parte de los tiles B, C, y D salen incompletos. La cascada que estoy probando sale perfectamente animada usando cuatro imágenes para ese fin usando un evento en proceso paralelo en ese mapa que muestra las imágenes con una espera de 5 frames entre cada una de ellas, y repito que se ve perfectamente animado el fondo pero los autotiles no se ven ni tampoco partes de los tiles  B, C, y D.
Y otro problema que no sé a que se deba es que al salir del mapa de prueba en el teletransportador a otro mapa borro las imágenes en medio de una transición para que no se note cuando borro las imágenes, pero cuando aparezco en el otro mapa una de las imágenes sigue visible.
¿Sabes a qué se debe que los autotiles no se vean y el por qué no se borran las imágenes?
Te agradezco de antemano tu ayuda.
Edito: Ya encontré una forma de borrar las imágenes usando un interruptor pero lo de los autotiles invisibles ni idea de como arreglarlo.
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 702

Gracias : 41

Volver arriba Ir abajo

Re: (Ayuda)Como cambiarle prioridad a las imágenes(Vx Ace)

Mensaje por newold el 2018-02-28, 08:43

Que cosa más rara lo de los autotiles, no hemos tocado nada de eso así que no debería haber ningún problema.

Prueba este script, ponlo encima del main, Aparte éste script hace que las imagenes salgan donde tu quieras y se desplacen con el mapa

Código:
class Scene_Map < Scene_Base
  attr_reader :spriteset
end

class Spriteset_Map
  attr_reader :picture_sprites, :character_sprites
  def update_pictures
    for i in 1...$game_map.screen.pictures.data.size
      pic = $game_map.screen.pictures[i]
      @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport1, pic)
      @picture_sprites[pic.number].update
    end
  end
end

class Game_Pictures
  attr_reader :data
end

class Game_Picture
  attr_accessor :fix, :z
end


class Sprite_Picture < Sprite
  attr_accessor :fix
  alias update_fix_newold update unless $@
  def update
    update_fix_newold
    return unless SceneManager.scene.is_a?(Scene_Map)
    unless @picture.fix == true
      self.ox = $game_map.display_x*32
      self.oy = $game_map.display_y*32
    end
    self.z = @picture.z.to_i
  end
end

class Game_Interpreter
  def set_pic_priority(id, z)
    return unless SceneManager.scene.is_a?(Scene_Map)
    return if $game_map.screen.pictures[id.to_i].nil?
    $game_map.screen.pictures[id.to_i].z = z
  end
  def set_pic_fix(id, value)
    return unless SceneManager.scene.is_a?(Scene_Map)
    return if $game_map.screen.pictures[id.to_i].nil?
    $game_map.screen.pictures[id.to_i].fix = (value==true)
  end
end


Ahora en los eventos para cambiar la prioridad z de una imagen usa este comando:

Código:
set_pic_priority(id imagen, prioridad z)

y para hacer que la imagen se quede en pantalla y no haga scroll en el mapa use este otro comando

Código:
set_pic_fix(id imagen, true or false)

(Si pones true la imagen se queda en pantalla y false se mueve con el mapa (por defecto es false))

las imágenes tienen la misma id que en la base de datos (desde la 1 hasta la 100). La z es cualquier número.

Esto no influye para nada en los autotiles nien los tiles B, C, D (lo he comprobado)

Asegúrate de no haber cambiado solo esta línea

Código:
@picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport2, pic)

por

Código:
@picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport1, pic)

en el script Spriteset_Map. todo lo demás tiene que estar como en default. (te lo dejo aquí el código completo con solo esa modificación, puedes sustituir el tuyo por éste)

Código:
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
#  This class brings together map screen sprites, tilemaps, etc. It's used
# within the Scene_Map class.
#==============================================================================

class Spriteset_Map
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    create_viewports
    create_tilemap
    create_parallax
    create_characters
    create_shadow
    create_weather
    create_pictures
    create_timer
    update
  end
  #--------------------------------------------------------------------------
  # * Create Viewport
  #--------------------------------------------------------------------------
  def create_viewports
    @viewport1 = Viewport.new
    @viewport2 = Viewport.new
    @viewport3 = Viewport.new
    @viewport2.z = 50
    @viewport3.z = 100
  end
  #--------------------------------------------------------------------------
  # * Create Tilemap
  #--------------------------------------------------------------------------
  def create_tilemap
    @tilemap = Tilemap.new(@viewport1)
    @tilemap.map_data = $game_map.data
    load_tileset
  end
  #--------------------------------------------------------------------------
  # * Load Tileset
  #--------------------------------------------------------------------------
  def load_tileset
    @tileset = $game_map.tileset
    @tileset.tileset_names.each_with_index do |name, i|
      @tilemap.bitmaps[i] = Cache.tileset(name)
    end
    @tilemap.flags = @tileset.flags
  end
  #--------------------------------------------------------------------------
  # * Create Parallax
  #--------------------------------------------------------------------------
  def create_parallax
    @parallax = Plane.new(@viewport1)
    @parallax.z = -100
  end
  #--------------------------------------------------------------------------
  # * Create Character Sprite
  #--------------------------------------------------------------------------
  def create_characters
    @character_sprites = []
    $game_map.events.values.each do |event|
      @character_sprites.push(Sprite_Character.new(@viewport1, event))
    end
    $game_map.vehicles.each do |vehicle|
      @character_sprites.push(Sprite_Character.new(@viewport1, vehicle))
    end
    $game_player.followers.reverse_each do |follower|
      @character_sprites.push(Sprite_Character.new(@viewport1, follower))
    end
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
    @map_id = $game_map.map_id
  end
  #--------------------------------------------------------------------------
  # * Create Airship Shadow Sprite
  #--------------------------------------------------------------------------
  def create_shadow
    @shadow_sprite = Sprite.new(@viewport1)
    @shadow_sprite.bitmap = Cache.system("Shadow")
    @shadow_sprite.ox = @shadow_sprite.bitmap.width / 2
    @shadow_sprite.oy = @shadow_sprite.bitmap.height
    @shadow_sprite.z = 180
  end
  #--------------------------------------------------------------------------
  # * Create Weather
  #--------------------------------------------------------------------------
  def create_weather
    @weather = Spriteset_Weather.new(@viewport2)
  end
  #--------------------------------------------------------------------------
  # * Create Picture Sprite
  #--------------------------------------------------------------------------
  def create_pictures
    @picture_sprites = []
  end
  #--------------------------------------------------------------------------
  # * Create Timer Sprite
  #--------------------------------------------------------------------------
  def create_timer
    @timer_sprite = Sprite_Timer.new(@viewport2)
  end
  #--------------------------------------------------------------------------
  # * Free
  #--------------------------------------------------------------------------
  def dispose
    dispose_tilemap
    dispose_parallax
    dispose_characters
    dispose_shadow
    dispose_weather
    dispose_pictures
    dispose_timer
    dispose_viewports
  end
  #--------------------------------------------------------------------------
  # * Free Tilemap
  #--------------------------------------------------------------------------
  def dispose_tilemap
    @tilemap.dispose
  end
  #--------------------------------------------------------------------------
  # * Free Parallax
  #--------------------------------------------------------------------------
  def dispose_parallax
    @parallax.bitmap.dispose if @parallax.bitmap
    @parallax.dispose
  end
  #--------------------------------------------------------------------------
  # * Free Character Sprite
  #--------------------------------------------------------------------------
  def dispose_characters
    @character_sprites.each {|sprite| sprite.dispose }
  end
  #--------------------------------------------------------------------------
  # * Free Airship Shadow Sprite
  #--------------------------------------------------------------------------
  def dispose_shadow
    @shadow_sprite.dispose
  end
  #--------------------------------------------------------------------------
  # * Free Weather
  #--------------------------------------------------------------------------
  def dispose_weather
    @weather.dispose
  end
  #--------------------------------------------------------------------------
  # * Free Picture Sprite
  #--------------------------------------------------------------------------
  def dispose_pictures
    @picture_sprites.compact.each {|sprite| sprite.dispose }
  end
  #--------------------------------------------------------------------------
  # * Free Timer Sprite
  #--------------------------------------------------------------------------
  def dispose_timer
    @timer_sprite.dispose
  end
  #--------------------------------------------------------------------------
  # * Free Viewport
  #--------------------------------------------------------------------------
  def dispose_viewports
    @viewport1.dispose
    @viewport2.dispose
    @viewport3.dispose
  end
  #--------------------------------------------------------------------------
  # * Refresh Characters
  #--------------------------------------------------------------------------
  def refresh_characters
    dispose_characters
    create_characters
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    update_tileset
    update_tilemap
    update_parallax
    update_characters
    update_shadow
    update_weather
    update_pictures
    update_timer
    update_viewports
  end
  #--------------------------------------------------------------------------
  # * Update Tileset
  #--------------------------------------------------------------------------
  def update_tileset
    if @tileset != $game_map.tileset
      load_tileset
      refresh_characters
    end
  end
  #--------------------------------------------------------------------------
  # * Update Tilemap
  #--------------------------------------------------------------------------
  def update_tilemap
    @tilemap.map_data = $game_map.data
    @tilemap.ox = $game_map.display_x * 32
    @tilemap.oy = $game_map.display_y * 32
    @tilemap.update
  end
  #--------------------------------------------------------------------------
  # * Update Parallax
  #--------------------------------------------------------------------------
  def update_parallax
    if @parallax_name != $game_map.parallax_name
      @parallax_name = $game_map.parallax_name
      @parallax.bitmap.dispose if @parallax.bitmap
      @parallax.bitmap = Cache.parallax(@parallax_name)
      Graphics.frame_reset
    end
    @parallax.ox = $game_map.parallax_ox(@parallax.bitmap)
    @parallax.oy = $game_map.parallax_oy(@parallax.bitmap)
  end
  #--------------------------------------------------------------------------
  # * Update Character Sprite
  #--------------------------------------------------------------------------
  def update_characters
    refresh_characters if @map_id != $game_map.map_id
    @character_sprites.each {|sprite| sprite.update }
  end
  #--------------------------------------------------------------------------
  # * Update Airship Shadow Sprite
  #--------------------------------------------------------------------------
  def update_shadow
    airship = $game_map.airship
    @shadow_sprite.x = airship.screen_x
    @shadow_sprite.y = airship.screen_y + airship.altitude
    @shadow_sprite.opacity = airship.altitude * 8
    @shadow_sprite.update
  end
  #--------------------------------------------------------------------------
  # * Update Weather
  #--------------------------------------------------------------------------
  def update_weather
    @weather.type = $game_map.screen.weather_type
    @weather.power = $game_map.screen.weather_power
    @weather.ox = $game_map.display_x * 32
    @weather.oy = $game_map.display_y * 32
    @weather.update
  end
  #--------------------------------------------------------------------------
  # *Update Picture Sprite
  #--------------------------------------------------------------------------
  def update_pictures
    $game_map.screen.pictures.each do |pic|
      @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport1, pic)
      @picture_sprites[pic.number].update
    end
  end
  #--------------------------------------------------------------------------
  # * Update Timer Sprite
  #--------------------------------------------------------------------------
  def update_timer
    @timer_sprite.update
  end
  #--------------------------------------------------------------------------
  # * Update Viewport
  #--------------------------------------------------------------------------
  def update_viewports
    @viewport1.tone.set($game_map.screen.tone)
    @viewport1.ox = $game_map.screen.shake
    @viewport2.color.set($game_map.screen.flash_color)
    @viewport3.color.set(0, 0, 0, 255 - $game_map.screen.brightness)
    @viewport1.update
    @viewport2.update
    @viewport3.update
  end
end
avatar
newold
Principiante
Principiante

0/3

Créditos 1253

Gracias : 129

Volver arriba Ir abajo

Re: (Ayuda)Como cambiarle prioridad a las imágenes(Vx Ace)

Mensaje por Vala Arumi el 2018-02-28, 14:32

Holitas. Perdón por meterme, pero si lo que querés es poner una imagen animada de fondo, que quede por debajo de los tiles, lo que buscás es un parallax animado, y existe un script para ello.

Animated Parallax:
Código:
#==============================================================================
#    Animated Parallax [VXA]
#    Version: 1.0
#    Author: modern algebra (rmrk.net)
#    Date: December 20, 2011
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Description:
#
#    This script allows you to set an animated parallax background by having
#  multiple frames and switching between them at a user-defined speed. By
#  default, this script only supports .png, .jpg, and .bmp file formats for
#  the animated parallax panels (as they are the only ones I know RMVX Ace
#  supports).
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Instructions:
#   
#    The script operates by having multiple parallax backgrounds and switching
#    between them at a speed set by you, unique for each map
#
#    Thus, if you want to use an animated parallax, you need to do a few things:
#      (a) Make or find the parallax backgrounds you want to use and import
#        them into your game. Then, label them all the same with the one
#        distinction that at the end of each should have a _1, _2, etc...
#          Example Naming:
#            BlueSky_1, BlueSky_2, BlueSky_3, etc...
#      (b) Set the parallax background to any given map that you want the
#        animated parallaxes for. Be sure to set it to the first one you want
#        in succession, so BlueSky_1, not BlueSky_2 or _3. If you do set it to
#        BlueSky_2, then it will only animate between images _2 and _3.
#      (c) Scroll down to the EDITABLE REGION at line 83 and follow the
#        instructions for setting the animation speed
#``````````````````````````````````````````````````````````````````````````````
#    If you need to change the speed at which parallax panels cycle (for
#    instance, if you have also changed the parallax that is displaying), you 
#    can do so by using the following code in a Script call:
#
#      change_parallax_animation_speed(x)
#        x: the number of frames before cycling to the next panel. There are 60
#          frames in one second.
#
#    Note: there cannot be a space between speed and (.
#      change_parallax_animation_speed(x)    <- Correct
#      change_parallax_animation_speed (x)    <- Incorrect
#
#    You can also change it to an array of times, such that you can make it so
#  some frames remain up for longer than others. To do so, just place all of
#  the speeds for each panel in order, separated by commas. Ie.
#
#      change_parallax_animation_speed(x1, x2, ..., xn)
#
#    The same rule as at line 41 applies.
#
#    EXAMPLES:
#
#      change_parallax_animation_speed(30)
#        Each parallax panel will be up for half a second before switching.
#
#      change_parallax_animation_speed(15, 30, 60, 45)
#        The first parallax panel will be up for one quarter of a second before
#      switching to the second panel; the second panel will be up for half a
#      second before switching to the third panel; the third panel will be up
#      for one second before switching to the fourth panel; the fourth panel
#      will be up for three quarters of a second before switching back to the
#      first panel. Repeat.
#==============================================================================

$imported = {} unless $imported
$imported[:MA_AnimatedParallax] = true

#==============================================================================
# ** Game Map
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    new constants - MAAP_PARALLAX_ANIMATION_FRAMES; MAAP_PRELOAD_PARALLAXES
#      MAAP_SUPPORTED_EXTENSIONS
#    aliased methods - setup_parallax; change_parallax; update_parallax
#    new methods - setup_parallax_frames; maap_check_extensions
#==============================================================================

class Game_Map
  MAAP_PARALLAX_ANIMATION_FRAMES = { # <- Don't touch
  #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  #    EDITABLE REGION
  #|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  #  MAAP_PARALLAX_ANIMATION_FRAMES - this constant allows you to set the
  # speed at which the parallax switches to the next graphic in the animation
  # series by individual maps. So if you want it to be every 20 frames in one
  # map but every 35 in another map, this is where you do it. All you need to
  # do is type in the following code:
  #
  #      map_id => frames,
  #
  # where map_id is the ID of the Map you want to set it for and frames is
  # either (a) an integer for how many frames you want to show each panel
  # before switching to the next; or (b) an array of integers where each entry
  # of the array is the number of frames to keep the corresponding frame up
  # before switching to the next. This allows you to vary the time each of the
  # frames is left on before switching. There are 60 frames in a second.
  #
  #    EXAMPLES:
  #      1 => 35,    Map 1 will cycle through parallax panels every 35 frames
  #      2 => 40,    Map 2 will cycle through parallax panels every 40 frames
  #      8 => [20, 5, 15],    Map 8 will keep the first panel of the animated
  #                  parallax on for 20 frames before switching to the second
  #                  panel which will be on for 5 frames before switching to
  #                  the third panel which is on 15 frames before switching
  #                  back to the first panel. Repeat.
  #
  #  Note that the comma is necessary! For any maps where you use animated
  # parallaxes but do not include the map ID in this hash, then it will default
  # to the value set below at: MAAP_PARALLAX_ANIMATION_FRAMES.default.
    1 => 20,
    8 => 40,
  } # <- Don't touch
  #  Changing the below value allows you to change the default speed of frame
  # animation. Ie. the speed of frame animation in a map in which you have not
  # directly set the speed via the above hash configuration.
  MAAP_PARALLAX_ANIMATION_FRAMES.default = 30
  #  Depending on the size of the parallaxes and how many panels you use in a
  # map, there can be some lag when you load new panels. The following option
  # allows you to decide whether all the parallax frames are loaded at once
  # when the map is first entered or individually the first time each panel
  # shows up. Generally, if your panels are very large (1MB+) then you should
  # set it to true; if smaller files, then you should set it to false.
  MAAP_PRELOAD_PARALLAXES = true
  #|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  #    END EDITABLE REGION
  #///////////////////////////////////////////////////////////////////////////
  MAAP_SUPPORTED_EXTENSIONS = ["png", "jpg", "bmp"]
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Setup Parallax
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias ma_anmp_setuplax_6id3 setup_parallax
  def setup_parallax(*args, &block)
    ma_anmp_setuplax_6id3(*args, &block) # Run Original Method
    setup_parallax_frames
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Change Parallax
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias moda_ap_chngprlx_8uz2 change_parallax
  def change_parallax(*args, &block)
    moda_ap_chngprlx_8uz2(*args, &block) # Run Original Method
    setup_parallax_frames
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Update Parallax
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias maba_ap_updprx_9hv3 update_parallax
  def update_parallax(*args, &block)
    maba_ap_updprx_9hv3(*args, &block) # Run Original Method
    # Use the timer if the parallax has more than one frame
    if @maap_parallax_frames && @maap_parallax_frames.size > 1
      @maap_parallax_frame_timer += 1
      # Check if timer exceeded
      if @maap_parallax_frame_timer >= @maap_frame_speed
        @maap_parallax_frame_timer = 0 # Reset Timer
        # Set parallax to next frame
        @maap_parallax_index = (@maap_parallax_index + 1) % @maap_parallax_frames.size
        @parallax_name = @maap_parallax_frames[@maap_parallax_index]
        set_parallax_frame_speed(@maap_parallax_speed, @maap_parallax_index)
      end
    end
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Set Parallax Animation Speed
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def set_parallax_frame_speed(parallax_speed = MAAP_PARALLAX_ANIMATION_FRAMES[@map_id], frame = 0)
    @maap_parallax_speed = parallax_speed
    if @maap_parallax_speed.is_a?(Array)
      @maap_frame_speed = [@maap_parallax_speed[frame], @maap_parallax_speed.compact[0]].compact[0]
    else
      @maap_frame_speed = @maap_parallax_speed
    end
    # Get the default setting, in case the time limit is incorrectly set
    unless @maap_frame_speed.is_a?(Integer)
      p "Error: Animated Parallax 1.0\nFrame Speed incorrectly set for #{@map_id}, frame #{frame + 1} - #{@parallax_name}"
      @maap_frame_speed = MAAP_PARALLAX_ANIMATION_FRAMES.default
      @maap_frame_speed = default.compact[0] if @maap_frame_speed.is_a?(Array)
      @maap_frame_speed = 30 if !@maap_frame_speed
    end
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Setup Parallax Frames
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def setup_parallax_frames
    # Retain the names of old map's parallax, for disposal
    last_map_bmps = @maap_parallax_frames.nil? ? [] : @maap_parallax_frames
    # Initialize Data
    @maap_parallax_index = 0
    @maap_parallax_frames = [@parallax_name]
    @maap_parallax_frame_timer = 0
    set_parallax_frame_speed
    # Collect all frames of the parallax animation
    if @parallax_name[/_(\d+)$/] != nil
      frame_id = $1.to_i + 1
      base_name = @parallax_name.sub(/_\d+$/, "")
      while maap_check_extensions("Graphics/Parallaxes/#{base_name}_#{frame_id}")
        @maap_parallax_frames.push("#{base_name}_#{frame_id}")
        frame_id += 1
      end
    end
    # Dispose the cached bitmaps from the previous map
    (last_map_bmps - @maap_parallax_frames).each { |bmp| (Cache.parallax(bmp)).dispose }
    # Preload all the parallax bitmaps so no lag is experienced on first load
    if MAAP_PRELOAD_PARALLAXES
      (@maap_parallax_frames - last_map_bmps).each { |bmp| Cache.parallax(bmp) }
    end
    Graphics.frame_reset
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Check Extensions
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def maap_check_extensions (filepath)
    MAAP_SUPPORTED_EXTENSIONS.any? { |ext| FileTest.exist?("#{filepath}.#{ext}") }
  end
end

#==============================================================================
# ** Game_Interpreter
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    new method - change_parallax_animation_speed
#==============================================================================

class Game_Interpreter
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Change Parallax Animation Speed
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def change_parallax_animation_speed(*args)
    if args.size <= 1
      $game_map.set_parallax_frame_speed(*args)
    else
      $game_map.set_parallax_frame_speed(args)
    end
  end
end

#==============================================================================
# ** Spriteset Map
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    aliased method - update_parallax
#==============================================================================

class Spriteset_Map
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Update Parallax
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias ma_animpara_updlax_7ig8 update_parallax
  def update_parallax(*args, &block)
    # Don't ever dispose the cached parallax pictures.
    @parallax.bitmap = nil if @parallax_name != $game_map.parallax_name 
    ma_animpara_updlax_7ig8(*args, &block) # Run Original Method
  end
end

Espero que te sirva.

Saludos,
Vala.
avatar
Vala Arumi
Iniciado
Iniciado

0/3

Créditos 38

Gracias : 13

Volver arriba Ir abajo

Re: (Ayuda)Como cambiarle prioridad a las imágenes(Vx Ace)

Mensaje por Dariel Lopez el 2018-02-28, 23:28

Gracias por la ayuda newold pero cuando pongo esto en un evento:

Pasa esto:

Los autotiles siguen invisibles, pero cuando pongo false en el evento:

El fondo se ve perfectamente animado pero se queda estático como se ve abajo:

No sé si estaré haciendo algo mal o si el Arc engine interfiera con lo que hago pero voy a probar alargando la imagen con las opciones a ver como se ve, y si no probaré con el script que menciona Vala Arumi, y por cierto muchas gracias a tí también por el script que me pasaste Vala Arumi pero lo leí y me pareció algo complicado pero si no funciona lo que haré ni newold encuentra solución al problema entonces probaré ese script.
Muchas gracias a ambos y si encuentras solución newold te lo agradezco de antemano.
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 702

Gracias : 41

Volver arriba Ir abajo

Re: (Ayuda)Como cambiarle prioridad a las imágenes(Vx Ace)

Mensaje por newold el 2018-03-01, 09:48

Tienes que tener algún script que modifica el script Spriteset_Map y da problemas. He probado el arc engine colocando debajo el script que hice

Código:
class Scene_Map < Scene_Base
  attr_reader :spriteset
end

class Spriteset_Map
  attr_reader :picture_sprites, :character_sprites
  def update_pictures
    for i in 1...$game_map.screen.pictures.data.size
      pic = $game_map.screen.pictures[i]
      @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport1, pic)
      @picture_sprites[pic.number].update
    end
  end
end

class Game_Pictures
  attr_reader :data
end

class Game_Picture
  attr_accessor :fix, :z
end


class Sprite_Picture < Sprite
  attr_accessor :fix
  alias update_fix_newold update unless $@
  def update
    update_fix_newold
    return unless SceneManager.scene.is_a?(Scene_Map)
    unless @picture.fix == true
      self.ox = $game_map.display_x*32
      self.oy = $game_map.display_y*32
    end
    self.z = @picture.z.to_i
  end
end

class Game_Interpreter
  def set_pic_priority(id, z)
    return unless SceneManager.scene.is_a?(Scene_Map)
    return if $game_map.screen.pictures[id.to_i].nil?
    $game_map.screen.pictures[id.to_i].z = z
  end
  def set_pic_fix(id, value)
    return unless SceneManager.scene.is_a?(Scene_Map)
    return if $game_map.screen.pictures[id.to_i].nil?
    $game_map.screen.pictures[id.to_i].fix = (value==true)
  end
end

Y funciona sin problemas, sin tocar nada más. te lo muestro en un video:



Por cierto en la excepción de tu código en el evento pones varias veces el comando de borrar la imagen 1. Solo lo necesitas una vez :D
avatar
newold
Principiante
Principiante

0/3

Créditos 1253

Gracias : 129

Volver arriba Ir abajo

Re: (Ayuda)Como cambiarle prioridad a las imágenes(Vx Ace)

Mensaje por Dariel Lopez el 2018-03-01, 22:57

Gracias de nuevo por tu ayuda newold pero vas a pensar que soy brujo porque acabo de probar el Arc Engine igual que tú sin modificar nada y solo con el script que tú hiciste y este es el resultado:

No entiendo por qué en mi pc no funciona y en la tuya sí si hacemos lo mismo.
Y por cierto que ya que probaste el Arc engine no sé si puedas ayudarme con otro problema que tengo que no puedo resolver, y es que en mi juego incluyo a Samus Aran de Metroid y quiero disminuir su tamaño a la mitad para que cuando use la habilidad de convertirse en pelota pueda caber por espacios más pequeños por los que nadie más puede pasar ni ella tampoco a menos que se convierta en pelota; empezando en la línea 218(un poco antes porque yo le agregué sonidos de cinco personajes al script) del script está lo que quiero cambiar con un comentario o un script call porque creo que se debe de poder cambiar, y me refiero a esto:
# Default character height
 # Altura padrão
 Default_Height = 30
 
 # Default character width
 # Largura padrão
 Default_Width = 16
Lo primero obvio es la altura del personaje y lo segundo la anchura y quisiera cambiarlo a la mitad aunque creo que solo necesito cambiar la altura.
¿Sabes como se puede cambiar eso?
De antemano muchas gracias.
Edito: Lo de poner Borrar imagen cuatro veces es porque por alguna razón al poner solo una vez ese comando de repente cuando salgo del mapa con fondo animado una imagen no se borraba y desde que puse cuatro veces el comando ya no tengo ese problema.
Edito1: Estaba viendo a detalle tu video y me di cuenta de que la imagen negra que pusiste sí bloquea los tiles cuando pasa por encima de ellos. Fíjate bien porque cuando pasa por encima de ellos los cubre. Si agrandas la imagen a 544*544 y la usas de nuevo verás que sí los cubre.
Estuve pensando toda la tarde que mi pc tenía algún problema y por eso no solucionaba el error pero no es mi pc; algún fallo hay en el maker que provoca el error porque estoy probando varios tiles y algunos no los cubre en mi juego.
Edito2: Ya encontré la solución para que los tiles B, C y D no se vean cortados y eso es poniendo la pasabilidad en estrella. Pero los Autotiles es otra cosa porque esos no se pueden poner en estrella.
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 702

Gracias : 41

Volver arriba Ir abajo

Re: (Ayuda)Como cambiarle prioridad a las imágenes(Vx Ace)

Mensaje por newold el 2018-03-02, 10:34

Para cambiar constantes dinámicamente en ruby tienes k usar este pequeño truco.

Buscas la línea en el script que pone module Arc_Core (sobre la linea 69) y añades debajo esto:

Código:
def Arc_Core.change_size(width, height)
    Arc_Core.const_set('Default_Width',width)
    Arc_Core.const_set('Default_height',height)
end

Ahora en el comando llamar script de los eventos puedes usar este código para modificar el valor de Default_Width y Default_Height

Código:
Arc_Core.change_size(valorAncho, valorAlto]

Ex: Arc_Core.change_size(10, 12) # cambia el width y height a 10, 12

Prueba eso a ver si te va.

Para el fallo ese de tilesets será mejor que me pases el proyecto por privado y le echo un ojo a ver si veo el fallo donde está.
avatar
newold
Principiante
Principiante

0/3

Créditos 1253

Gracias : 129

Volver arriba Ir abajo

Re: (Ayuda)Como cambiarle prioridad a las imágenes(Vx Ace)

Mensaje por Dariel Lopez el 2018-03-02, 23:11

Gracias por la ayuda newold pero no funcionó; usé un evento común activado con un interruptor de esta manera:

Pero no funciona.
Ah, y el script quedó así:

Primero lo puse sin dejar espacio entre module Arc Core y luego lo dejé como en la imagen y no funciona. Y probé cambiando el valor en el script sin usar lo que dices y si funciona pero para todos los personajes y yo solo quiero que funcione con Samus.
¿Hice algo mal o no funciona el cambio que me dijiste que hiciera?
Y voy a subir el proyecto y mientras se sube me dormiré un poco.
Gracias de nuevo.
Edito: Según yo ya te mandé el archivo del juego, pero si no llegó me avisas.
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 702

Gracias : 41

Volver arriba Ir abajo

Re: (Ayuda)Como cambiarle prioridad a las imágenes(Vx Ace)

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.