finish = AsyncDrawFrame(id[, frame])
AsyncDrawFrame()
gibt False
zurück, wenn es noch Einzelbilder in der Warteschlange hat.
Daher sollten Sie in der Regel diesen Befehl solange aufrufen,
bis er True
zurückgibt. Somit haben Sie alle Einzelbilder gezeichnet,
die in der Warteschlange des asynchronen Zeichnungsobjekts waren.
Wenn dieser Befehl True
zurückgibt, löscht er automatisch das
asynchrone Zeichnungsobjekt, so dass es nicht mehr gültig ist und
somit nicht mehr verwendet werden kann. Wenn Sie eine asynchrone
Zeichnungssequenz stoppen wollen, bevor alle Bilder gezeichnet wurden,
können Sie den Befehl CancelAsyncDraw() verwenden. Wenn Sie hingegen
ein asynchrone Zeichnungsobjekt stoppen wollen und es seinen letzten
Code ausführen sollte, müssen Sie dem Befehl FinishAsyncDraw()
verwenden.
Ab Hollywood 4.5 akzeptiert AsyncDrawFrame()
das optionales
Argument frame
, womit Sie explizit angeben können, welches Bild
Sie dargestellt haben möchten. Um die Anzahl der Einzelbilder
eines asynchronen Zeichnungsobjekt herauszufinden, rufen Sie den
Befehl GetAttribute() mit dem Argument #ATTRNUMFRAMES
auf.
Der Wert, den Sie mit diesem Befehl erhalten, ist die größte
gültige Einzelbildnummer. Um das erste Bild zu zeichnen, müssen
Sie 1 übergeben. Um das nächste Bild zu zeichnen, übergeben
Sie den Wert 0, was auch die Standardeinstellung ist, wenn
das Argument frame
weggelassen wird.
Wenn Sie das zu zeichnende Einzelbild manuell festlegen, müssen
Sie auch darauf achten, dass Ihr asynchrones Zeichnungsobjekt
korrekt aus dem Speicher entfernt wird. Wenn Sie das optionale
Argument nicht verwenden, wird das asynchrone Zeichnungsobjekt
automatisch aus dem Speicher gelöscht, wenn AsyncDrawFrame()
True
liefert. Wenn Sie ein Einzelbild manuell angeben, wird
das asynchrone Zeichnungsobjekt nie aus dem Speicher entfernt.
Auch wenn Sie das letzte Einzelbild angeben, wird Hollywood
das asynchrone Zeichnungsobjekt nicht aus dem Speicher löschen,
weil es möglich wäre, dass Sie noch ein anderes Einzelbild
manuell anzeigen möchten. Also, wenn Sie manuell das aktuellen
Einzelbild auswählen, stellen Sie sicher, dass Sie den Befehl
FinishAsyncDraw() aufrufen, wenn Sie mit dem asynchronen Zeichnungsobjekt
fertig sind.
Bitte beachten Sie, dass derzeit einige Einschränkungen für diesen Befehl gelten:
#ADF_FX
sind.
False
, wenn es noch Einzelbilder in der Warteschlange
hat oder True
, wenn das asynchrone Zeichnungsobjekt fertig istobj = DisplayBrushFX(1, #CENTER, #CENTER, {Type = #WATER1, Async = True}) Repeat done = AsyncDrawFrame(obj) VWait Until done = TrueDer obige Code zeigt den Pinsel 1 mit dem Übergangseffekt
#WATER1
in der Mitte des Bildschirms. Wie Sie sehen können, wird der
Effekt nicht durch DisplayBrushFX(), sondern durch AsyncDrawFrame()
in der Schleife angezeigt, so dass Sie auch während dem Übergangseffekt
ein paar andere Dinge tun könnten.
EnableLayers DisplayBrush(1, #CENTER, #CENTER) obj = ShowLayerFX(1, {Type = #WALLPAPERTOP, Async = True}) frames = GetAttribute(#ASYNCDRAW, obj, #ATTRNUMFRAMES) For Local k = frames To 1 Step -1 AsyncDrawFrame(obj, k) VWait Next For Local k = 1 To frames AsyncDrawFrame(obj, k) VWait Next FinishAsyncDraw(obj)Der obige Code zeigt Pinsel Nummer 1 unter Verwendung des Übergangseffekts
#WALLPAPERTOP
an. Der Effekt wird zuerst rückwärts angezeigt
und dann in normaler Reihenfolge. Beachten Sie, dass wir das
Zeichnungsobjekt manuell mit dem Befehl FinishAsyncDraw() freigeben
müssen.