Java ID/Name von Objekten angeben lassen

PickableItem als Basisklasse und zB. Rock als Unterklasse davon, wie wärs damit?
Oder hab ich dein Problem falsch verstanden?

Dann mit "instanceof" vergleichen...
 
@hubertus
Sein Problem ist es eher, dass er den Unterschied zwischen Klasse und Objekt noch nicht ganz verstanden hat.
Ich persönlich würde ja eher ein Item-Objekt und ein Pickable-Interface programmieren, aber das ist auf Nynex' Wissenstand bezogen noch zu weit in der Zukunft.


@Nynex
Nynex schrieb:
Ich hatte das nur für einen Moment vergessen, dass ich nicht mit einer Instanz von "PickableItem" arbeite. Jedoch muss die Methode von wo anders aus aufgerufen werden. Ich werde das schon irgendwie hinbekommen! ;)
Na ja, das macht man heute eigentlich alles mit Objekten statt Klassen.

Es ginge noch die Variante, dass man eine Klasse PickableObjekt programmiert, in der ein Array, eine Liste oder eine Map anzeigt, wo sich aufhebbare Dinge befinden. Das schränkt aber die Flexibilität deutlich ein und wird eigentlich nur bei zeitkritischen oder extrem simplen Dingen verwendet. Aber du willst doch sicher mehr machen, oder? Man denke zB an einen hypothetischen NPC, der gleichzeitig mit dir Dinge vom Boden aufhebt. Deine Variante, dass mit statischen Klassen und Variablen zu machen, erlaubt so was nur mit sehr viel Verrenkungen.
 
Jap, mit PickableItem als Interface ist das ganze natürlich noch besser, wird ja keine "PickableItems" geben die rumliegen, sondern nur zB "Rocks", die dann PickableItem implementieren sollten :)
 
Mir ist ein Problem aufgefallen,
Code:
    if (PickableItem.pickUp == true) {
das kann niemals als static funktionieren wenn mehrere PickableItem erstellt werden, da entweder checkEnvironment() nur einmal aufgerufen wird und so nur die Position eines Items überprüft wird und das zweite nie aufgehoben werden kann, oder checkEnvironment() mehrfach aufgerufen wird wobei schon der zweite Aufruf das Ergebnis des ersten überschreibt (wenn der Code etwa so aussieht):
Code:
public void checkEnvironment(InputHandler input) {
  if(Game.player.x == x && Game.player.y == y) {
    pickUp = true;
  } else {
    pickUp = false;
  }
}

Stattdessen sollte das etwa so aussehen:
Code:
public class PickupItem {
  public boolean pickUp = false;
...
...
  public void checkEnvironment(InputHandler input) {
    pickUp = (Game.player.x == x && Game.player.y == y);
  }
...
}

Und zum testen eine For-Schleife über die rockList, und für jeden Rock checkEnvironment() aufrufen.
 
Zurück
Oben