Parte 1. En este tutorial aprenderemos las bases para crear un juego con GOSU, como cargar la pantalla principal y como mover objetos utilizando el teclado.

Antes de empezar el primer paso es instalar la gema

gem install gosu

Creando la ventana de Gosu

En la mayoría de los frameworks para crear juegos el primer paso es crear una ventana, para eso, crearemos una clase del tipo Window que trae la librería y llamaremos a su método show.

require 'gosu'

class GameWindow < Gosu::Window
  def initialize
    super 640, 480, false
    self.caption = "Mi primer juego"
  end
end

window = GameWindow.new
window.show

640, 480 son las dimensiones de la pantalla, en este caso 640 pixeles en el eje horizontal, y 480 en el vertical, el tercer parámetro indica si el juego corre fullscreen o no.

Una vez que llamamos al método show, ruby queda detenido en un bucle que pertenece a window y lo hará hasta que cerremos el juego.

Dibujando elementos

Dentro de la ventana vamos a tener un método principal llamado draw, este se llama todo el tiempo y sirve para dibujar todos los elementos especificados.

También necesitamos un elemento para dibujar, para eso vamos a crear una clase nueva llamada Player.


require 'gosu'

class GameWindow < Gosu::Window
  def initialize
    super 640, 480, false
    self.caption = "Mi primer juego"
    @player = Player.new(self)
  end

  def draw
    @player.draw
  end
end

class Player
  def initialize(window)
    @image = Gosu::Image.new(window, "df.png", true)
  end
  def draw()
    @image.draw(300, 200, 0)
  end
end

window = GameWindow.new
window.show

Dentro de la clase player es útil especificar un método para dibujar para mandarlo a llamar, de hecho por cada elemento en nuestro juego crearemos este método para dibujar, y de esa forma simplemente en el método principal de draw dibujamos todos los elementos.

En este ejemplo estamos dibujando al jugador en las posición 300,200, pero ahora iremos cambiando esas posiciones.

Moviendo elementos con Gosu

Para mover elementos necesitaremos convertir los números de posición dentro de player en variables que iremos modificando en el tiempo, para eso utilizaremos un nuevo método, llamado update

class Player
  def initialize(window)
     @x = 300
     @y = 200
    @image = Gosu::Image.new(window, "df.png", true)
  end
  def draw()
    @image.draw(@x, @y, 0)
  end
  def update()
    @x = @x + 1
  end
end

Este nuevo método update también tenemos que llamarlo dentro de la ventana principal, para eso también agregaremos el método update en la clase window.

class GameWindow < Gosu::Window
  def initialize
    super 640, 480, false
    self.caption = "Mi primer juego"
    @player = Player.new(self)
  end

  def draw
    @player.draw
  end

  def update
    @player.update
  end

end

Si ahora corremos el juego veremos la imagen moviéndose.

Los métodos draw y update de la ventana principal son importantes porque se mandan a llamar solos en cada ciclo y permiten dibujar y actualizar todos los otros elementos.

Utilizando el teclado

Para utilizar el teclado simplemente ocuparemos el método de GOSU button_down? a este método le podemos pasar las constantes que trae gosu para determinar si ese botón ha sido presionado, para mayor claridad veamos el siguiente ejemplo.

class GameWindow < Gosu::Window
  def initialize
    super 640, 480, false
    self.caption = "Mi primer juego"
    @player = Player.new(self)
  end

  def draw
    @player.draw
  end

  def update
    if button_down? Gosu::KbRight
      @player.update
    end
  end

end

En este ejemplo sólo llamamos al método update si se presiona la tecla flecha derecha, y por lo tanto solo se mueve mientras la presionamos.

Por último veamos un ejemplo donde el objeto se pueda mover en más de una dirección.

require 'gosu'

class GameWindow < Gosu::Window
  def initialize
    super 640, 480, false
    self.caption = "Mi primer juego"
    @player = Player.new(self)
  end

  def draw
    @player.draw
  end

  def update
    if button_down? Gosu::KbRight
      @player.move_right
    elsif button_down? Gosu::KbLeft
      @player.move_left
    end
  end

end

class Player
  def initialize(window)
     @x = 300
     @y = 200
    @image = Gosu::Image.new(window, "df.png", true)
  end
  def draw()
    @image.draw(@x, @y, 0)
  end
  def move_right()
    @x = @x + 1
  end
  def move_left()
    @x = @x - 1
  end

end

window = GameWindow.new
window.show

Te gustó el tutorial?, comparte y espera la segunda parte.