2016-05-03 9 views
0

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)); 
} 
+0

in Bezug auf '" Aggravating Problem mit Mausereignis "' Ihre Frage Titel sollte eine Zusammenfassung Ihrer tatsächlichen Code-Problem, nicht ein rant oder kvetch. –

+0

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. –

+0

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

Antwort

2

hier:

public void mousePressed(MouseEvent e) {  
    handler.addObject(new Bullet("res\\Fireball.png",x,y + ,ID.BasicEnemy,handler)); 
} 

Sie nie das Mouseevent Point-Objekt verwenden, scheinen aber einen unveränderlichen x und y-Wert zu verwenden. Vielleicht (schwer zu sagen) Sie die x- und y aus dem Mouseevent-Objekt verwenden möchten:

public void mousePressed(MouseEvent e) {  
    handler.addObject(new Bullet("res\\Fireball.png", e.getX(), e.getY(), 
     ID.BasicEnemy, handler)); 
} 

Wenn dies nicht Ihr Problem lösen, dann Einrichtung und Unterhaltung einer Minimal, Complete, and Verifiable Example Program veröffentlichen, wo Sie Ihren Code in das kleinste Bit kondensieren die noch kompiliert und ausgeführt wird, keine externen Abhängigkeiten hat (wie zum Beispiel die Notwendigkeit, eine Verbindung zu einer Datenbank oder Bildern herzustellen), hat keinen zusätzlichen Code, der für Ihr Problem nicht relevant ist, aber Ihr Problem immer noch demonstriert.

+0

Ah, nah genug: P (Ich bin verwirrt, aber ich habe nicht geschlafen - also nicht viel anders – MadProgrammer

Verwandte Themen