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.
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
@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
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