2009-06-21 23 views
6

Tôi có tệp ArtLibrary.swf có hàng trăm MovieClips được xuất với tên lớp. Tôi muốn để có thể sử dụng những bộ phim này trong nhiều tập tin flash khác nhau tôi đang làm việc trên nhưng tôi không biết làm thế nào để đúng tham khảo chúng sau khi sử dụng và nhúng lệnh.AS3 nhúng hoặc nhập tất cả các lớp trong một swf ngoài mà không tham chiếu từng lớp riêng lẻ

Các công trình sau đây:

[Embed(source="ArtLibrary.swf", symbol="BirdBodyColor_mc")] 
var BirdBodyColor_mc:Class; 

myMC:MovieClip = new BirdBodyColor_mc(); 
addChild(myMC); 

Trong ví dụ này, tôi không chắc chắn làm thế nào để tham khảo các lớp học cá nhân bên trong "lớp thạc sĩ".

[Embed(source="ArtLibrary.swf")] 
var MasterClass:Class; 

myMC:MovieClip = new BirdBodyColor_mc(); 
addChild(myMC.BirdBodyColor_mc); 

Trả lời

4

Thay vì sử dụng SWF, tốt hơn nên sử dụng SWC. Để tạo một SWC, chỉ cần đi vào cài đặt xuất bản của Flash Pro và chuyển đến tab Flash và chọn "Xuất SWC". SWC chứa cả SWF và tệp kê khai đặc biệt với tất cả thông tin Flash cần biết về các lớp trong SWF. Sau đó, để sử dụng SWC trong một dự án khác, bạn đi tới cài đặt AS3 (cũng trong tab Flash của cài đặt xuất bản), chuyển đến tab Library Path và thêm SWC của bạn (cả đường dẫn tuyệt đối và đường dẫn tương đối đều hoạt động tốt).

Lưu ý rằng điều này sẽ chỉ hoạt động trong CS4 hoặc Flex (Với Flex Tôi khá chắc chắn bạn chỉ có thể kéo SWC vào dự án của mình, nhưng tôi sẽ kiểm tra điều đó).

Bây giờ - nếu bạn muốn tải SWF và sử dụng tài sản của nó khi chạy, đó là một quả bóng sáp hoàn toàn khác. Để làm việc đó đúng cách, bạn sẽ cần phải fiddle xung quanh với lớp Loader và ApplicationDomain để các lớp được đưa vào miền thích hợp. Dưới đây là một số thông tin tốt về đề tài này:

http://www.kirupa.com/forum/showpost.php?p=2123134&postcount=366

4

Vì vậy, đây là một trường hợp của CS4 quá thông minh vì lợi ích riêng của nó. Vì bạn không bao giờ rõ ràng đề cập đến các lớp được đề cập theo cách mà trình biên dịch có thể xác định tại thời gian biên dịch, nó không bao gồm các lớp đó trong SWF của bạn - do đó có lỗi.

Trong Flex, bạn có thể giải quyết vấn đề này với đối số dòng lệnh, nhưng đó không phải là trường hợp với CS4. Thay vào đó bạn có tham chiếu rõ ràng các lớp bạn muốn sử dụng ít nhất một lần theo cách mà trình biên dịch có thể hiểu được. Ví dụ, tôi đã thực hiện một SWC đơn giản có chứa một biểu tượng với lớp của nó được đặt thành "TestCircle". Trong mã mà sử dụng các SWC Tôi có đoạn code sau đây và nó chỉ làm việc tốt:

import flash.utils.getDefinitionByName; 

TestCircle; 

var test:MovieClip = new (getDefinitionByName("TestCircle") as Class)(); 

addChild(test); 

Nếu bạn cảm thấy như nhận được ưa thích bạn có thể viết một kịch bản nhỏ mà sẽ mở một SWC (nó chỉ là một file zip) , đọc tệp kê khai XML bên trong và tạo một lớp "includer" đặc biệt một cách tự động. Nhưng khi họ nói - tôi sẽ để nó như một bài tập cho người đọc! ;-)

Hy vọng điều đó sẽ hữu ích!

+0

"Trong Flex bạn có thể giải quyết vấn đề này với một đối số dòng lệnh" Tôi đang tìm ở đây cho dòng lệnh đó nhưng không tìm thấy nó. Đó là cái nào? http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7a92.html – vazor

0

Vì vậy, tôi vẫn bị kẹt bằng văn bản với tập lệnh được tạo theo cách thủ công, dài, tham chiếu đến từng lớp được nhập. Cấp các dòng ngắn hơn nhiều so với phương thức nhúng, thậm chí một từ.

Cuối cùng, tôi đã tạo ArtLibrary.fla và sau đó chỉ cần sao chép và dán tất cả các thư mục từ thư viện của fla đó vào mỗi 5 thư mục khác của tôi. Tôi không bận tâm biên dịch tập tin swf. Đối với nhu cầu của tôi đó là hiệu quả nhất.

Cảm ơn bạn rất nhiều vì đã giúp đỡ. Câu trả lời của bạn đã thẳng về phía trước và rất chi tiết.

3

Nếu bạn cảm thấy như nhận được ưa thích bạn có thể viết một kịch bản nhỏ mà sẽ vết nứt mở một SWC (nó chỉ là một file zip ), đọc manifest XML đó là bên trong và tạo ra một đặc biệt "Includer" lớp tự động. Nhưng khi họ nói - Tôi sẽ để điều đó như một bài tập cho người đọc ! ;-)

Không cần phải làm gì phức tạp (may mắn!). Đối số trình biên dịch bao gồm thư viện sẽ tự động bao gồm tất cả các lớp từ bên trong SWC của bạn, cho phép phương thức getDefinitionByName hoạt động như mong đợi.

Trong file App-config.xml của bạn (hoặc cách khác thông qua trực tiếp như một tham số để trình biên dịch):

<include-libraries> 
    <library>path/to/your.swc</library> 
</include-libraries> 

Sau đó, bạn đang miễn phí để sử dụng getDefinitionByName như bình thường.

HTH.

2

Sử dụng FlashPhát triển điều này khá đơn giản để khắc phục.

Nhấp chuột phải vào swc được bao gồm trong danh sách Dự án. Chọn tùy chọn rồi "bao gồm thư viện (thư viện hoàn chỉnh)".

.. bây giờ bạn có thể sử dụng getDefinitionByName để nhận lớp không được tham chiếu từ tệp swc của bạn.

Các vấn đề liên quan