2015-12-18 5 views
5

Also, sagen wir, ich habe ein Spiel, nehmen Sie Pong zum Beispiel. Offensichtlich wollen Sie im Allgemeinen keine Spiellogik in Grafikklassen mischen, daher ist die Klasse für Ball oder Paddel eine andere als die JPanel, die sie tatsächlich zeichnet. Ball hat die Bewegungslogik für den Ball, seine aktuelle Position, Treffererkennung usw. Aber ist es für mich eine schlechte Übung Grafikklassen von Swing und Awt in meiner Ballklasse zu verwenden? Zum Beispiel, wenn ich ein java.awt.Rectangle verwenden würde, um die Hitbox zu bestimmen. Auch wenn ich es nicht in dieser Klasse zeichne, benutze ich es. Oder wenn ich Java.awt.Point verwenden würde, um Koordinaten zu speichern.Ist es eine schlechte Übung, Swing- und AWT-Klassen für meine nicht grafikbezogenen Klassen in meinen Programmen zu verwenden?

Übrigens ist der Grund, warum ich frage, weil mir auf dieser Seite viele Male gesagt wurde, Grafiken nicht mit anderen Teilen zu mischen.

Verwenden von Rectangle in nicht-Grafikklasse: (Ist die schlechte Praxis?)

public class Ball { 
    static Rectangle hitbox = new Rectangle(0,10,20,20); 
    static void checkHit() { 
     if(hitbox.intersects(Paddle.hitbox) //do something 
    } 

} 

Meine Graphics-Klasse:

public class DrawMyStuff extends JPanel { 
    void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     setBackground(Color.BLACK); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.draw(Ball.hitbox); 
    } 
} 
+2

Dies wird größtenteils eine subjektive Angelegenheit sein, aber ich würde sagen, dass die Beispiele, die Sie geben, völlig in Ordnung sind. Wenn Sie Ihre eigenen Point- und Rectangle-Klassen implementieren würden, wären sie wahrscheinlich fast identisch mit denen, die AWT verwendet - und wenn das der Fall ist, warum sollten Sie sich die Mühe machen? –

+0

es ist schwer zu beantworten ja/nein auf Ihre Frage. Wenn Sie Swing-Anwendung tun, und Ihr Code wird nichts mehr als Swing-App, dann würde ich sagen, ja, es ist in Ordnung, 'java.awt.Rectangle' Klasse zu verwenden .. aber wenn Sie planen, etwas anderes damit zu tun Beachten Sie, wenn Sie Ihren Code für Android-App verwenden, müssen Sie immer noch Swing/Awt Jar-Dateien zur Verfügung stellen. und das Hinzufügen komplexer Bibliothek zum Projekt nur für eine Klasse oder sogar eine Methode ist es Overkill – user902383

Antwort

5

ich, dass für die meist Teil würde sagen, shouldn Sie tu das nicht.

Ausnahmen von der Regel

Es gibt jedoch eine (kleine) Gruppe von Hilfsklassen innerhalb dieses Pakets, das eigentlich nur Daten Inhaber eines „schönen“ Typs ist. Warum Räder erfinden, wenn du sie schon hast? Diese wären in meiner Welt "in Ordnung".

  • Dimension
  • Insets
  • Punkt
  • Rechteck (und alle anderen Shape s wie Polygon, Fläche und so weiter)

Diese verwendet werden können, grafische Probleme zu beschreiben, während sie nicht direkt an Bildschirm-Ressourcen gekoppelt.

+0

Okay, vielen Dank! Das klingt vernünftig. Ich dachte, es wäre irgendwie kontraproduktiv, wenn ich Sachen wie Rectangle oder Point nicht verwenden könnte. –

Verwandte Themen