Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Linja med @FXML forteller JavaFX at metoden er lagt inn for å stemme med FXML-kode av typen onKeyPressed="..." og gir JavaFX lov til å kalle den. Selve metoden tar i mot et objekt som bl.a. forteller hvilken tast som ble trykket. Taste-koden hentes ut i første linje av metoden og skrives ut i andre linje. Hvis du nå kjører appen og trykker noen taster, så skal du se at det skrives ut en beskjed i Console-panelet i Eclipse for hver tast som trykkes.

Steg 4:

...

Flytte figur

Å reagere på tastetrykk er vel og bra, men målet er jo å flytte figuren, så her må det flere triks til!

...

Nå må du legge inn en variabel i FigurstyringController-klassen med det samme navnet! Når FXMLLoader-en laster inn FXML-koden (dette skjer i start-metoden i FigurstyringApp), så sørger den samtidig for at denne variabelen settes til riktig figur-objekt, slik at keyPressed-koden kan flytte rundt på det (eller gjøre andre endringer. Koden for player-variabelen er som følger og kan legges inn rett over keyPressed-metoden:

Code Block
languagejava
@FXML
Node player; 

@FXML brukes litt som over, for å si fra om at variabelen er lagt inn for å stemme med FXML-kode av typen fx:id="..." og gir JavaFX lov til å endre den.

Det siste som trengs er å legge inn kode som ut fra hva slags tast som trykkes flytter figuren i ønsket retning. Trikset er å ha en if som sjekker taste-koden mot taste-kodene for piltastene og bestemmer i hvilken retning figur-posisjonen skal endres:

Code Block
languagejava
@FXML
void keyPressed(KeyEvent keyEvent) {
	KeyCode keyCode = keyEvent.getCode();
	// variabler for retningen spiller-figuren skal flyttes i
	int dx = 0, dy = 0;
	// endre retningen tilsvarende piltasten
	if (keyCode == KeyCode.LEFT) {
		dx = -1;
	} else if (keyCode == KeyCode.RIGHT) {
		dx = 1;
	} else if (keyCode == KeyCode.UP) {
		dy = -1;
	} else if (keyCode == KeyCode.DOWN) {
		dy = 1;
	}
	// gjør selve endringen av posisjonen
	player.setLayoutX(player.getLayoutX() + dx);
	player.setLayoutY(player.getLayoutY() + dy);
}

Vi bruker her variablene dx og dy for å lagre hvor langt til venstre (dx < 0) eller høyre (dx > 0) og opp (dy < 0) eller ned (dy > 0) som spiller-figuren skal flyttes. Etter alle if-setningene, så skal dx og dy være justert til å passe med piltastene. Merk at hvis en trykker helt andre taster, så vil dx og dy begge være 0, og det betyr jo at spiller-figuren står stille!

Til slutt settes layoutX- og layoutY- egenskapene (med setLayoutX og setLayoutY) til verdien de har nå (getLayoutX() og getLayoutY()) pluss justeringen som er lagt inn i dx og dy.

Kjør koden og så hva som skjer! Sjekk spesielt hva som skjer om du flytter spiller-figuren inn i de andre figurene.

Steg 4: Kollisjonssjekk

Hva har du lært?

  • å få JavaFX til å kalle en metode automatisk når en tast trykkes ned
  • å flytte en figur avhengig av hvilken tast som trykkes
  • å klassifisere figurer med styleClass-attributtet
  • å sjekke om spiller kolliderer (overlapper) med andre figurer
  • å reagere på ulikt vis avhengig av hva slags type figur som spilleren treffer på

...