2016-06-01 28 views

Antwort

1

Hängt davon ab, was Sie mit "genau so" meinen.

Soweit Aufrufe von draw-something() aus Ihrem Code betroffen sind, finden sie normalerweise statt. Was anders ist, irgendwo in der Wiedergabekette wird die Bedingung erkannt, dass die Form nicht tatsächlich in den tatsächlichen Wiedergabebereich fällt, und keine Pixel werden tatsächlich für die Form ausgegeben.

Wie zu erkennen, ob etwas "auf dem Bildschirm" ist, hängt davon ab, was Sie den Bildschirm als definieren. Angemessenerweise würden Sie es als den Bereich definieren, der von Ihrem Graphics-Objekt beschrieben wird (das möglicherweise nur ein Teil des Bildschirms ist, oder komplett außerhalb des Bildschirms, heck, es könnte ein Drucker sein!).

Sofern Sie den Clipbereich einer Graphics-Instanz nicht geändert haben, gibt getClipBounds() das Rechteck, in dem Grafiken tatsächlich gerendert werden. Wenn Ihre Grafiken aus einer Swing-Komponente stammen, können Sie auch die Komponentenbemaßungen für den Renderbereich ersetzen.

Sobald Sie das eigentliche Rechteck haben, können Sie die von Shape zur Verfügung gestellten Methoden nutzen, um Kollisionen zu erkennen (contains(), intersects() usw.).

+0

Mit "genau die gleiche Weise" meinte ich, dass es keinen Unterschied in Bezug auf die Leistung gibt, wenn es darum geht, eine Off-Screen-Form zu rendern – RoiEX

+0

@RoiEX Es wird Leistungsunterschiede geben, ziemlich massiv möglicherweise. Bevor irgendetwas tatsächlich gezeichnet wird, muss * überprüft werden, dass es sich tatsächlich innerhalb des Renderbereichs befindet, nachdem der gesamte für die Grafiken reservierte Speicherpuffer von begrenzter Größe ist. Drawing outside würde das Programm zum Absturz bringen :) So ist der Check immer da und bedingt wird die gesamte oder ein Teil der schweren Arbeit übersprungen. – Durandal