Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

El movimiento diagonal más rápido del mundo

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP El movimiento diagonal más rápido del mundo

Mensaje por KLAUDAS el 2013-08-20, 13:55

¡Saludos, makeros!

Bueno, andaba yo haciendo gráficos de personajes de 8 direcciones y 8 frames gracias a este script (subo el código, créditos al autor dentro. Ahí veis cómo lo tengo configurado).
Link al script (sale el texto directamente)

El problema es que con él, el movimiento diagonal va a una velocidad infernal XD. La verdad es que tiene sentido lo que pasa. Estuve estudiándome el código y viendo qué pasaba, y claro, como el movimiento se basa cuadro a cuadro de 32 píxeles, al aplicar las fórmulas matemáticas a la diagonal, recorremos más espacio en el mismo tiempo.

Claro, tengo otro script con movmiento en diagonal en el que no sucede esto:
El otro:

Pero éste no permite las animaciones de las 8 direcciones con 8 frames que quiero poner a mis personajes. Vale, en el segundo script está la clave, en la corrección que hace las de las posiciones X, Y, pero por más vueltas que le doy no soy capaz de hacerme un fix XD. ¿Una manita, please? Estuve buscando por la página y no he visto a nadie que se queje de los movimientos diagonales rápidos como si el correcaminos andara entre nosotros XD.

Mil gracias de antemano por la ayuda y si, además de ayudarme, me explicáis cómo lo habéis hecho, aprenderé un montón más.

EDITO: OROCHIII, YO TE INVOCOOO jajaja
¡Un saludo!


Última edición por KLAUDAS el 2013-08-23, 17:55, editado 1 vez
avatar
KLAUDAS
Novato
Novato

0/3

Créditos 77

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: El movimiento diagonal más rápido del mundo

Mensaje por rpgmanumaker el 2013-08-23, 00:04

Seguramente, esta sea una respuesta estúpida, pero en fin... has probado a bajar el ANIMATION_SPEED = 3.5... por lo que pude entender... eso hace que la animación vaya más lenta... aunque supongo que ya lo habrás probado... o no servirá de nada hacer eso...
avatar
rpgmanumaker
Veterano
Veterano

0/3

Créditos 678

Gracias : 23

Volver arriba Ir abajo

RPG Maker XP Re: El movimiento diagonal más rápido del mundo

Mensaje por xn1 el 2013-08-23, 07:07

NO es la velocidad de la animacion, es la velocidad del movimiento la que tienes que bajar.
Aqui esta como hacerlo
http://www.mundo-maker.com/t5504-cambiar-la-velocidad-del-heroe-cualquier-velocidad
Leete lo que dice wecoc e intenta cambiandola a 3.76, o algo por ahi si es que mi matematica no esta mal.
avatar
xn1
Soñador
Soñador

0/3

Créditos 182

Gracias : 17

Volver arriba Ir abajo

RPG Maker XP Re: El movimiento diagonal más rápido del mundo

Mensaje por KLAUDAS el 2013-08-23, 14:45

Pero , ¿cómo bajo SÓLO la velocidad de movimiento de las diagonales? El movimiento de arriba, abajo, derecha e izquierda va bien con esa velocidad. El problema es que cuando pasa a movimiento en diagonal, va mucho más rápido :s.
Muchas gracias a los dos por las ideas, por ahí van los tiros.
avatar
KLAUDAS
Novato
Novato

0/3

Créditos 77

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: El movimiento diagonal más rápido del mundo

Mensaje por rpgmanumaker el 2013-08-23, 14:59

Bueno, me puse a buscar algún script de movimiento diagonal que permitiera imágenes de charas con movimiento en diagonal... encontré éste... haber si te sirve...
Código:
#===============================================================================
# Creado por: Northro
# Para: RPG Maker XP
# Nombre del Script: Movement Diagonal
# Versión del Script: 1.0
# Descripción: Mueve el personaje diagonalmente.
#===============================================================================

#===============================================================================
# Instrucciones: Pegar arriba del script "Main", para
#                poner a un personaje el character que
#                va a usar cuando se mueva en diagonal
#                debes ponerle el nombre del character
#                más "_diagonal".
#===============================================================================

#===============================================================================
# Clase "Game_Player"
#===============================================================================

