Minulla on pääohjelma Rogue. Lisäksi on luokka Map, jossa hoidetaan esimerkiksi piirto.
Ongelmana on, että tarvitsen muuttujat camerax ja cameray, joihin sekä luokat Rogue ja Map pääsevät käsiksi ja voivat muuttaa.
Miten moisen toteutan?
-T
Teet siihen luokkaan jossa cameraX ja cameraY muuttujat ovat metodit joilla
niiden arvoa voi kysyä ja asettaa aka:
public void setCameraX(int value) { this.cameraX = value; } public void getCameraX() { return this.cameraX; }
Jos välttämättä tarvitset globaaleja muuttujia, niin niitäkin pystyy käyttämään. Globaalien muuttujien käyttö on yleensä huonoa ohjelmointityyliä ja usein, ellei aina, on parempi käyttää edellä mainittuja jonkin olion jäsenfunktioita.
public class Luokka { public static int globaalimuuttuja; public static long[] globaalitaulukko = {4, 5, 6}; }
Ja viittaus noihin onnistuu kirjoittamalla Luokka.globaalimuuttuja.
Et nyt tainnut pete tajuta ongelmaani.
Jos määritän camerax:n esim näin:
class Cam { private static int x = 0; public static void addx(){ x++; } public static int getx(){ return x; } }
...niin addx metodi ei toimi. this.x ei käänny.
Ei tietenkään this.x käänny, jos x on staattinen muuttuja, koska this. viittaa *tähän* olioon ja x ei ole tämän olion jäsenmuuttuja, vaan se on luokan Cam globaali muuttuja (jota siis on kaikille Cam-olioille yhteinen).
Sami kirjoitti:
public class Luokka { public static int globaalimuuttuja; public static long[] globaalitaulukko = {4, 5, 6}; }Ja viittaus noihin onnistuu kirjoittamalla Luokka.globaalimuuttuja.
Tuo on vähän harhaanjohtavaa koska Javassa ei oikeasti ole mitään globaalejamuuttujia:
Et Sami vastannut ongelmaani.
Toinen tapa, mitä yritin, oli luoda camera-olio Rogue-luokan sisään. Kuitenkaan en pääse Map-luokasta käsiksi Roguen camera-olioon.
Onko tähän tapoja?
public Camera { private int x; private int y; public Camera(int x, int y) { this.x = x; this.y = y; } public int getX() { return x; } // ... } public Rogue { private Map map; public Rogue() { map = new Map(); System.out.println("Kameran x-koordinaatti: " + map.getCamera().getX()); } } public Map { private Camera camera; public Map() { camera = new Camera(120, 0); } public Camera getCamera() { return camera; } }
Taikaviitta kirjoitti:
Et Sami vastannut ongelmaani.
Toinen tapa, mitä yritin, oli luoda camera-olio Rogue-luokan sisään. Kuitenkaan en pääse Map-luokasta käsiksi Roguen camera-olioon.
Onko tähän tapoja?
Muutat koodiasi niin että koordinaatti muuttujat ei ole luokkamuuttujia(static) vaan instanssimuuttujia(ei static).
Ah, kiitos kaikille vastanneille. Opin taas paljon uutta, ja löysin jopa mistä vika johtui.
Luokka Map (extends JPanel) siis jää uudelleenpiirtämättä muuttujien muuntelun jälkeen.
metodissa paintComponent(Graphics g) on siis piirto. Miten saan piirrettyä uudelleen Map-luokan? rePaint?
Edit. Siis repaint() löytyi.
Problem == NULL.
Aihe on jo aika vanha, joten et voi enää vastata siihen.