2016-09-01 1 views
-1

Ich versuche, meine Java-Fähigkeit zu verbessern, indem Sie ein 2D-Spiel erstellen. Es ist mir gelungen, ein grundlegendes Spiel zu entwickeln, und ich gehe jetzt zurück auf die Dinge, die ich getan habe, um zu sehen, was ich verbessern kann, und ich strukturiere den Code ein wenig um. Ich hatte zuvor eine drawObject Methode eingebaut, die ein GameObject zeichnet (eine andere Klasse, die ich für mein Spiel erstellt habe), an die das Graphics2D Objekt übergeben werden musste, aber jetzt versuche ich Graphics2D zu erweitern und alle "draw (X) "Methoden, die ich in dieser Erweiterungsklasse erstellt habe, damit ich das Graphics2D-Objekt nicht weitergeben muss, aber ich habe Schwierigkeiten.Erweitern Graphics2D - Casting verursacht Ausnahme

Ich starte die Klasse wie folgt: public abstract class GameGraphics extends Graphics2D. Es erscheinen keine Fehler in Eclipse, daher führe ich es aus, aber das ist, wenn ich beim Rendern eine Fehlermeldung bekomme, dass sun.java2d.SunGraphics2D nicht in eine Instanz meiner Klasse umgewandelt werden kann, die es erweitert.

Der Fehler in der folgenden Zeile angezeigt: GameGraphics graphics = (GameGraphics) strategy.getDrawGraphics();

Trotz der Tatsache, dass ich eine bestimmte Methode von Graphics2D verwenden muß, ich versuchte es Graphics zu machen zu verlängern, anstatt zu sehen, was passieren würde. Ich änderte Aufrufe zu Graphics2D Funktionen und fand keine Fehler, aber als ich es ausführte, bekam ich den genau gleichen Fehler. Sogar der SunGraphics2D Teil war der selbe.

Es scheint mir die offensichtliche Lösung wäre, dass die Klasse einfach eine Instanz von Graphics2D enthält, anstatt Graphics2D zu erweitern, jedoch würde ich eine Erweiterung bevorzugen, wenn es möglich ist.

Jede Hilfe wäre willkommen!

+4

Sie sollen 'Graphics2D' nicht erweitern. Die nativen Versionen der Plattform sind diejenigen, die es erweitern. Bevorzugen Sie die Komposition über die Vererbung, in diesem Fall haben Sie nicht einmal eine Wahl. – Kayaman

+0

Vielen Dank! Wird besorgt. – VortixDev

Antwort

1

Das Problem ist, dass auf dieser Linie:

GameGraphics graphics = (GameGraphics) strategy.getDrawGraphics(); 

Die Grafik erhielt Objekt aus Ihrer Strategie Objekt kein GameGraphics Objekt ist, und es als solches Gießen ist es nicht so machen. Casting würde nur funktionieren, wenn Sie die Strategie so ändern könnten, dass sie tatsächlich ein GameGraphics-Objekt erzeugt, obwohl ich mir nicht sicher bin, ob Sie das tun wollen oder können (zumindest nicht so einfach). Wie Kayaman sagt - benutze Komposition, um zu bekommen, was du willst, nicht Vererbung.

+0

Ah, richtig. Vielen Dank. Ich habe sogar versucht, zu Graphics2D zu spielen (was keine Probleme hat) und dann zu den spezifischeren GameGraphics zu wechseln, also habe ich einfach angenommen, dass es funktionieren würde. – VortixDev

+0

@VortixDev: das Objekt ** ist ** ein Graphics2D-Objekt –

Verwandte Themen