Vecka 4 – Meny

Hejsan! Denna veckan har jag arbetat med en meny som skall användas till vårat spel. I denna menyn skall man kunna bläddra mellan fyraolika options(än så länge finns enbart tre). De som skall finnas är:

  • Play
    Rätt uppenbart, spelet startar om man trycker på denna.
  • Options
    Om man trycker på detta så kommer man till en ny sida med nya val. Där kommer det finnas några simpla val som man kan välja mellan, såsom fullscreen on eller off eller vilka knappar man vill styra ugglan med.
  • Highscore
    Här kan man se de olika poäng man fått de senaste gångerna man har spelat uppradat fint i som en top tio lista.
  • Exit
    Också hyfsat uppenbart, denna knapp stänger av spelet.

Game_Menu.gif

Så här ser menyn ut just nu, som sagt, endast tre val än så länge men det kommer komma ett highscore val när highscoren är implementerad så den fungerar.

Det är inte så jätte komplicerat att göra en simpel meny som jag har gjort.  Jag har en meny klass som har olika funktioner såsom MoveUp och MoveDown. I menyn konstruktor så sätter jag tre olika meny texter och bestämmer deras typsnitt, färg, vad som ska stå och vart på skärmen de skall visas och dessa ritas sedan ut. Sedan kollar mina MoveUp och MoveDown funtioner vad som är valt just nu genom att ge det valet färgen röd istället för vit.

Jag har även en klass som heter MenuState som har en Update funktion som kollar ifall en speciell knapp har blivit nertryckt, tex har jag satt att man ska styra menyn med upp och ner pilarna och sedan välja det man är på med knappen enter.

Ett problem som jag hade när jag gjorde detta var att när man tryckte på någon knapp så hoppade den flera gånger istället för att vänta på att man släppte knappen och sedan tryckte igen så registrerade den knapptycken upp till fem gånger när man endast tryckte en gång. Jag lekte lite med några olika lösningar men hittade bara en som funkar hyfsat och det var att sätta en sleep funktion. Denna sleep funktionen gör så vid varje knapp tryck man gör så väntar programmet 150 millisekunder innan den registrerar något annat och detta verkade fungera utmärkt än så länge.

Nu kanske du undrar hur den vet vad som skall hända när jag trycker på play? Det finns även en simpel lösning till detta. Jag har tre olika “cases” i menustate där 0 är play knappen, 1 är options och 2 är options. När enter knappen har tryckts på case 0 som är play så returnar den false i update och då säger vår statemanager att nästa state som kommer när menustates update är false är gamestate där spelet körs.

Under tiden jag har suttit och skrivit detta så har jag lyckats få in en menu till som ritas ut när man går in på options. Jag har två saker som bestämmer vad som skall visas på skärmen. “getMenu” i MenuState är default 0 och visar den första menyn. “selectedMenu” i Menu klassen är också default 0. När den som spelar trycker på options så uppdateras getMenu och selectedMenu till 1 och visar de nya sakerna som man kan välja mellan. Det ser ut såhär:

output_FwFEMp.gif

 

I framtiden så kommer jag försöka ändra så att man kan använda musen istället för knapparna för att navigera menyn också.

About Simon Glans

2015 Programming