2010-04-21 25 views
5

Vấn đề tôi gặp phải là tôi đang sử dụng một keyboardEventListener để làm cho một movieclip chạy xung quanh. Vì tôi là sinh viên đại học, tôi đang tạo điều này cho một bài tập nhưng chúng tôi buộc phải sử dụng các lớp học as3.Cách truy cập vào giai đoạn từ một lớp AS3 trong Adobe Flash

Khi tôi chạy mã trong maintimeline, không có vấn đề gì. Nhưng khi tôi cố gắng truy cập nó từ một lớp khác (với một 'Xuất cho ActionScript' trên movieclip được đề cập), tôi gặp lỗi mà anh ta không thể giải quyết được.

this.stage .addEventListener (KeyboardEvent.KEY_DOWN, dostuff);

Trả lời

9

Một lớp học trong AS3 không có trên sân khấu cho đến khi bạn thực sự đặt nó ở đó. Kết quả là, "this.stage" sẽ được null tại thời gian biên dịch. Bạn có thể khắc phục sự cố này bằng cách sử dụng sự kiện ADDED_TO_STAGE để trì hoãn việc ràng buộc người nghe của bạn cho đến thời điểm phù hợp.

public function MyClass(){ 
    this.addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); 
} 

private function addedToStageHandler(e:Event):void{ 
    this.stage.addEventListener(KeyboardEvent.KEY_DOWN, dostuff); 
} 
+0

Alrgiht! Tôi đã giải quyết được vấn đề giai đoạn. Tôi vẫn nhận được một vài lỗi mặc dù. Tôi nhận được lỗi rằng anh không thể tìm thấy bàn phím và mọi lỗi đều nằm trên loại mã sau đây "if (evt.keyCode == Keyboard.RIGHT) { // stuff }" lỗi như sau: "1120: Truy cập bàn phím thuộc tính không xác định". đã cảm ơn bạn đã giải quyết vấn đề sân khấu!Đã tìm kiếm Google nhưng không thể tìm thấy bất cứ điều gì có liên quan! – Graphithy

+0

@Graphithy nếu bạn có một câu hỏi khác, hãy đặt một câu hỏi mới trên stackoverflow thay vì yêu cầu nó trong một bình luận. – davr

0

"1120:. Truy cập của Keyboard tài sản không xác định Có câu trả lời của bạn Bạn chưa xác định các thuộc tính bàn phím Có nghĩa là bạn đã không được nhập vào các gói

nên giống như thế này... :

import flash.display.*; 
import flash.events.*; 
import flash.ui.*; 

Lời khuyên:. có một cái nhìn sâu hơn vào nhập khẩu hãy thử sử dụng builder flash, nó tốt hơn nhiều cho người mới bắt đầu và các lớp học tự động nhập khẩu nên u không cần phải ghi nhớ everythi ng.

0

câu trả lời này đã giúp tôi một triệu lần, nhưng tôi chưa có đủ điểm để bật nó lên, hoặc tôi sẽ.

Điều này xảy ra một cách tổng quát khi bạn cố truy cập mọi thứ trên màn hình trước khi được thêm vào vùng hiển thị. Tôi đã, trong một thời gian, bằng cách sử dụng một init() trong constructor của tất cả các lớp học dự án chính của tôi, nhưng vì vấn đề này, tôi không còn làm. Bây giờ, thay vào đó tôi đã thay thế nó với điều này (trong đó chủ yếu là lớp constructor/tên):

public function Main():void { 
    this.addEventListener(Event.ADDED_TO_STAGE, init); 
    super();  
} 
... 
private function init(e:Event):void { 
... 

Tôi hy vọng điều này sẽ giúp bất kỳ ai khác đọc những cuốn sách tôi đã làm trên flash, cung cấp các init() ý kiến.

And..thanks Greg W.

0

Khi bạn tạo lớp bạn phải tham khảo giai đoạn từ bên trong lớp học của bạn coz của nó không thể truy cập trên toàn cầu, bạn phải vượt qua nó vào lớp, và đây là một ví dụ cho sử dụng trình nghe sự kiện giai đoạn bên trong một lớp học.

package { 
    import flash.events.KeyboardEvent; 

    public class Eventhndl{ 

     private var obj:Object; //create local variable to refarance stage 


     public function Eventhndl(objStage:Object):void{ 
      obj = objStage; //make local refarance for stage inside the class 

      obj.addEventListener(KeyboardEvent.KEY_DOWN,runit); //add the event listener 
     } 

     private function runit(Event:KeyboardEvent):void{ 
      trace("keyDownHandler: " + Event.keyCode); 
      trace("ctrlKey: " + Event.ctrlKey); 
      trace("keyLocation: " + Event.keyLocation); 
      trace("shiftKey: " + Event.shiftKey); 
      trace("altKey: " + Event.altKey); 
     } 
    } 

} 

tiết kiệm nội dung tập tin Eventhndl.as và bây giờ bạn chỉ có thể thêm các thể hiện của lớp này và vượt qua bất cứ đối tượng mà bạn cần phải lắng nghe sự kiện của nó, đây là cách để làm điều đó.

import Eventhndl; 

var EH:Eventhndl = new Eventhndl(stage); 
Các vấn đề liên quan