私はprevious questionの例に従い、ローダーを使用して外部swfをロードしています。ローダーイベントハンドラー内でloader.content
を私のキャストしようとしています。AS3:MovieClipを拡張するカスタムクラスとしてswfをロードする - ヌルオブジェクト参照を取得する
TypeError: Error #1009: Cannot access a property or method of a null object reference.
だけswfファイルの場所が正しかったとswfファイルが実際にロードされていたことを確認し、テストするために、私は変更:MovieClip
私はこのエラーが発生した公開する場合を拡張するカスタムクラスPanelReferenceClip
コンテンツのタイプはas MovieClip
になりました。うまくいきました。
編集:これらのswfsはローカルに保存されており、インターネット、複数のネットワークまたはサーバーを経由して取得されないことを追加したいとも考えました。
私は私のクラスで風変わりな何かをした場合ので、私はここに私のカスタムクラスにPanelReferenceClip
package com.components
{
import com.UI.DevicePanel;
import flash.display.MovieClip;
/**
* ...
*
* used to store the loaded swf inside the panel
*
* *parentPanel is set so that it is able to access it's parent Panel when needing
* to set parameters.
*/
public class PanelReferenceClip extends MovieClip
{
private var _parentPanel:DevicePanel;
private var _bg_mc:MovieClip;
private var _oldY:Number = 0;
private var _oldX:Number = 0;
private var _IsDragging:Boolean = false;
public function PanelReferenceClip() {
super();
}
/*--------------------------------------------------------------------------
* GETTERS AND SETTERS
* -----------------------------------------------------------------------*/
public function set parentPanel(p:DevicePanel):void {
_parentPanel = p;
}
public function get parentPanel():DevicePanel {
return _parentPanel;
}
public function get bg_mc():MovieClip {
try {
return getChildByName("bg_mc") as MovieClip;
} catch (e:Error) {
trace("could not find bg_mc in " + _parentPanel.DeviceName + " panel");
}
return null;
}
public function set oldY(n:Number):void {
_oldY = n;
}
public function get oldY():Number {
return _oldY;
}
public function set oldX(n:Number):void {
_oldX = n;
}
public function get oldX():Number {
return _oldX;
}
public function set IsDragging(b:Boolean):void {
_IsDragging = b;
}
public function get IsDragging():Boolean {
return _IsDragging;
}
}
}
をソースを提供していますかわからないがSWFをロードした後にしようとしている別のクラスの一部であり、それらをタイプPanelReferenceClip
のクラスprop _referenceとして割り当てます。私はswfを取得することができるので、swfを取得することができます。swfをインポートすると、インポートされたswfのインスタンス名を設定しないためです。だから私はカスタムクラスを割り当てて、MovieClip
を拡張するので、いくつかのカスタムプロパティを保存することができます。
private function handleLoad(e:Event):void
{
e.target.removeEventListener(Event.COMPLETE, handleLoad, false);
// keep reference to the content
_reference = e.target.content as PanelReferenceClip;
// ** BREAKS ON THE NEXT LINE **/
trace(_reference.numChildren);
// add loader to the display list so we can see the external SWF.
addChild(e.target.loader);
// signal the sim engine that the swf has loaded
// and to go ahead and wire up the components
dispatchEvent(new DataEvent(DataEvent.COMPLETE));
initPanel();
}
swfを読み込むためのメソッドです。私はそれを試してアプリケーションのコンテキスト部分を追加しましたが、私はまだどこにも取得していません。ローダSWFがあり、どこで、それは外部のSWFをロードしないから、どこそれは非常に重要であるとして提供
public function loadSWF(theSWF:String):void
{
var url:String = theSWF;
var urlReq:URLRequest = new URLRequest(url);
_urlError = url;
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, handleLoad);
_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
_loader.load(urlReq,context);
_loader.mouseEnabled = false;
}
そうですね問題。あなたのソリューションを試してみよう。 –