2011-09-02 20 views
5

Tôi đã tạo một nút trong Flash và bên trong là tôi có TextField và MovieClip, cả hai đều có tên mẫu được đặt. Chúng bao gồm tất cả 4 khung của nút, không có khung hình chính.Sự cố với tên mẫu bên trong Nút

tôi thấy tôi không thể truy cập vào các đối tượng sử dụng tên dụ tôi muốn thiết lập, vì vậy tôi sử dụng đoạn mã này để xem những gì đang xảy ra:

var obj:DisplayObject = this.m_graphics.btnChange.upState; 
for (var i:int = 0; i < obj.numChildren; i++) 
{ 
    trace("We have an object at " + i + " - " + obj.getChildAt(i) + ": " + obj.getChildAt(i).name); 
    var t:TextField = obj.getChildAt(i) as TextField; 
    if (t == null) 
     continue; 

    trace(" The textfield has text '" + t.text + "'); 
} 

tôi có được điều này là đầu ra:

We have an object at 0 - [object Shape]: instance195 
We have an object at 1 - [object TextField]: instance199 
    The textfield has text 'Change' 
We have an object at 2 - [object MovieClip]: instance203 

Vì vậy, chúng TextField và MovieClip có ở đó, chúng vừa có tên dụ được đặt lại thành "instance ###" chung.

Bất kỳ ai biết vấn đề là gì? Nếu tôi làm cho nút một MovieClip, nó hoạt động tốt (mặc dù tôi phải kiểm soát các khung hình bản thân mình).

Tôi nhận thức được những phương pháp khác nhau tôi có thể sử dụng để làm việc xung quanh này, nhưng điều đó có nghĩa là thay đổi rất nhiều thứ, và tôi muốn biết tại sao SimpleButton của bỏ qua các tên instance thiết lập trong Flash

EDIT

Nhìn vào nó một chút nữa, có vẻ như là mặc dù không có khung hình trong nút trong flash IDE, flash tạo ra 4 trường hợp của từng hạng mục (truy tìm qua upState ví dụ sẽ cho tôi một TextField với tên dụ "instance2", trong khi trong downState, tên cá thể là "instance4"). Nếu tôi thay đổi văn bản trong một trạng thái, nó không phản ánh trong các trạng thái khác.

Tôi nghĩ rằng khi Flash tạo ra các đối tượng, nó không sao chép trên tất cả các thuộc tính đúng cách (cụ thể là tên chẳng hạn)

EDIT

Tôi đồng ý rằng câu trả lời của Shane là một workaround - Tôi Tôi tự nói rằng tôi biết các phương pháp khác nhau để giải quyết vấn đề - nhưng nó bỏ qua vấn đề, nó không giải quyết được vấn đề (đó là lý do duy nhất khiến tôi không chấp nhận nó). Tôi đã đến SO ngay từ đầu để xem liệu ai đó có thể biết tại sao nó lại xảy ra ngay từ đầu (tbh, có vẻ như một lỗi trong SDK).

Tôi cũng hiểu lý do đằng sau đối số "bạn không nên truy cập trẻ em trong SimpleButton; nếu bạn muốn kiểm soát nhiều hơn, sử dụng Sprite hoặc MovieClip", nhưng tôi không đồng ý với nó. Flash IDE cho phép bạn tạo các nút với các cá thể được đặt tên bên trong chúng và tài liệu SimpleButton cung cấp cho bạn quyền truy cập vào các trạng thái khác nhau, vì vậy đối với tôi, đây là hành vi được chấp nhận. Nếu SimpleButton chỉ có thể được sử dụng cho các nút tĩnh rất cơ bản, không thể thay đổi được (hãy nghĩ đến bản địa hoá), thì nó khá vô ích. Bạn có thể sử dụng Sprite và MovieClip, nhưng sau đó bạn phải tự kiểm soát các trạng thái khác nhau, điều này trở nên khó xử. Tôi có lớp Button của riêng mình để xử lý bản mẫu, nhưng tôi không cần phải viết lại chức năng SDK cơ bản, đó là lý do tại sao với tôi đó là một lỗi.

Tôi sẽ giữ tiền thưởng mở cho thời gian ở đó. Nếu tôi không nhận được gì khác, thì tôi sẽ đưa nó cho Shane.

+1

shanethehat hoàn toàn đúng, bạn không thể truy cập các đối tượng bên trong Nút. – hardik

+0

@Hardik bạn có thể truy cập các đối tượng bên trong Nút, tôi làm điều đó trong mã ở trên. Nếu đó là trường hợp của tôi * không nên *, thì đó là một câu chuyện khác nhau – divillysausages

+0

ok, nếu bạn muốn làm một số hiệu ứng động với nút trên trạng thái của nó cố gắng tạo nút MovieClip bên trong. riêng MovieClip trên LÊN TRÊN XUỐNG. – hardik

Trả lời

5

Điều này là do lớp flash.display.SimpleButton không kế thừa từ DisplayObjectContainer, và container nhà nước cũng không DisplayObjectContainers: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/SimpleButton.html

Về cơ bản, các nút đơn giản là theo định nghĩa của họ đơn giản.Nếu bạn muốn kiểm soát phức tạp hơn đối với các đối tượng bên trong, bạn sẽ phải sử dụng một Sprite hoặc MovieClip với buttonMode được đặt thành true.

+1

'SimpleButtons 'bản thân không phải là' DisplayObjects' hoặc 'DisplayObjectContainers', nhưng trạng thái lên, xuống, xuống và nhấn của chúng là cách bạn tìm kiếm các đối tượng bên trong chúng ở vị trí đầu tiên – divillysausages

+2

SimpleButton _is_ a Display object. Đó là thừa kế là SimpleButton -> InteractiveObject -> DisplayObject -> EventDispatcher -> Object. – shanethehat

+0

xin lỗi, những gì tôi có nghĩa là để làm rõ là tôi đang tìm kiếm các đối tượng bên trong các trạng thái SimpleButton (upState, downState, vv). Họ tồn tại, họ chỉ không có tên dụ của họ đặt – divillysausages

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