2010-01-07 21 views
9

Tôi muốn tải một swf vào một ứng dụng flex 4 để sử dụng các lớp của nó.Adobe Flash Builder (flex4): addChild() không có sẵn trong lớp này.

var ldr:Loader=new Loader(); 
ldr.load(new URLRequest("file://path/to/fileswf")); 
ldr.contentLoaderInfo.addEventListener(Event.INIT, loaded); 
function loaded(evt:Event):void { addChild(ldr); } 

tôi nhận được lỗi:

Error: addChild() is not available in this class. Instead, use addElement() or modify the skin, if you have one.
at spark.components.supportClasses::SkinnableComponent/addChild()[E:\dev\gumbo_beta2\frameworks\projects\spark\src\spark\components\supportClasses\SkinnableComponent.as:966]
at main/private:init/loaded()[C:\Documents and Settings\ufk\Adobe Flash Builder Beta 2\xpogames-toolkit-test\src\main.mxml:22]

Nếu tôi thay đổi addChild()-addElement(), tôi nhận được lỗi biên dịch sau đây:

1067: Implicit coercion of a value of type flash.display:Loader to an unrelated type mx.core:IVisualElement. main.mxml path/dir line 22 Flex Problem

Bất kỳ ý tưởng làm thế nào để giải quyết vấn đề này?

Trả lời

2

tốt trong xây dựng đèn flash 4 phiên bản đầy đủ, không có bất kỳ this.rawChildren.

Cách tiếp cận tốt nhất để giải quyết vấn đề sẽ được chuyển đổi mỗi lớp cần thiết để một thành phần flex và sử dụng nó trên ứng dụng flex của bạn:

  1. tải về và cài đặt bộ phần flex http://www.adobe.com/cfusion/entitlement/index.cfm?e=flex_skins

  2. tạo một đoạn phim

  3. chuyển thành thành phần flex

  4. thêm các chức năng liên quan đến lớp học này

một khung cho một lớp học mà được gắn vào một movieclip mà là về để được chuyển đổi sang một thành phần flex:

package { 
import mx.flash.UIMovieClip; 
import flash.text.TextField; 
import flash.events.Event; 
import flash.events.MouseEvent; 
public dynamic class challenge_screen extends UIMovieClip { 

    public function challenge_screen() { 
     super(); 
    } 
} 
} 
+0

mở rộng đến MovieClip và sau đó thêm vào UIComponent cũng hoạt động. – ufk

0

this.rawChildren.addChild (LDR) nên làm việc

24

Tạo chứa khác để đặt các DisplayObject trong:

// container (IVisualElement) for DisplayObjects 
var container:UIComponent = new UIComponent(); 
addElement(container); 

// displayObject goes to container 
var displayO:Sprite = new Sprite(); 
container.addChild(displayO); 
+0

Làm việc tuyệt vời với Facebook Distractor từ SDK ActionScript. Cảm ơn. –

+0

Đã làm điều này trong đánh dấu mxml và nó đã làm việc một điều trị - cảm ơn! –

+0

@LaceySnr bạn đã làm điều này như thế nào trong đánh dấu mxml? – Scott

1
private var _loader:SWFLoader = new SWFLoader(); 
private var _uicomponent:UIComponent = new UIComponent(); 
private function swfLoaded(event:Event):void 
{ 
Alert.show("inside swf Loaded"); 
var content:DisplayObject =_loader.content; 
_uicomponent.addChild(content); 
} 
public function loadSWF() : void 
{ 

_loader.addEventListener(Event.INIT, swfLoaded); 
_loader.load("http://intelliveysoft.com:5080/myelearn/Admin.swf"); 
addElement(_uicomponent); 
} 

Hãy thử điều này. Nó sẽ hoạt động

+2

Thay vì chỉ đăng một khối mã, vui lòng * giải thích * tại sao mã này giải quyết vấn đề được đặt ra. Nếu không có một lời giải thích, đây không phải là một câu trả lời. –