class Game_Player < Game_Character
  def update
    actor = $game_party.actors[0]
    if @character_diagonal and graphic_movement_diagonal(actor)
      @character_name = actor.character_name + "_diagonal"
    else
      @character_name = actor.character_name
    end
    last_moving = moving?
    unless moving? or $game_system.map_interpreter.running? or
      @move_route_forcing or $game_temp.message_window_showing
      x = $game_player.x
      y = $game_player.y
      d = 0
      case Input.dir8
      when 1
        @through == true ? through = true : through = false
        if passable?(x - 1, y + 1, d)
          @character_diagonal = true
          @through = true if through == false
          move_left
          move_down
        end
        @through = false if through == false
      when 2
        @character_diagonal = false
        move_down
      when 3
        @through == true ? through = true : through = false
        if passable?(x + 1, y + 1, d)
          @character_diagonal = true
          @through = true if through == false
          move_down
          move_right
        end
        @through = false if through == false
      when 4
        @character_diagonal = false
        move_left
      when 6
        @character_diagonal = false
        move_right
      when 7
        @through == true ? through = true : through = false
        if passable?(x - 1, y - 1, d)
          @character_diagonal = true
          @through = true if through == false
          move_up
          move_left
        end
        @through = false if through == false
      when 8
        @character_diagonal = false
        move_up
      when 9
        @through == true ? through = true : through = false
        if passable?(x + 1, y - 1, d)
          @character_diagonal = true
          @through = true if through == false
          move_right
          move_up
        end
        @through = false if through == false
      end
    end
    last_real_x = @real_x
    last_real_y = @real_y
    super
    if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
      $game_map.scroll_down(@real_y - last_real_y)
    end
    if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
      $game_map.scroll_left(last_real_x - @real_x)
    end
    if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
      $game_map.scroll_right(@real_x - last_real_x)
    end
    if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
      $game_map.scroll_up(last_real_y - @real_y)
    end
    unless moving?
      if last_moving
        result = check_event_trigger_here([1,2])
        if result == false
          unless $DEBUG and Input.press?(Input::CTRL)
            if @encounter_count > 0
              @encounter_count -= 1
            end
          end
        end
      end
      if Input.trigger?(Input::C)
        check_event_trigger_here([0])
        check_event_trigger_there([0,1,2])
      end
    end
  end
  def graphic_movement_diagonal(actor)
    if moving?
      RPG::Cache.character(actor.character_name + "_diagonal", actor.character_hue) rescue return false
    end
  end
end

La página de donde lo he sacado: http://www.makerpalace.com/t2847-movement-diagonal
avatar
rpgmanumaker
Veterano
Veterano

0/3

Créditos 678

Gracias : 23

Volver arriba Ir abajo

RPG Maker XP Re: El movimiento diagonal más rápido del mundo

Mensaje por KLAUDAS el 2013-08-23, 15:18

Lo probaré a ver qué tal, si no corre más en la diagonal jeje. Muchas gracias.
avatar
KLAUDAS
Novato
Novato

0/3

Créditos 77

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: El movimiento diagonal más rápido del mundo

Mensaje por rpgmanumaker el 2013-08-23, 15:34

Espero que te funcione... dime si lo hizo o no... para intentar buscar otro scirpt que sirva.
avatar
rpgmanumaker
Veterano
Veterano

0/3

Créditos 678

Gracias : 23

Volver arriba Ir abajo

RPG Maker XP Re: El movimiento diagonal más rápido del mundo

Mensaje por KLAUDAS el 2013-08-23, 18:47

Rpgmanumaker, mil gracias por tu ayuda, pero sigue sin ser lo que necesito. El problema es que el script que me traes es incompatible con los moldes de jugadores que tengo hechos y tendría que rehacer tooooodos los charas que tengo montados (cerca de 200), así que supondría una pesadilla, porque en el script que me has puesto puedo poner el movimiento diagonal, pero en un archivo diferente y con _diagonal como parte del nombre del archivo para que el script lo reconozca. La posibilidad está ahí, porque no da el problema de la diagonal.

He estado investigando el segundo script, el que lo hace bien, pero no tiene los 8 frames ni posibilidad para ponerlos.
@move_distance = 0 if @move_distance == nil
@move_distance += Math.sqrt((last_real_x - @real_x) ** 2 +
(last_real_y - @real_y) ** 2)

La clave está aquí. Esta es la operación matemática que corrige el bug... pero ni idea de cómo incorporar esto a mi script T_T. XD es la pesadilla del verano ajjajaa
avatar
KLAUDAS
Novato
Novato

