BeginRefresh([force])
BeginRefresh()
folgen, in die Warteschlange gestellt werden,
bis Sie den Befehl EndRefresh() aufrufen.
Durch Zwischenspeichern aller Zeichnungsbefehle, die zwischen BeginRefresh()
und EndRefresh() aufgerufen werden, kann
letzteres Ihr gesamtes Display in einem einzigen Einzelbild
aktualisieren, was auf vielen Plattformen neben der Verwendung
eines doppelten Puffers die effizienteste Art des Zeichnens ist.
Auf Plattformen, die die optimierte Aktualisierung nicht unterstützen,
hat das Aufrufen von BeginRefresh()
und EndRefresh()
keinerlei Auswirkungen. Daher ist es sicher, es immer in Ihren
Skripten zu verwenden und Hollywood wird es bei Bedarf automatisch
aktivieren.
Die optimierte Aktualisierung wird immer unter Windows (außer wenn die Software-Wiedergabe aktiv ist), macOS (außer auf PowerPC), iOS und Android unterstützt. Auf allen anderen Plattformen wird die optimierte Aktualisierung nur unterstützt, wenn die Autoskalierung aktiv ist. Siehe Skalierungssysteme für Details.
Um das Konzept der optimierten Aktualisierung besser zu verstehen, müssen Sie wissen, dass auf einigen Systemen alle Zeichnungsoperationen immer zu einer vollständigen Neuzeichnung des gesamten Displays führen, selbst wenn nur ein einzelnes Pixel geändert wird. Stellen Sie sich nun folgende Situation vor: Ihr Spiel muss für jedes neue Einzelbild 48 Sprites auf den Bildschirm zeichen. Auf Systemen, die immer das gesamte Display aktualisieren, auch wenn sich nur ein einzelnes Pixel geändert hat, bedeutet dies, dass Hollywood den gesamten Bildschirm 48 Mal neu zeichnen muss und dies 50 Mal pro Sekunde, wenn Ihr Spiel mit 50 fps läuft.
Pro Sekunde (!) wären also 2400 komplette Bildschirmaktualisierungen
(48 * 50) notwendig. Dies wird natürlich die Leistung Ihres
Spiels erheblich beeinträchtigen. Wenn Sie stattdessen das Zeichnen
der 48 Sprites in einen BeginRefresh()
- und EndRefresh()-Abschnitt
kapseln, muss Hollywood den Bildschirm nur einmal pro Einzelbild
(50 Mal pro Sekunde) aktualisieren, was zu einem viel flüssigeren
Erscheinungsbild führt. Daher ist die Verwendung von BeginRefresh()
in diesem Fall unbedingt erforderlich, um eine gute Leistung
Ihres Spiels zu gewährleisten.
Optimierte Aktualisierung kann auch die Leistung des Skripts
erheblich verbessern, wenn automatische Skalierung aktiv ist.
Wenn Sie normales Zeichnen mit Autoskalierung verwenden, wird
Hollywood bei jeder gewünschten Abmessung seinen Auffrischungspuffer
bei jedem einzelnen Zeichnungsbefehl skalieren. Wenn Sie hingegen
hier einen BeginRefresh()
Abschnitt verwenden, muss Hollywood
beim Aufruf von EndRefresh() nur einmal seinen Auffrischungspuffer
skalieren. Dies kann natürlich die Leistung auch erheblich
verbessern.
Standardmäßig verwendet BeginRefresh()
nur dann die optimierte
Aktualisierung, wenn deren Verwendung entweder auf der Host-Plattform
empfohlen wird oder wenn die automatische Skalierung aktiviert
ist. Sie können dieses Verhalten ändern, indem Sie im optionalen
Argument force
True
übergeben. Somit wird BeginRefresh()
immer eine optimierte Aktualisierung verwenden. Dies wird aber
nicht empfohlen, da eine optimierte Aktualisierung in einigen
Fällen auch langsamer als die normal Aktualisierung sein kann.
Aus diesem Grund sollten Sie die Entscheidung Hollywood überlassen,
ob eine optimierte Aktualisierung verwendet wird oder nicht.
Bitte beachten Sie, dass Sie nur BeginRefresh()
Abschnitte
benutzen, wenn Ihr Skript seine Zeichnungen ohne Doppelpuffer
darstellt. Wenn es aber einen Doppelpuffer verwendet, wird
das Zeichnen bereits mit einer Aktualisierung pro Einzelbild
durchgeführt und somit ist in diesem Fall eine Verwendung von
BeginRefresh()
nicht erforderlich.
True
) oder die Entscheidung wird Hollywood
überlassen (False
). Siehe oben für weitere Informationen
(voreingestellt ist False
)BeginRefresh() For Local k = 1 To 48 DisplaySprite(k, sprites[k].x, sprites[k].y) Next EndRefresh()Der obige Code aktualisiert die Positionen von 48 Sprites mit Hilfe eines
BeginRefresh()
-Abschnitts. Das bedeutet, dass auf
Systemen, die immer das gesamte Display aktualisieren (zum Beispiel
Android) Hollywood nur einmal den Bildschirm aktualisieren muss.
Ohne BeginRefresh()
würde Hollywood den Bildschirm 48 Mal aktualisieren
müssen, was natürlich viel langsamer ist.