Bezeichnung
BeginRefresh -- bereitet das Display für die optimierte Aktualisierung vor (V5.3)
Übersicht
BeginRefresh([force])
Beschreibung
Dieser Befehl bereitet das aktive Display für eine optimierte Aktualisierung vor. Auf Plattformen, die optimierte Aktualisierung unterstützen, bedeutet dies, dass alle Zeichnungsbefehle, die auf 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.

Eingaben
force
optional: zwingt den Einsatz von optimierte Aktualisierung (True) oder die Entscheidung wird Hollywood überlassen (False). Siehe oben für weitere Informationen (voreingestellt ist False)
Beispiel
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.

Navigation zeigen