Bezeichnung
AsyncDrawFrame -- zeichnet das nächste Einzelbild eines asynchronen Objekts (V4.0)
Übersicht
finish = AsyncDrawFrame(id[, frame])
Beschreibung
Dieser Befehl kann verwendet werden, um das nächste Einzelbild eines asynchronen Zeichnungsobjekts zu zeichnen, wenn es durch einen Übergangseffekt oder einem Verschiebungsbefehl aus den Objektbibliotheken erstellt wurde. 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:

  1. Asynchrone Einzelbilder können nur in dem Hauptdisplay gezeichnet werden. Sie können diesen Befehl derzeit nicht fürs Zeichnen von Pinseln verwenden.

  2. Während asynchrone Zeichnungsobjekte gezeichnet werden, können Sie nicht den Ebenenmodus wechseln. Die Befehle EnableLayers() oder DisableLayers() sind deaktiviert, während asynchrone Zeichnungsobjekte aktiv sind.

  3. Sie können nicht das Hintergrundbild wechseln, während asynchrone Zeichnungsobjekte gezeichnet werden.

  4. Zu Einzelbilder springen funktioniert nur mit asynchronen Zeichnungsobjekte, die einer Ebene zugeordnet sind.

  5. Zu Einzelbilder springen arbeitet nur mit asynchronen Zeichnungsobjekte, welche vom Typ #ADF_FX sind.

Eingaben
id
Identifikator des asynchronen Zeichnungsobjektes
frame
optional: das gewünschte Einzelbild, welches gezeichnet werden soll; arbeitet nur mit asynchronen Zeichnungsobjekten, welche einer Ebenen zugewiesen sind. (V4.5)
Rückgabewerte
finish
False, wenn es noch Einzelbilder in der Warteschlange hat oder True, wenn das asynchrone Zeichnungsobjekt fertig ist
Beispiel
obj = DisplayBrushFX(1, #CENTER, #CENTER, {Type = #WATER1, Async = True})
Repeat
   done = AsyncDrawFrame(obj)
   VWait
Until done = True
Der 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.

Navigation zeigen