0/3

Créditos 77

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: El movimiento diagonal más rápido del mundo

Mensaje por orochii el 2013-08-23, 21:09

Prueba poniendo este apaño que hice sobre Main. Funciona xD, pero lastimosamente no es tan flexible como me gustaría :'D.
Código:
class Game_Character
  #--------------------------------------------------------------------------
  # * Update frame (move)
  #--------------------------------------------------------------------------
  def update_move
    # Convert map coordinates from map move speed into move distance
    distance = 2 ** @move_speed
    d_xx = ((@x * 128) - @real_x).abs
    d_yy = ((@y * 128) - @real_y).abs
    distance /= Math.sqrt(2) if(d_xx != 0)&&(d_yy != 0)
   
    # If logical coordinates are further down than real coordinates
    if @y * 128 > @real_y
      # Move down
      @real_y = [@real_y + distance, @y * 128].min
    end
    # If logical coordinates are more to the left than real coordinates
    if @x * 128 < @real_x
      # Move left
      @real_x = [@real_x - distance, @x * 128].max
    end
    # If logical coordinates are more to the right than real coordinates
    if @x * 128 > @real_x
      # Move right
      @real_x = [@real_x + distance, @x * 128].min
    end
    # If logical coordinates are further up than real coordinates
    if @y * 128 < @real_y
      # Move up
      @real_y = [@real_y - distance, @y * 128].max
    end
    # If move animation is ON
    if @walk_anime
      # Increase animation count by 1.5
      @anime_count += 1.5
    # If move animation is OFF, and stop animation is ON
    elsif @step_anime
      # Increase animation count by 1
      @anime_count += 1
    end
  end
end
En teoría debería funcionar, usando el primero,
Orochii Zouveleki
avatar
orochii
Reportero

0/3

Créditos 7724

Gracias : 436

Volver arriba Ir abajo

RPG Maker XP Re: El movimiento diagonal más rápido del mundo

Mensaje por KLAUDAS el 2013-08-23, 23:05

ay, Orochiii, es que siempre me salvas la vidaaaaaaaaaa <3
No tengo palabras para agradecértelo... ¡¡va a la perfección!! Dices que no es tan flexible como querrías, pero va perfect perfect ^^Very Happy 
avatar
KLAUDAS
Novato
Novato

0/3

Créditos 77

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: El movimiento diagonal más rápido del mundo

Mensaje por orochii el 2013-08-24, 15:10

Seh bueno, es que lo que hice sólo funciona con el movimiento diagonal del RPG Maker. Me gustaría haber hecho la ecuación correcta, y no un apaño que divide entre raíz de dos si ocurre un cambio en X e Y simultáneamente xd. Lo correcto habría sido aplicar algo de trigonometría, creo, pero se me hizo un enredo mental xD.

En fin, yo lo dejo así porque funciona en nuestro ambiente, si alguien quiere mejorarlo adelante,
Orochii Zouveleki
avatar
orochii
Reportero

0/3

Créditos 7724

Gracias : 436

Volver arriba Ir abajo

RPG Maker XP Re: El movimiento diagonal más rápido del mundo

Mensaje por Wecoc el 2013-08-26, 16:23

Estaba ausente, pero bueno xDD por si buscas una alternativa más tipo engine o por si alguien más tiene el mismo problema, yo hace un tiempo hice un sistema diagonal en el que la velocidad no iba tan rápido cuando te movías en diagonal, pasa que el aporte quedó camuflado en otro, pero quizá interese aún xD

Fue en el aporte Engine de Batalla ABC, y usa un script de solo 6 líneas y compatible con todo, y un engine de copiar-pegar en un evento común (Base de Datos) que usa solo una variable, nada más. No pido créditos, pues no es difícil de hacer.
avatar
Wecoc
Administrador
Administrador



Créditos 12211

Gracias : 632

Volver arriba Ir abajo

RPG Maker XP Re: El movimiento diagonal más rápido del mundo

Mensaje por KLAUDAS el 2013-08-26, 18:16

Muchas, Wecoc. Pues tb me sirve, al igual que el script de Orochii. Me lo he apuntado por si alguien tiene este problema más adelante, poder darle el enlace para que le ayude ^^
avatar
KLAUDAS
Novato
Novato

0/3

Créditos 77

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: El movimiento diagonal más rápido del mundo

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.