2016-05-09 27 views
-2

Ich möchte einige Video in Flash, ich habe diesen Code gefunden, aber bekomme "Zugriff von möglichen undefinierten Eigenschaft COMPLETE durch eine Referenz mit statischen Typ-Klasse", wenn ich versuche, es auszuführen.Adobe Flash - Zugriff auf mögliche undefinierte Eigenschaft COMPLETE

video.source="video.flv"; 
import fl.video.*; 
function onFLVCOMPLETE(event:VideoEvent):void{ 
      event.target.play(); 
} 
video.addEventListener(VideoEvent.COMPLETE, onFLVCOMPLETE); 

Keine Ahnung, was los ist, so würde jede Hilfe

+0

@FabriceBacquart Wow, du bist ein wenig über Bord gegangen auf deinen Kommentar? Nur weil du verstehst, dass es nicht bedeutet, dass alle anderen es tun, habe ich Flash/ActionScript nie zuvor benutzt und versuche es zu lernen. –

+0

@AaronOwen - Hast du es herausgefunden? Ignoriere den obigen Kommentar, dein 'import fl.video. *;' Würde die gewünschte Klasse importieren, so dass du 'import fl.video.VideoEvent' nicht hinzufügen musst (obwohl Letzteres besser ist, da es spezifischer ist). Einige Leute hier sind gerne kritisch und downvote, ohne richtig zu verstehen, was gefragt wird und was das Problem ist ... – BadFeelingAboutThis

+0

@FabriceBacquart - das OP importiert diese Klasse: 'import fl.video. *' Der Platzhalter '*' importiert alle Klassen in diesem Paket, das fl.video.VideoEvent enthalten würde. Das Problem ist das im zweiten Teil meiner Antwort, es ist wirklich eine sehr gute Frage mit einer ziemlich obskuren Lösung, die definitiv nicht offensichtlich ist. – BadFeelingAboutThis

Antwort

2

EDIT

Dies ist, was passiert ist groß:

Die FlashPro/AdobeAnimate IDE automatisch importiert die flash.events Paket (ob du es ausdrücklich gesagt hast). Wenn Sie dies tun, ersetzt die flash.events.VideoEvent Klasse Ihre importierte fl.video.VideoEvent Klasse als das, was bei der Verwendung von VideoEvent referenziert wird.

Um dies zu beheben, müssen Sie nur den voll qualifizierten Klassennamen verwenden. Anstatt also mit:

VideoEvent 

Sie verwenden:

fl.video.VideoEvent 

So Ihr Code sollte wie folgt aussehen:

function onFLVCOMPLETE(event:fl.video.VideoEvent):void{ 
      event.target.play(); 
} 
video.addEventListener(fl.video.VideoEvent.COMPLETE, onFLVCOMPLETE); 

dieses Verhalten zu testen, erstellen Sie eine neue FlashPro Projekt mit folgendem Code auf der Timeline: (Sie müssen auch eine Videokomponente zur Bibliothek hinzufügen)

import fl.video.VideoEvent; 
trace(flash.utils.getQualifiedClassName(VideoEvent)); 

Das erwartete Ergebnis im Ausgabefenster ist fl.video::VideoEvent, aber das tatsächliche Ergebnis ist:

flash.events::VideoEvent

Also auch wenn Sie nur fl.video.VideoEvent importiert, VideoEvent ist bezogen auf flash.events.VideoEvent (die nicht importiert wurde).

+2

Ich denke, dass das richtige 'VideoEvent', das OP sucht, das [' fl.video.VideoEvent'] ist (http://help.adobe.com/en_US/ FlashPlatform/reference/actionskript/3/fl/video/VideoEvent.html) Klasse mit dem ['COMPLETE'] (http://help.adobe.com/de_DE/FlashPlatform/reference/actionscript/3/fl/video/ VideoEvent.html # COMPLETE) konstant ... – akmozo

+0

@Aaron Owen - unter Berücksichtigung des obigen Kommentars von @akmozo, bekommen Sie möglicherweise kollidierende VideoEvent-Klassen (die aus dem 'flash.events' -Paket und die aus dem' fl.video' -Paket) - versuchen Sie es und sehen Sie wenn es es behebt: 'video.addEventListener (fl.video.VideoEvent.COMPLETE, onFLVCOMPLETE);' Obwohl all diese vollständigen Ereignisse die gleiche Zeichenfolge sind, sollte es mit 'Event.COMPLETE' ebenso gut funktionieren wie mit' fl.video .VideoEvent.COMPLETE' – BadFeelingAboutThis

+0

@akmozo, guter Fang, ich benutze das FL-Paket/Komponenten nicht und habe nie bemerkt, dass es eine andere VideoEvent-Klasse gab. – BadFeelingAboutThis