2015-12-18 17 views
5

Quindi, diciamo che ho qualche gioco, prendere Pong per esempio. Ovviamente, in generale non si vuole mescolare la logica del gioco in classi grafiche, quindi la classe per Ball o Paddle è sepearte dal JPanel che effettivamente le disegna. Ball ha la logica del movimento per la palla, la sua posizione attuale, il rilevamento dei colpi, ecc. Tuttavia, è una cattiva pratica per me usare le classi grafiche di Swing e awt nella mia lezione di ballo? Ad esempio, se dovessi usare un java.awt.Rectangle per determinare la hitbox. Anche se non lo sto disegnando in questa classe, lo sto usando. O se dovessi usare Java.awt.Point per memorizzare le coordinate.È una cattiva pratica usare le classi swing e awt per le mie classi non grafiche nei miei programmi?

A proposito, il motivo per cui lo chiedo è perché mi è stato detto molte volte in questo sito di non mescolare la grafica con altre parti.

Utilizzando rettangolo in classe non-grafica: (È questo cattiva pratica?)

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

} 

mia classe Graphics:

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

Questo sarà per lo più un argomento soggettivo, ma direi che gli esempi che date sono perfettamente soddisfacenti. Se dovessi implementare le tue classi Point e Rectangle, è probabile che sarebbero quasi identiche a quelle utilizzate da AWT - e se questo è il caso, perché preoccuparsi? –

+0

è difficile rispondere sì/no alla tua domanda. se stai facendo un'applicazione swing, e il tuo codice sarà nient'altro che swing app, allora direi, sì, è ok usare la classe 'java.awt.Rectangle' .. ma se hai intenzione di fare qualcos'altro con esso , è necessario tenere presente che se si utilizza il codice per l'app Android, sarà necessario fornire i file jar swing/awt. e aggiungendo la libreria complessa al progetto solo per una classe o anche per un metodo è eccessivo. – user902383

risposta

5

direi che per la maggior parte, è shouldn Fallo.

eccezioni alla regola

Ci sono tuttavia una (piccola) serie di classi di supporto all'interno di quel pacchetto che in realtà sono solo i titolari di dati di tipo "bella". Perché inventare ruote quando le hai già? Questi sarebbero "ok per usare" nel mio mondo.

  • Dimension
  • Insets
  • Point
  • Rettangolo (e tutti gli altri Shape s come poligono, zona e così via)

Questi possono essere usati per descrivere problemi grafici, mentre sono non direttamente accoppiato a risorse sullo schermo.

+0

Va bene, grazie! Sembra ragionevole. Pensavo fosse una sorta di contro-intuito se non potessi usare cose come Rectangle o Point. –