Versions Compared

Key

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

...

Nå skal vi få spiller-figuren til å bevege seg når du trykker piltastene. Først må du ordne det slik at FigurstyringController-objektet får beskjed når tastene trykkes. Dette kan du gjøre i SceneBuilder, slik:

  • Klikk du på bakgrunnen (altså panelet som inneholder figurene), slik at hovedpanelet velges i element-treet nede til venstre.
  • Velger Velg Code-seksjonen i panelet til høyre for tegnevinduettegnepanelet. Du finner den nederst i hjørnet.
  • Code-seksjonen er nokså lang, så du må rulle litt nedover før du finner egenskap-gruppa som heter Keyboard med egenskapen On Key Pressed.
  • Fyll inn keyPressed.

Det skal se omtrent slik ut:ut omtrent som i figuren til høyre.

Dette forteller JavaFX at når en tast trykkes (On Key Pressed) så skal metoden keyPressed i FigurstyringController-objektet kalles.

Husk å lagre før du går tilbake til Eclipse for å skrive inn keyPressed-metoden i FigurstyringController-klassen.

...

Code Block
languagejavafx
<AnchorPane onKeyPressed="#keyPressed" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
	<children>
		<Circle fill="LIME" layoutX="612.0" layoutY="220.0" radius="85.0" stroke="BLACK" strokeType="INSIDE" />
		<Rectangle arcHeight="5.0" arcWidth="5.0" fill="DODGERBLUE" height="150.0" layoutX="449.0" layoutY="351.0" stroke="BLACK" strokeType="INSIDE" width="78.0" />
		<Ellipse fill="RED" layoutX="266.0" layoutY="135.0" radiusX="28.0" radiusY="75.0" stroke="BLACK" strokeType="INSIDE" />
		<Group fx:id="player      	<Arc fill="WHITE" layoutX="182139.0" layoutY="394332.0">
			<children>
				<Arc fill="WHITE" length="270.0" radiusX="45.0" radiusY="45.0" startAngle="45.0" stroke="BLACK" strokeType="INSIDE" type="ROUND" />
			</children>
		</Group>
	</children>
</AnchorPane>

Du kan jobbe direkte med FXML-koden i Eclipse, men det kan være litt vanskeligere å finne frem. Du må du passe på å få lagt inn onKeyPressed="#keyPressed" på rett sted selv!

...

Det første problemet som må løses er å gi FigurstyringController-objektet mulighet til å endre på spiller-figuren. For å få det til så må den gis et navn, både i FXML-fila og i FigurstyringController-klassen.

Med SceneBuilder, så gjør du som følger:

  • Velg spiller-figuren, enten i tegnepanelet eller i element-treet nede til venstre.
  • Velg så Code-seksjonen i egenskaper-panelet til høyre (samme som du gjorde over).
  • Finn fx:id-egenskapen øverst i Code-seksjonen i Identity-gruppa.
  • Fyll inn player, evt. et annet navn (bare vanlige bokstaver)

Det skal se ut omtrent som i figuren til høyre.

Image Added

Som tidligere så kan du legge inn denne koden i FXML-fila i Eclipse, om du ønsker. Finn FXML-koden for spiller-figuren og legg inn fx:id="player". Det skal se omtrent slik ut:

Code Block
languagejavafx
<Arc fx:id="player" fill="WHITE" layoutX="139.0" layoutY="332.0" length="270.0" radiusX="45.0" radiusY="45.0" startAngle="45.0" stroke="BLACK" strokeType="INSIDE" type="ROUND" />

Nå må du legge inn en variabel 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.

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å

...