Okej, så vi har ett spelfönster. Inte illa! Men för att det ska bli ett spel måste det finnas lite grejor inuti fönstret också. Till att börja med behöver vi något att spela med, alltså något som spelaren kan flytta runt därinne i fönstret. Och eftersom det här ska bli ett rymdspel så skulle det väl passa bra med ett rymdskepp?
För att kunna skapa ett rymdskepp måste vi skriva ytterligare en klass. Jag tycker att vi kallar den för Hero
, som betyder "hjälte". Så direkt efter Window
-klassen skriver vi:
class Hero
def initialize(window)
@window = window
end
end
Du kanske tycker att det ser konstigt ut med alla window
. Men de behövs för att rymdskeppet ska veta var det hör hemma – i vårt spelfönster.
Nu behöver vi en bild på rymdskeppet också. Eller, som det också kallas, en ikon. Här nedanför ligger en bild som du kan använda. Det är bara att högerklicka på bilden och spara den på datorn. Låt den behålla namnet "spaceship.png". Flytta den sedan till den mapp där du sparade ditt program.
När bilden är på plats i rätt mapp ska vi lägga till en rad i Hero
-klassen, så att datorn vet vilken bild som ska användas:
class Hero
def initialize(window)
@window = window
@icon = Gosu::Image.new(@window, "spaceship.png", true)
end
end
Sedan ska vi ge rymdskeppet en startposition. Som du kanske minns är spelfönstret 640 pixlar brett och 480 pixlar högt. Även positioner mäts i pixlar, och man börjar räkna från övre vänstra hörnet.
Det här blir lättare att begripa om man provar sig fram. Låt oss lägga till ytterligare en metod i Hero
-klassen, som heter draw
("rita"):
class Hero
def initialize(window)
@window = window
@icon = Gosu::Image.new(@window, "spaceship.png", true)
end
def draw
@icon.draw(0, 0, 2)
end
end
Koden i draw
-metoden säger att rymdskeppet ska ha positionen 0 pixlar i sidled och 0 pixlar i höjdled. Den sista siffran, tvåan, kan du bortse från tills vidare.
För att rymdskeppet ska visas i fönstret måste vi göra ett par ändringar i Window
-klassen också:
class Window < Gosu::Window
def initialize
super(640, 480, false)
@hero = Hero.new(self)
end
def update
end
def draw
@hero.draw
end
end
I metoden initialize
lägger vi till en rad som får datorn att skapa ett nytt rymdskepp, enligt beskrivningen i klassen Hero
. Och i draw
-metoden gör vi så att skeppet ritas ut i fönstret.
Om du nu sparar programmet och provkör det så lär det fönster som visas se ut på det här viset:
Men vi vill kanske att rymdskeppet ska ritas lite längre till höger, och lite längre ner i fönstret. Vi ändrar i Hero
-klassens draw
-metod:
class Hero
def initialize(window)
@window = window
@icon = Gosu::Image.new(@window, "spaceship.png", true)
end
def draw
@icon.draw(100, 215, 2)
end
end
Nu ska bilden av rymdskeppet ritas 100 pixlar till höger, och 215 pixlar ner i fönstret. Kör programmet igen. Det ser bättre ut, inte sant? Testa gärna att flytta rymdskeppet till andra positioner. Och varför inte prova att ändra storleken på spelfönstret när du ändå är igång?
Det program som vi har skrivit så här långt ska nu se ut så här:
require 'gosu'
class Window < Gosu::Window
def initialize
super(640, 480, false)
@hero = Hero.new(self)
end
def update
end
def draw
@hero.draw
end
end
class Hero
def initialize(window)
@window = window
@icon = Gosu::Image.new(@window, "spaceship.png", true)
end
def draw
@icon.draw(100, 215, 2)
end
end
window = Window.new
window.show
Det här börjar faktiskt likna ett riktigt spel! Fast visst vore det roligare om vi kunde styra rymdskeppet också? Det ska vi ordna i nästa lektion!