Hi,
zuerst ein paar Informationen zu mir. Ich bin 16Jahre alt, auf nem Gymnasium und hab Informatik als Grundkurs(Leistungskurs wurd nicht angeboten). Wir haben jetzt angefangen mit Java mithilfe des Programms "Greenfoot" vlt. kennt ihr es ja. Nun sind wir gerade dabei, nachdem wir mithilfe unseres Lehres ein erstes "Spiel" programmiert haben unser eigenes zu programmieren. Greenfoot ist nur 2D!
Meine Idee war, zwei Raumschiffe bzw. Objekte, die beide per Tastatur zu steuern sind aufeinander loszulassen. Diese sollen aufeinander schießen(bishierhin ohne Probleme geklappt). Das Geschoss zu erstellen ist kein Problem, nur bekomm ich es nicht hin, dass es an der Stelle des Objekts und in die gleiche Richtung erscheint. Ich hab eine Methode geschrieben es lässt sich auch kompilieren, aber dann kommt diese Fehlermeldung wenn ich es loslaufen lassen möchte
Code:
java.lang.NullPointerException
at Rakete.act(Rakete.java:32)
at greenfoot.core.Simulation.runOneLoop(Simulation.java:167)
at greenfoot.core.Simulation.run(Simulation.java:109)
die dazugehörige Klasse lautet:
Code:
public class Rakete extends Mover
{
private String name;
private Rakete rakete;
public Rakete(String neuerName)
{
name = neuerName;
}
public void act()
{
move();
if(Greenfoot.isKeyDown("left"))
{
turn(-10);
}
if(Greenfoot.isKeyDown("right"))
{
turn(10);
}
if(Greenfoot.isKeyDown("up"))
{
World world = getWorld();
world.addObject(new Laser(), rakete.getWidth(), rakete.getHeight()); //Das hier ist die Methode, die die Fehlermeldung verursacht
}
}
}
Die Klasse Mover ist Unterklasse von Actor. Diese wurden von unserem Lehrer geschrieben. Falls es weiterhilft kann ich diese auch noch posten.
Bitte helft mir, ich weiß nicht wo mein Fehler liegt. Dies soll keine vorgekaute Hausaufgabe sein, ich möchte nur Wissen, wie ich diesen Fehler wegbekomme.
Hallo,
dein privates Attribut "rakete" wird von dir nie initialisiert. Es hat daher immer den Wert "null". Wenn du nun in Zeile 30 darauf zugreifst, erhältst du die von dir genannte Fehlermeldung.
Du musst also "rakete" vor Verwendung initialisieren.
Irgendein Objekt ist nicht instanziiert, vermutlich world oder rakete.
Gib beide Objekte mal mit System.out.println(..) in die Konsole aus, daß Objekt, für das "null" ausgegeben wird, ist Dein Problem.
Noch ein Anmerkung, die 2 Zeilen Code könntest Du auch in eine schreiben:
Danke für die Hilfe soweit. Die Fehlermeldung ist jetzt weg, allerdings erscheint nun das Objekt Laser immer an der Stelle, an der das Objekt "Rakete" ganz zu beginn erscheint.
Hier der Code zur Welt, wo die Rakete erscheint
Code:
public class GameWorld extends World
{
private Rakete rakete;
private Igloo igloo;
public GameWorld()
{
// Create a new world with 20x20 cells with a cell size of 10x10 pixels.
super(1024, 768, 1);
rakete = new Rakete("Rakete");
igloo = new Igloo("Igloo");
Greenfoot.setSimulationSpeed(85);
addObject(rakete, 45, 55);
addObject(igloo, 950, 700);
GreenfootImage background;
background = getBackground();
background.scale(1024, 768);
}
}
sorry booty, ich les mich jetzt sicher nicht in eure ominöse 'Greenfoot' api ein, damit ich deine rakete finde....
poste mehr code, frag den lehrer oder deine kollegen.
wobei, würde sehr vernünftig klingen....
int getX()
Return the x-coordinate of the object's current location.
int getY()
Return the y-coordinate of the object's current location.
ich glaube du verwechselst generell breite/höhe mit position....