2010-04-21 12 views
5

में एएस 3 कक्षा से मंच तक कैसे पहुंचे I समस्या का सामना करना है कि मैं एक मूवीक्लिप चलाने के लिए कीबोर्ड एवेंट लिस्टनर का उपयोग कर रहा हूं। चूंकि मैं एक कॉलेज के छात्र हूं, मैं इसे एक असाइनमेंट के लिए बना रहा हूं लेकिन हमें 3 कक्षाओं का उपयोग करने के लिए मजबूर होना पड़ता है।एडोब फ्लैश

जब मैं रखरखाव में कोड चलाता हूं, तो कोई समस्या नहीं होती है। लेकिन जब मैं इसे किसी अन्य वर्ग से एक्सेस करने का प्रयास करता हूं (फिल्म में क्लिपक्लिप पर 'एक्शनस्क्रिप्ट के लिए निर्यात' के साथ) मुझे एक त्रुटि मिलती है जो वह मंच को संबोधित नहीं कर सकता है।

यह। चरण .addEventListener (KeyboardEvent.KEY_DOWN, dostuff);

उत्तर

9

एएस 3 में एक कक्षा मंच पर नहीं है जब तक कि आप इसे वास्तव में वहां नहीं रखते। नतीजतन, "this.stage" संकलन समय पर शून्य हो जाएगा। आप सही समय तक अपने श्रोताओं को बाध्य करने में देरी करने के लिए ADDED_TO_STAGE ईवेंट का उपयोग करके इस समस्या को हल कर सकते हैं।

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! मैंने मंच की समस्या हल कर ली है। हालांकि मुझे अभी भी कुछ त्रुटियां मिलती हैं। मैं त्रुटि मिल रही है कि वह कुंजीपटल नहीं मिल रहा है और हर त्रुटि कोड के निम्नलिखित प्रकार पर स्थित है "अगर (evt.keyCode == Keyboard.RIGHT) { // सामान }" त्रुटि निम्न है: "1120: अपरिभाषित संपत्ति कुंजीपटल का उपयोग।" मंच की बात को हल करने के लिए पहले ही धन्यवाद!इसके लिए Google को खोजा लेकिन कुछ भी प्रासंगिक नहीं मिला! – Graphithy

+0

@Graphithy यदि आपके पास कोई अलग प्रश्न है, तो टिप्पणी में पूछने के बजाय स्टैक ओवरफ्लो पर एक नया प्रश्न पूछें। – davr

0

"1120:। अपरिभाषित संपत्ति कीबोर्ड की पहुंच आपका जवाब नहीं है आप कीबोर्ड गुण निर्धारित नहीं किया है जिसका मतलब है आप पैकेज को आयात नहीं किया है

कुछ इस तरह देखना चाहिए।।। :

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

सलाह:। आयात करने में एक गहरी नजर है , फ्लैश निर्माता का उपयोग करने की कोशिश अपने बहुत शुरुआती और ऑटो आयात कक्षाएं तो यू न everythi याद रखने की आवश्यकता के लिए बेहतर एनजी।

0

इस उत्तर ने मुझे दस लाख बार मदद की है, लेकिन मेरे पास अभी तक इसे पॉप करने के लिए पर्याप्त अंक नहीं हैं, या मैं चाहता हूं।

यह सामान्य रूप से तब होता है जब आप मंच पर जोड़े जाने से पहले मंच पर कुछ भी एक्सेस करने का प्रयास करते हैं। मैं थोड़ी देर के लिए, मेरी सभी परियोजनाओं के मुख्य वर्गों के निर्माता में एक init() का उपयोग कर रहा था, लेकिन इस मुद्दे के कारण, मैं अब नहीं करता। अब, के बजाय मैं इसे इस के साथ जगह ले ली है (जहां मुख्य है वर्ग निर्माता/नाम):

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

मुझे आशा है कि यह किसी और को जो किताबें मैं फ्लैश पर किया था, कि init की पेशकश के किसी भी पढ़ा मदद करता है() विचार।

And..thanks ग्रेग डब्ल्यू

0

जब आप वर्ग बनाते हैं तो आप अपनी सुलभ नहीं coz अपनी कक्षा के अंदर से मंच उल्लेख करने के लिए विश्व स्तर पर आप इसे कक्षा में पारित करने के लिए है, और यहाँ के लिए एक उदाहरण है एक वर्ग के अंदर मंच घटना श्रोता का उपयोग करें।

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); 
     } 
    } 

} 

Eventhndl.as के रूप में फ़ाइल को बचाने और अब तुम सिर्फ इस वर्ग के उदाहरण जोड़ सकते हैं और जो कुछ भी उद्देश्य यह है कि आप अपने घटना सुनने की जरूरत है, यहां पारित कर सकते हैं कि कैसे करना है।

import Eventhndl; 

var EH:Eventhndl = new Eventhndl(stage); 
संबंधित मुद्दे