ActionScript 3
इवेंट्स के साथ काम करना
खोज…
टिप्पणियों
ईवेंट डेटा के टुकड़े हैं जो एक प्रोग्राम बना सकते हैं, विनिमय कर सकते हैं और प्रतिक्रिया कर सकते हैं। अतुल्यकालिक घटना प्रवाह फ्लैश इंजन द्वारा प्रदर्शन सूची पर भेजा जाता है, जैसे बाहरी घटनाओं पर प्रतिक्रिया के रूप में, जैसे माउस आंदोलनों या प्रदर्शित एक अन्य फ्रेम। प्रत्येक अन्य घटना प्रवाह और सभी घटना प्रसंस्करण समकालिक है, इसलिए यदि कोड के एक टुकड़े ने एक घटना उत्पन्न की है, तो कोड की अगली पंक्ति निष्पादित होने से पहले उस पर सभी प्रतिक्रियाओं को संसाधित किया जाता है, भले ही किसी घटना के कई श्रोता हों, उन सभी को अगली घटना को संसाधित होने से पहले चलाया जाएगा।
फ्लैश प्रोग्रामिंग से जुड़ी कई प्रमुख घटनाएं हैं। Event.ENTER_FRAME
किसी अन्य फ़्रेम को खींचने से पहले उत्पन्न होता है, यह पूरी प्रदर्शन सूची को तैयार करने के लिए संकेत करता है, और इसे एक तुल्यकालिक टाइमर के रूप में उपयोग किया जा सकता है। MouseEvent.CLICK
और उसके भाई-बहनों को उपयोगकर्ता से माउस इनपुट प्राप्त करने के लिए इस्तेमाल किया जा सकता है, और TouchEvent.TOUCH_TAP
टच स्क्रीन के लिए एक एनालॉग है। KeyboardEvent.KEY_DOWN
और KEY_UP
KeyboardEvent.KEY_DOWN
से उपयोगकर्ता इनपुट प्राप्त करने के लिए साधन प्रदान करते हैं, हालांकि, कोई भौतिक कीबोर्ड नहीं होने के कारण मोबाइल विभाग में उनका उपयोग लगभग असंभव है। अंत में, Event.ADDED_TO_STAGE
को एक बार प्रदर्शित किया जाता है जब एक प्रदर्शन वस्तु मंच तक पहुंच प्राप्त करती है, और वैश्विक प्रदर्शन सूची में शामिल होती है जो उन घटनाओं की संपूर्णता प्राप्त करती है जो प्रदर्शन सूची को ऊपर और नीचे बुलबुले कर सकती हैं।
फ्लैश में अधिकांश घटनाएं घटक विशिष्ट हैं। यदि आप अपने स्वयं के घटक को डिज़ाइन कर रहे हैं जो फ़्लैश ईवेंट का उपयोग करेगा, तो अपने कंपोनेंट के इवेंट सेट को बनाने के लिए एक flash.events.Event
उपयोग करें। वंश वंश और इसके स्टैटिक String
गुण।
ईवेंट डेटा के साथ कस्टम ईवेंट
package
{
import flash.events.Event;
public class CustomEvent extends Event
{
public static const START:String = "START";
public static const STOP:String = "STOP";
public var data:*;
public function CustomEvent(type:String, data:*,
bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
if (data)
this.data = data;
}
}
}
एक कस्टम घटना को भेजने के लिए:
var dataObject:Object = {name: "Example Data"};
dispatchEvent(new CustomEvent(CustomEvent.START, dataObject))
कस्टम ईवेंट सुनने के लिए:
addEventListener(CustomEvent.STOP, stopHandler);
function stopHandler(event:CustomEvent):void
{
var dataObject:* = event.data;
}
प्रदर्शन सूची से निपटने की घटना
package {
import flash.events.EventDispatcher;
public class AbstractDispatcher extends EventDispatcher {
public function AbstractDispatcher(target:IEventDispatcher = null) {
super(target);
}
}
}
एक घटना पर एक घटना को भेजने के लिए:
var dispatcher:AbstractDispatcher = new AbstractDispatcher();
dispatcher.dispatchEvent(new Event(Event.CHANGE));
उदाहरण के लिए घटनाओं को सुनने के लिए:
var dispatcher:AbstractDispatcher = new AbstractDispatcher();
dispatcher.addEventListener(Event.CHANGE, changeHandler);
function changeHandler(event:Event):void
{
}
बुनियादी घटना से निपटने
फ्लैश अपनी अधिकांश वस्तुओं के लिए Events
भेजता है। सबसे मूल घटना में से एक ENTER_FRAME
, जिसे प्रत्येक प्रदर्शन ऑब्जेक्ट पर डिस्पैच (SWF के फ्रैमरेट पर) भेजा जाता है।
import flash.display.Sprite;
import flash.events.Event;
var s:Sprite = new Sprite();
s.addEventListener(Event.ENTER_FRAME, onEnterFrame);
function onEnterFrame(e:Event)
{
trace("I am called on every frame !");
}
यह फ़ंक्शन हर फ्रेम पर अतुल्यकालिक रूप से कहा जाएगा। इसका मतलब यह है कि आप जिस कार्य को onEnterFrame
ईवेंट हैंडलर के रूप में असाइन करते हैं, वह किसी अन्य एक्शनस्क्रिप्ट कोड से पहले संसाधित होता है जो प्रभावित फ़्रेम से जुड़ा होता है।
अपनी खुद की घटनाओं को जोड़ें
आप Event
कक्षा का विस्तार करके अपनी स्वयं की ईवेंट बना सकते हैं और उन्हें भेज सकते हैं।
import flash.events.Event;
class MyEvent extends Event
{
var data: String;
static public var MY_EVENT_TYPE = "my_event_my_event_code";
public function MyEvent(type: String, data: String)
{
this.data = data;
}
override public function clone():Event
{
return new MyEvent(type, data);
}
}
इसके बाद आप EventDispatcher
का उपयोग करके इसे भेज सकते हैं और इसे सुन सकते हैं। ध्यान दें कि अधिकांश फ़्लैश ऑब्जेक्ट ईवेंट प्रेषण हैं।
import flash.events.EventDispatcher;
var d = new EventDispatcher();
d.addEventListener(MyEvent.MY_EVENT_TYPE, onType);
function onType(e: MyEvent)
{
trace("I have a string: "+e.data);
}
d.dispatchEvent(new MyEvent(MyEvent.MY_EVENT_TYPE, "Hello events!"));
ध्यान दें कि यदि आप अपने ईवेंट को फिर से बनाना चाहते हैं, तो clone
विधि की आवश्यकता है।
सरल माउस घटना संरचना
event types
के उपयोग के माध्यम से आप आसानी से कोड ब्लोट को कम कर सकते हैं जो अक्सर तब होता है जब कई फ़ंक्शन हैंडलिंग फ़ंक्शन को परिभाषित करने के बजाय 1 फ़ंक्शन में घटनाओं को फ़िल्टर करके स्टेज पर कई ऑब्जेक्ट्स के लिए ईवेंट को परिभाषित करता है।
कल्पना कीजिए कि हमारे पास object1
, object2
... object10
नामक स्टेज पर 10 ऑब्जेक्ट हैं
आप निम्नलिखित कर सकते हैं:
var i: int = 1;
while(getChildByName("object"+i) != null){
var obj = getChildByName("object"+i)
obj.addEventListener(MouseEvent.CLICK, ObjectMouseEventHandler);
obj.addEventListener(MouseEvent.MOUSE_OVER, ObjectMouseEventHandler);
obj.addEventListener(MouseEvent.MOUSE_OUT, ObjectMouseEventHandler);
obj.alpha = 0.75;
i++;
}
function ObjectMouseEventHandler(evt:Event)
{
if(evt.type == "click")
{
trace(evt.currentTarget + " has been clicked");
}
else
{
evt.currentTarget.alpha = evt.type == "mouseOver" ? 1 : 0.75;
}
}
इस पद्धति के लाभों में शामिल हैं:
- घटनाओं को लागू करने के लिए वस्तुओं की मात्रा निर्दिष्ट करने की आवश्यकता नहीं है।
- विशेष रूप से यह जानने की आवश्यकता नहीं है कि किस वस्तु के साथ बातचीत की गई थी फिर भी कार्यक्षमता लागू करें।
- आसानी से थोक में घटनाओं को लागू करना।