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 4139 miembros registrados.
El último usuario registrado es pepus2008.

Nuestros miembros han publicado un total de 84792 mensajes en 12068 argumentos.

Duda con variables y coordenadas

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP Duda con variables y coordenadas

Mensaje por Avenger_K el 2014-05-11, 12:37

El otro día me surgió un problema con un puzzle que estoy intentando hacer. Mi duda es como hacer para mover hacia una dirección el evento que este en cierta coordenada.
Digamos que al pulsar un botón quiero mover hacia la derecha lo que este en la coordenada x 10, y 8. ¿Seria eso posible? He estado trasteando un poco pero como las variables no son mi fuerte igual se me ha escapado algo.
Gracias de antemano.
Bye Bye!


Última edición por Avenger_K el 2014-05-11, 12:45, editado 1 vez
avatar
Avenger_K
Soñador
Soñador

0/3

Créditos 336

Gracias : 15

Volver arriba Ir abajo

RPG Maker XP Re: Duda con variables y coordenadas

Mensaje por rpgmanumaker el 2014-05-11, 12:41

Um... por lo que creo, no tiene fácil solución.

Lo único que se me ocurre es que si sabes que evento estará en esas coordenadas, en vez de intentar mover lo que esté en esas coordenadas simplemente muevas al evento. No sé si me entiendas XD.

Otra cosa que se me ha ocurrido es que hagas un condicional que verifique dónde está cada evento que pueda estar en esas coordenada y que si alguno está en las coordenadas indicadas lo muevas. Esto plantea el problema de que si son muchos eventos, el engine se te hará muy largo y complicado, pero no le veo otra solución...
avatar
rpgmanumaker
Veterano
Veterano

0/3

Créditos 679

Gracias : 23

Volver arriba Ir abajo

RPG Maker XP Re: Duda con variables y coordenadas

Mensaje por Avenger_K el 2014-05-11, 14:10

Al final pude encontrar otro modo de hacerlo, aun que variando un poco el modo de ver el puzzle.
Gracias de todos modos :)
Bye Bye!
avatar
Avenger_K
Soñador
Soñador

0/3

Créditos 336

Gracias : 15

Volver arriba Ir abajo

RPG Maker XP Re: Duda con variables y coordenadas

Mensaje por Wecoc el 2014-05-11, 16:47

Por si alguna vez alguin más tiene la duda, y a modo más general. Obtener un evento que cumpla cierta restricción en el mapa se puede hacer con el método select.

Éste código simplifica la llamada desde Llamar evento:

Código:
class Game_Map
  def get_events(hash)
    array = $game_map.events.values.clone
    for i in 0...hash.keys.size
      array = array.select do |event|
        if event.methods.include?(hash.keys[i].to_s)
          event.send(hash.keys[i]) == (hash.values[i])
        end
      end
    end
    array.sort!{|a, b| a.id <=> b.id}
    return array
  end
 
  def get_event(hash)
    get_events(hash)[0]
  end
 
  def get_evcoord(x, y)
    hash = {:x => x, :y => y}
    get_event(hash)
  end
end


El problema es que si solo lo haces por coordenadas puede haber problemas cuando dos eventos estén en la misma.

La llamada va por hash, por ejemplo {:x => 10, :y => 11} lo cual permite ir más allá de las coordenadas; :direction, :through, :bush_depth, :terrain_tag, :trigger ......

Entonces se puede hacer

$game_map.get_events({:x => 10, :y => 11})

y obtendrá una array con todos los eventos que haya en esa restricción (vacía si no hay ninguno)

Muy similarmente haciendo

$game_map.get_event({:x => 10, :y => 11})

Hace lo mismo pero devuelve solo el primero de la lista. Si no hay ninguno devuelve nil (es más práctico pero tiene el problema que dije antes de más de un evento que lo cumpla)

Finalmente se puede usar

$game_map.get_evcoord(10, 11)

Para abreviar el caso concreto de las coordenadas x, y.

Edito:

Ya decía yo que lo había visto en otra parte xDD
Hay una manera alternativa similar de hacer lo mismo para el caso de las coordenadas, que es usar el Engine Basics que Eron hizo para RPG maker - La historia Tutorial (ver apartado 1)

Código:
#==============================================================================
# ** Engine Basics - Autor: Eron
#==============================================================================

class Coords
  def initialize(x, y)
    @data = [x, y]
  end
 
  def x
    return @data[0]
  end
 
  def y
    return @data[1]
  end
 
  def x=(value)
    @data[0] = value
  end
 
  def y=(value)
    @data[1] = value
  end
 
  def inspect
    "Coords: (#{x}, #{y})"
  end
 
  def to_a
    return @data
  end
end

class Array
  def to_coord
    Coords.new(self[0], self[1])
  end
end

module Engine_Basics
  def get_coords(x, y)
    return Coords.new(x, y)
  end
 
  def under_coords(event = $game_player)
    get_coords(event.x, event.y)
  end

  def front_coords(event = $game_player)
    coords = get_coords(event.x, event.y)
    case event.direction
      when 2 then coords.y += 1 # Abajo
      when 4 then coords.x -= 1 # Izquierda
      when 6 then coords.x += 1 # Derecha
      when 8 then coords.y -= 1 # Arriba
    end
    return coords
  end

  def get_tile(x, y, layer = 0)
    coords = get_coords(x, y)
    return $game_map.data[coords.x, coords.y, layer] - 384
  end
 
  def under_tile(layer = 0, event=$game_player)
    coords = under_coords(event)
    return $game_map.data[coords.x, coords.y, layer] - 384
  end

  def front_tile(layer = 0, event = $game_player)
    coords = front_coords(event)
    return $game_map.data[coords.x, coords.y, layer] - 384
  end

  def get_terrain(x, y, layer = 0)
    coords = get_coords(x, y)
    return $game_map.terrain_tag_by_layer(coords.x, coords.y, layer)
  end
 
  def under_terrain(layer = 0, event = $game_player)
    coords = under_coords(event)
    return $game_map.terrain_tag_by_layer(coords.x, coords.y, layer)
  end

  def front_terrain(layer = 0, event = $game_player)
    coords = front_coords(event)
    return $game_map.terrain_tag_by_layer(coords.x, coords.y, layer)
  end

  def get_event(x, y, through = true)
    coords = get_coords(x, y)
    x, y = coords.x, coords.y
    result = $game_map.events.values.select{|ev| ev.x == x and ev.y == y}
    if through
      for i in 0...result.size
        if result[i].through == true
          result[i] = nil
        end
      end
    end
    return result.compact[0]
  end
 
  def under_event(through = true, event = $game_player)
    coords = under_coords(event)
    x, y  = coords.x, coords.y
    result = $game_map.events.values.select{|ev| ev.x == x and ev.y == y}
    if through
      for i in 0...result.size
        if result[i].through == true
          result[i] = nil
        end
      end
    end
    return result.compact[0]
  end

  def front_event(through = true, event = $game_player)
    coords = front_coords(event)
    x, y  = coords.x, coords.y
    result = $game_map.events.values.select{|ev| ev.x == x and ev.y == y}
    if through
      for i in 0...result.size
        if result[i].through == true
          result[i] = nil
        end
      end
    end
    return result.compact[0]
  end
end

avatar
Wecoc
Administrador
Administrador



Créditos 9218

Gracias : 493

Volver arriba Ir abajo

RPG Maker XP Re: Duda con variables y coordenadas

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.