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.
Gonzalo Sánchez
Artículos relacionados
Recibe los artículos más leidos y beneficios especiales de nuestra academia
Empieza a trabajar en los roles digitales mejor pagados
Fórmate de manera práctica, e intensiva, con sesiones en vivo de forma flexible y efectiva. Te acompañamos desde que partes hasta que encuentras trabajo.