2009-10-11 36 views
6

Tôi cần đặt tên biến tùy chỉnh cho mỗi lần lặp. Tại sao điều này là không thể?Đặt tên biến động Trong ActionScript 3.0

for (var i:uint = 0; i < 50; i++) 
{ 
    var ['name' +i] = new Sprite(); 
} 
*//1840: Syntax error: expecting identifier before left bracket* 
+2

tại sao bạn không sử dụng mảng? – Amarghosh

Trả lời

9

Bạn muốn sử dụng bản đồ băm để thực hiện việc này.

var map:Object = {}; 
for (var i:uint = 0; i < 50; i++) 
{ 
    map['name' +i] = new Sprite(); 
} 

Nếu không bạn đang nhầm lẫn trình biên dịch. Tên động cho biến cục bộ không được phép.

+0

Đây là những gì tôi đang tìm kiếm, nhưng nó không hoạt động trong kịch bản của tôi. Tôi sẽ phải sử dụng một Array. Itis rất kém tài liệu trên livedocs, có thể biết bất kỳ xây dựng phong nha? –

+0

Bạn cũng có thể sử dụng một mảng. Hoặc bạn có thể lặp qua bản đồ như một mảng. (cho (var n: String trong bản đồ) {}). Có lẽ bạn có thể giải thích lý do tại sao bạn cần phải làm điều này và chúng tôi có thể đề xuất lựa chọn thay thế. – Glenn

3

Có một cách để giải quyết vấn đề này, tùy thuộc vào việc bạn đang làm. Nếu tất cả các clip này được thêm vào giai đoạn thì bạn có thể sử dụng phương thức getChildByName để truy cập chúng. thiết lập của bạn sẽ giống như thế này:

var clips:Array = []; 

for (var i:int = 0; i < 100; i++) { 
    clips[i] = new MovieClip(); 
    clips[i].name = "clip" + i; 
    addChild(clips[i]); 
} 

trace (getChildByName("clip2")); // traces [object MovieClip] 

này được thực hiện bằng cách truy vấn API hiển thị, tuy nhiên, do đó bạn không thể sử dụng getChildByName về bất cứ điều gì đó là không được thêm vào một danh sách hiển thị ở đâu đó.

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

+0

Đó chắc chắn là một cách để đi, nhưng mã được lộn xộn với nó. –

0

Mặc dù không được khuyến nghị là lớp động chậm hơn so với lớp được niêm phong, bạn chắc chắn có thể làm cho lớp động và sau đó sử dụng ["varname"] này để đặt biến. Bạn cần phải chỉ định một lớp là động ngay cả khi mở rộng một lớp động như Movieclip (các lớp con không kế thừa điều này).

dynamic public class MyClass{ 
.... 
.... 
.... 
for (var i:uint = 0; i < 50; i++) 
{ 
    this['name' +i] = new Sprite(); 
} 
Các vấn đề liên quan