Für meinen Informatikkurs wurde ich gebeten, ein Spiel zu erstellen. Alles lief reibungslos, bis ich auf das Thema Mauseingabe stieß. Was ich versuche zu erreichen, ist mit einer Maus auf eine bestimmte Position im JFrame zu klicken, dann eine Kugel an der Stelle meines Charakters initialisieren und auf den Punkt der Maus schießen. Ich verstehe bereits, wie man trig einsetzt, um die Kugel in diesem Winkel schießen zu lassen. Das Problem ist, dass wenn ich eine Kugel nach dem Klicken mit der Maus abfeuere, die x- und y-Positionen meines Charakters nicht auf die Kugel aktualisiert werden, was bedeutet, dass die Kugel immer an der gleichen Stelle initialisiert wird. Hier sind Codesegmente, in denen ich glaube, dass sie das Problem verursachen.Erschwerendes Problem mit Mausereignis
public void mousePressed(MouseEvent e)
{
handler.addObject(new Bullet("res\\Fireball.png",x,y + ,ID.BasicEnemy,handler));
}
public void mouseReleased(MouseEvent e)
{
}
public void tick()
{
x+=velX;
y+=velY;
x = Game.clamp(x,0,Game.WIDTH-40);
y = Game.clamp(y,0,Game.HEIGHT-40);
collision();
}
Von dem, was ich durch Forschung sammelte der Grund, warum die x und y in mouse() -Methode Aktualisierung ist nicht der Fall, da das Maus-Ereignis in einem anderen Thread als mein Tick ist. Ich bin ein wenig neu in der Programmierung von Java-Spielen und ich frage mich, ob es da draußen jemanden geben würde, der mir explizite Vorschläge machen könnte. Der eigentliche Code meines Spiels ist sehr lang, also habe ich ihn auf das obige Stück beschränkt. (Ich habe synchronisiertes reserviertes Wort und flüchtige Variablen versucht, aber ich könnte sie falsch implementiert haben)
Und wenn das hilft, umgekehrt Wenn ich das unten mache, erscheint das Bullet-Objekt nie!
public void mousePressed(MouseEvent e)
{
press=true;
}
public void mouseReleased(MouseEvent e)
{
press=false;
}
public void tick()
{
x+=velX;
y+=velY;
x = Game.clamp(x,0,Game.WIDTH-40);
y = Game.clamp(y,0,Game.HEIGHT-40);
collision();
if (press)
handler.addObject(new Bullet("res\\Fireball.png",(int)x,(int)y ,ID.BasicEnemy,handler));
}
in Bezug auf '" Aggravating Problem mit Mausereignis "' Ihre Frage Titel sollte eine Zusammenfassung Ihrer tatsächlichen Code-Problem, nicht ein rant oder kvetch. –
Ein mögliches Problem, verwenden Sie nie das MouseEvent-Objekt 'e' in Ihrem' mousePressed (MouseEvent e) 'Methodenhauptteil. Dieses Objekt enthält den Speicherort des Klicks, und ich glaube nicht, dass Sie ihn ignorieren möchten. –
Sie erstellen zwei Aufzählungszeichen, es ist möglich, dass das 'tick' nicht (immer) den' press' Status anzeigt, je nachdem wie Ihr 'tick' genannt wurde – MadProgrammer