Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 4075 miembros registrados.
El último usuario registrado es chuwakal.

Nuestros miembros han publicado un total de 84152 mensajes en 11989 argumentos.

Magic Scroll

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker VX Magic Scroll

Mensaje por Malcom el 2011-08-13, 17:29

Magic Scroll

by Malcom
ver 1.0

Presentación
Script que realiza un scroll del mapa desde un evento inicio hasta un evento destino con la velocidad elegida, a diferencia del scroll normal en que solamente puedes elegir dirección, distancia y velocidad.
Es mi primer script decente y no funciona del todo bien pero para eso es la versión 1.0.

Imagen

Script
Código:
#==============================================================================
# ■ Magic Scroll 1.0
#
#  by Malcom
#
#------------------------------------------------------------------------------
#
#  Realiza un scroll del mapa desde un evento inicio hasta un
#  evento destino con la velocidad elegida.
#
#  ◦ Scroll original -> dirección, distancia y velocidad.
#
#  ◦ Magic Scroll -> Evento inicio, evento fin y velocidad.
#
#
#  Instrucciones de uso:
#
#    Para llamar al script hay que hacer un "Llamar Script" en la
#    tercera pestaña de los comandos de eventos y poner:
#
#      o = ($game_player o $game_map.events[número de evento])
#      d = ($game_player o $game_map.events[número de evento])
#      v = (velocidad)
#      $game_map.start_magic_scroll(o, d, v)
#
#    Ejemplo: Queremos hacer una sequencia en que el personaje
#    principal habla con el evento 3 y queremos que se realice
#    un scroll del mapa hacia ese evento a velocidad 4. Escribiremos
#    las siguientes lineas en un "Llamar Script".
#
#      o = $game_player
#      d = $game_map.events[3]
#      v = 4
#      $game_map.start_magic_scroll(o, d, v)
#
#    Para saber cuando acaba el scroll se puede hacer un"Condiciones
#    y Efectos" de la primera pestaña. Como condición pondremos con
#    el comando script de la cuarta pestaña lo siguiente:
#
#      $game_map.magic_scrolling?
#
#    Esto nos indicará si está haciendo el scroll (true) o si ya ha
#    acabado (false). Todo lo que hay que hacer es un bucle (Ciclo)
#    que al $game_map.magic_scrolling? == false acabe el "Ciclo".
#
#  PD: Este script no es compatible con mapas con scroll infinito.
#
#==============================================================================
class Game_Map
 
  alias setup_magic_scroll setup_scroll
  def setup_scroll
    @scroll_rest_x = 0
    @scroll_rest_y = 0
    @scroll_speed_x = 0
    @scroll_speed_y = 0
    @destino = nil
    setup_magic_scroll
  end
 
  def start_magic_scroll(origen, destino, speed)
    @destino = destino
    distancia_x = (destino.real_x - origen.real_x)
    distancia_y = (destino.real_y - origen.real_y)
    div = (Math.sqrt((distancia_y.abs^2) + (distancia_x.abs^2)))*16.0
    div = 1 if div == 0
    @scroll_speed_x = (distancia_x.abs * 4 * speed).to_f / div.to_f
    @scroll_speed_y = (distancia_y.abs * 4 * speed).to_f / div.to_f
    @scroll_rest_x = distancia_x
    @scroll_rest_y = distancia_y
    @scroll_direction = 1
    @scroll_speed = speed
  end
 
  def magic_scrolling?
    return ((@scroll_rest_x != 0) or (@scroll_rest_y != 0))
  end
 
  def scroll_magic(distancex, distancey)
    if @scroll_rest_x != 0
      if distancex < 0
        last_x = @display_x
        @display_x = [@display_x - distancex.abs, 0].max
        @parallax_x += @display_x - last_x
      else
        last_x = @display_x
        @display_x = [@display_x + distancex.abs, (width - 17) * 256].min
        @parallax_x += @display_x - last_x
      end
    end
    if @scroll_rest_y != 0
      if distancey > 0
        last_y = @display_y
        @display_y = [@display_y - distancey.abs, 0].max
        @parallax_y += @display_y - last_y
      else
        last_y = @display_y
        @display_y = [@display_y + distancey.abs, (height - 13) * 256].min
        @parallax_y += @display_y - last_y
      end
    end
  end
 
  def update_scroll
    if @scroll_rest > 0 or @scroll_rest_x != 0 or @scroll_rest_y != 0
      distance = 2 ** @scroll_speed
      case @scroll_direction
     
      when 1
        distance_aux_x = @scroll_speed_x
        distance_aux_y = @scroll_speed_y
        distancex = distance_aux_x if @scroll_rest_x > 0
        distancey = distance_aux_y if @scroll_rest_y < 0
        distancex = -distance_aux_x if @scroll_rest_x < 0
        distancey = -distance_aux_y if @scroll_rest_y > 0
        distancex = 0 if @scroll_rest_x == 0
        distancey = 0 if @scroll_rest_y == 0
        scroll_magic(distancex, distancey)
       
      when 2
        scroll_down(distance)
      when 4
        scroll_left(distance)
      when 6
        scroll_right(distance)
      when 8
        scroll_up(distance)
      end
     
      if @scroll_direction != 1
        @scroll_rest -= distance
      else
        @scroll_rest_x -= distancex
        @scroll_rest_y += distancey
        max = 2*@scroll_speed
        if @scroll_rest_x < 0 and distancex > 0
          @scroll_rest_x = 0
        end
        if @scroll_rest_x > 0 and distancex < 0
          @scroll_rest_x = 0
        end
        if @scroll_rest_y < 0 and distancey < 0
          @scroll_rest_y = 0
        end
        if @scroll_rest_y > 0 and distancey > 0
          @scroll_rest_y = 0
        end
        if @destino != nil
          if @destino.screen_x > 272-max and @destino.screen_x < 272+max
            @scroll_rest_x = 0
          end
          if @destino.screen_y > 208-max and @destino.screen_y < 208+max
            @scroll_rest_y = 0
          end
        end
      end
    end
  end
end

Instrucciones
Todo aparece explicado y con un ejemplo en el script. Si no queda claro, está la demo.

Descargar Demo
Magic Scroll 1.0

Notas del autor
Espero que os sirva el script y que no surjan muchos errores.
avatar
Malcom
Iniciado
Iniciado

0/3

Créditos 50

Gracias : 0

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.