OK Fehler gefunden: Mal wieder die bösen static Variablen...
Mein Ratschlag für Einsteiger in der Objekt-orientierten Programmierung ist ja immer: VERWENDE NIE STATIC !
...es sei denn du weisst, was das ist, weisst was es tut und es gibt keinen anderen guten Weg ;-)
static ist böse, static ist die dunkle Seite der Macht, static ist prozedurale Programmierung und nicht Objekt-orientiert
Mit static geht zwar einiges scheinbar einfacher, aber es ist in den meisten Fällen einfach nur unsauber programmiert...quick & dirty.
Das Problem ist static Variablen gelten FÜR ALLE INSTANZEN EINER KLASSE !!!
1public class NormalMissile {
2
3 static int x, y;
4 Bitmap nm;
5
6 public NormalMissile(int x, int y) {
7 nm = ArcadeGame.getImage(R.drawable.missiles);
8
9 this.x = x;
10 this.y = y;
11 }
D.h. jedes mal wenn du eine neue NormalMissile erzeugst, setzt du die Koordinaten FÜR ALLE RAKETEN um.
D.h. weiter, es gibt mehrere Raketen, aber die werden alle übereinander gemalt, weil sie alle auf dieselben Koordinaten zugreifen.
Also: verwende static am besten garnicht. Verwende saubere Kapselung in deinen Datenklassen mit private Variablen und getter/setter Methoden.
Zum Beispiel so:
1public class NormalMissile {
2
3 private int x, y;
4
5 public NormalMissile(int x, int y) {
6 this.x = x;
7 this.y = y;
8 }
9
10 public int getX() {
11 return x;
12 }
13
14 public void setX(int x) {
15 this.x = x;
16 }
17
18...
BTW: Per Konvention sollte man getter und setter exakt nach der Variable benennen und den ersten Buchstaben der Variable groß schreiben.
Das nennt sich dann "Bean-konform".
Also immer:
1private String variable;
2public String getVariable() {
3return variable;
4}
Ich hoffe das hilft dir weiter...auch langfristig
Grüße,
Rafael
— geändert am 26.01.2011, 08:41:00
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.