Kaamera: tegelasega kaasa liikumine; zoomimine¶
Kui tegelane liigub, siis kaamera liigub temaga kaasa¶
Kaamera mänguarenduses on oluline element, mis võimaldab mängijal keskenduda mängumaailma konkreetsele osale. Tavaliselt liigub kaamera mängija tegelase liikumisega kaasa, hoides tegelase ekraani keskosas. Lisaks saab kaamerat kasutada mängumaailma suurendamiseks või vähendamiseks (zoomimiseks), et pakkuda mängijale paremat ülevaadet.
Kaamera liikumise ja zoomimise teostamine¶
Alljärgnev koodinäide selgitab, kuidas kaamera liikumist ja zoomimist teostada. Samuti tagab kood, et kaamera ei liiguks mängumaailmast väljapoole.
public void updateGameCamZoom() { // Soovitud vaateala suuruse määramine
float desiredViewportWidth = gamePort.getWorldWidth() / 2;
float desiredViewportHeight = gamePort.getWorldHeight() / 2;
// Kaamera vaateala suuruse ja positsiooni seadistamine
gameCam.setToOrtho(false, desiredViewportWidth, desiredViewportHeight);
// Kaamera positsioneerimine mängija asukoha järgi
gameCam.position.set(player.getX(), player.getY(), 0);
// Kaamera X-telje piiramine
if (gameCam.position.x < gameCam.viewportWidth / 2) {
gameCam.position.x = gameCam.viewportWidth / 2;
} else if (gameCam.position.x > gamePort.getWorldWidth() - gameCam.viewportWidth / 2) {
gameCam.position.x = gamePort.getWorldWidth() - gameCam.viewportWidth / 2;
}
// Kaamera Y-telje piiramine
if (gameCam.position.y < gameCam.viewportHeight / 2) {
gameCam.position.y = gameCam.viewportHeight / 2;
} else if (gameCam.position.y > gamePort.getWorldHeight() - gameCam.viewportHeight / 2) {
gameCam.position.y = gamePort.getWorldHeight() - gameCam.viewportHeight / 2;
}
// Kaamera uuendamine
gameCam.update();
}
Koodis jagatakse maailma laius ja kõrgus kaheks, et määrata kaamera vaateala suurus. See võimaldab vaateala suurust kohandada vastavalt vajadusele. Kaamera paigutatakse mängija koordinaatide keskmesse, nii et tegelane püsib alati ekraani keskosas.
Kaamera X- ja Y-teljel liikumist piiratakse, et see ei väljuks mängumaailma piiridest. Näiteks kui mängija on mängumaailma servas, hoiab see loogika kaamera mängumaailma sees. Pärast muudatuste tegemist kutsutakse välja gameCam.update()
, mis rakendab kõik tehtud muudatused.
Seda meetodid saab kutsuda meetodis render
.
Zoomimine¶
Zoomimise põhimõte seisneb kaamera vaateala (viewport) suuruse muutmises. Kui vaateala suurust vähendatakse, tundub, et kaamera suumib sisse (objektid muutuvad suuremaks). Kui suurust suurendatakse, tundub, et kaamera suumib välja (objektid muutuvad väiksemaks). Alljärgnev koodinäide näitab, kuidas lisada zoomimise funktsioon koos parameetrite piirangutega:
public void handleCameraZoom(float zoomFactor) {
// Uuenda zoom taset
gameCam.zoom += zoomFactor;
// Kehtesta miinimum- ja maksimumväärtused zoom tasemele
if (gameCam.zoom < 0.5f) {
gameCam.zoom = 0.5f; // Maksimaalne suumimine (lähemal)
} else if (gameCam.zoom > 2.0f) {
gameCam.zoom = 2.0f; // Minimaalne suumimine (kaugemal)
}
// Kaamera X-telje piiramine
if (gameCam.position.x < gameCam.viewportWidth * gameCam.zoom / 2) {
gameCam.position.x = gameCam.viewportWidth * gameCam.zoom / 2;
} else if (gameCam.position.x > gamePort.getWorldWidth() - gameCam.viewportWidth * gameCam.zoom / 2) {
gameCam.position.x = gamePort.getWorldWidth() - gameCam.viewportWidth * gameCam.zoom / 2;
}
// Kaamera Y-telje piiramine
if (gameCam.position.y < gameCam.viewportHeight * gameCam.zoom / 2) {
gameCam.position.y = gameCam.viewportHeight * gameCam.zoom / 2;
} else if (gameCam.position.y > gamePort.getWorldHeight() - gameCam.viewportHeight * gameCam.zoom / 2) {
gameCam.position.y = gamePort.getWorldHeight() - gameCam.viewportHeight * gameCam.zoom / 2;
}
// Uuenda kaamera muudatused
gameCam.update();
}
Zoomi uuendamine:
gameCam.zoom += zoomFactor
zoomFactor
määrab, kui palju kaamera suumib. Positiivne väärtus eemaldab kaamera, negatiivne toob lähemale.
Zoom väärtusele seatakse piirangud, et vältida liiga suurt või väikest zoomi. Miinimumväärtus (0.5f) tähendab suuremat lähivaatlust, maksimumväärtus (2.0f) tähendab kaugemat vaadet.
Kaamera positsiooni piiramine: Kuna zoom muudab kaamera vaateala, tuleb uuesti arvutada, et kaamera ei väljuks mängumaailma piiridest. Selleks korrutatakse kaamera vaateala suurus zoom tasemega
gameCam.viewportWidth * gameCam.zoom / 2
Kaamera uuendamine:
gameCam.update()
rakendab kõik muudatused, sh uus zoomi tase ja positsiooni piirangud.
Kasutamine mängus:
Zoomi juhtimine saab toimuda näiteks klaviatuuri või hiire abil.
if (Gdx.input.isKeyPressed(Input.Keys.UP)) {
handleCameraZoom(-0.02f); // Zoom lähemale
}
if (Gdx.input.isKeyPressed(Input.Keys.DOWN)) {
handleCameraZoom(0.02f); // Zoom kaugemale
}
Pärast seda koodi implementeerismist saab zoom'ida sisse ja välja nagu on näidatud piltides:

