Touch olayını işleme
Flash Player 10.1 ve üstü, Adobe AIR 2 ve üstü
ActionScript’te temel dokunma olayları da fare olayları gibi diğer olayları işlediğiniz şekilde işlenir.
TouchEvent sınıfı
bölümündeki olay türü sabitleriyle tanımlanan bir dizi dokunma olayını dinleyebilirsiniz.
Not:
Çoklu dokunma noktası girdisi için (bir aygıta birden fazla parmakla dokunma gibi), ilk temas noktası bir fare olayı ve dokunma olayı gönderir.
Basit bir dokunma olayını işlemek için:
-
flash.ui.Multitouch.inputMode
özelliğini
MultitouchInputMode.TOUCH_POINT
özelliğine ayarlayarak uygulamanızın dokunma olaylarını işlemesini sağlayın.
-
Sprite veya TextField gibi özelliklerini InteractiveObject sınıfından alan bir sınıf örneğine olay dinleyicisi ekleyin.
-
İşlenecek dokunma olayının türünü belirtin.
-
Olaya yanıt olarak bir işlem gerçekleştirmesi için bir olay işleyici işlevi çağırın.
Örneğin, dokunmatik bir ekranda mySprite üzerindeki kareye dokunulduğunda aşağıdaki kod bir mesaj görüntüler:
Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT;
var mySprite:Sprite = new Sprite();
var myTextField:TextField = new TextField();
mySprite.graphics.beginFill(0x336699);
mySprite.graphics.drawRect(0,0,40,40);
addChild(mySprite);
mySprite.addEventListener(TouchEvent.TOUCH_TAP, taphandler);
function taphandler(evt:TouchEvent): void {
myTextField.text = "I've been tapped";
myTextField.y = 50;
addChild(myTextField);
}
Touch Olayı özellikleri
Bir olay meydana geldiğinde, olay nesnesi oluşturulur. TouchEvent nesnesi, dokunma olayının yeri ve şartları hakkında bilgiler içerir. Bu bilgileri almak için olay nesnesinin özelliklerinden faydalanabilirsiniz.
Örneğin, aşağıdaki kod bir TouchEvent nesnesi
evt
oluşturur ve ardından metin alanında olay nesnesinin
stageX
özelliğini (dokunmanın meydana geldiği Sahne alanının x koordinatı) gösterir:
Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT;
var mySprite:Sprite = new Sprite();
var myTextField:TextField = new TextField();
mySprite.graphics.beginFill(0x336699);
mySprite.graphics.drawRect(0,0,40,40);
addChild(mySprite);
mySprite.addEventListener(TouchEvent.TOUCH_TAP, taphandler);
function taphandler(evt:TouchEvent): void {
myTextField.text = evt.stageX.toString;
myTextField.y = 50;
addChild(myTextField);
}
Olay nesnesiyle kullanılabilir özellikler için bkz.
TouchEvent
sınıfı.
Not:
Tüm TouchEvent özellikleri tüm çalışma zamanı ortamlarında desteklenmez. Örneğin, tüm dokunmatik aygıtlar, kullanıcının dokunmatik ekrana uyguladığı basınç miktarını algılayamaz. Dolayısıyla,
TouchEvent.pressure
özelliği bu aygıtlarda desteklenmez. Uygulamanızın çalıştığından emin olmak için belli özelliklerin desteğini sınamayı deneyin ve daha fazla bilgi edinmek için
Sorun Giderme
bölümüne bakın.
Dokunma olayı aşamaları
Fare olaylarında yaptığınız gibi dokunma olaylarını da InteractiveObject üzerinde ve dışındaki çeşitli sahnelerde takip edin. Dokunma olaylarını bir dokunma etkileşiminin başlangıcı, ortası ve sonunda izleyin. TouchEvent sınıfı
touchBegin
,
touchMove
ve
touchEnd
olaylarını işleyecek değerleri sunar.
Örneğin, kullanıcıya bir görüntüleme nesnesine dokunduğunda ve nesneyi hareket ettirdiğinde görsel geribildirimde bulunmak için
touchBegin
,
touchMove
ve
touchEnd
olaylarını kullanabilirsiniz:
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
var mySprite:Sprite = new Sprite();
mySprite.graphics.beginFill(0x336699);
mySprite.graphics.drawRect(0,0,40,40);
addChild(mySprite);
var myTextField:TextField = new TextField();
myTextField.width = 200;
myTextField.height = 20;
addChild(myTextField);
mySprite.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
stage.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove);
stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd);
function onTouchBegin(event:TouchEvent) {
myTextField.text = "touch begin" + event.touchPointID;
}
function onTouchMove(event:TouchEvent) {
myTextField.text = "touch move" + event.touchPointID;
}
function onTouchEnd(event:TouchEvent) {
myTextField.text = "touch end" + event.touchPointID;
}
Not:
Başlangıç dokunma dinleyicisi mySprite’a eklenirken, dokunma olayını taşıyıp sona erdirecek olay eklenmez. Kullanıcının parmağı ve işaret aygıtı görüntüleme nesnesinden düz ilerlerse, Sahne dokunma olayını dinlemeye başlar.
Dokunma Noktası Kimliği
TouchEvent.touchPointID
özelliği, dokunma girdisine yanıt veren uygulamaları yazarken gerekli bir unsurdur. Flash her dokunma noktasına benzersiz bir
touchPointID
değeri atar. Dokunma girdisinin aşamalarına veya hareketine bir uygulamadan her yanıt geldiğinde, olayı işlemeden önce
touchPointID
değerini kontrol edin. Sprite sınıfının dokunma girdisi sürükleme yöntemleri, doğru girdi örneğinin işlenebilmesi için parametre olarak
touchPointID
özelliğini kullanır.
touchPointID
özelliği, bir olay işleyicinin doğru dokunma noktasına yanıt vermesini sağlar. Aksi takdirde, olay işleyici öngörülemez davranışlar oluşturarak aygıt üzerindeki her türlü dokunma olayı türü örneğine (örneğin, tüm
touchMove
olaylarını) yanıt verir. Bu özellik bilhassa kullanıcının nesneleri sürüklemesi sırasında önemlidir.
Dokunma dizisinin tamamını yönetmek için
touchPointID
özelliğini kullanın. Bir dokunma dizisinde her biri aynı
touchPointID
değerine sahip bir
touchBegin
olayı, sıfır veya daha fazla
touchMove
olayı ve bir
touchEnd
olayı bulunur.
Aşağıdaki örnek, dokunmatik taşıma olayına yanıt vermeden önce doğru
touchPointID
değerini test etmek için bir
touchMoveID
değişkeni belirler. Aksi takdirde öteki dokunmatik girdi de olay işleyicisini tetikler. Görüntüleme nesnesinin değil, sahnedeki taşıma ve bitiş aşamalarının dinleyicilerini fark edin. Kullanıcının dokunuşu görüntüleme nesnesi sınırlarını aşarsa sahne, taşı veya bitiş aşamalarını dinler.
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
var mySprite:Sprite = new Sprite();
mySprite.graphics.beginFill(0x336699);
mySprite.graphics.drawRect(0,0,40,40);
addChild(mySprite);
var myTextField:TextField = new TextField();
addChild(myTextField);
myTextField.width = 200;
myTextField.height = 20;
var touchMoveID:int = 0;
mySprite.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
function onTouchBegin(event:TouchEvent) {
if(touchMoveID != 0) {
myTextField.text = "already moving. ignoring new touch";
return;
}
touchMoveID = event.touchPointID;
myTextField.text = "touch begin" + event.touchPointID;
stage.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove);
stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd);
}
function onTouchMove(event:TouchEvent) {
if(event.touchPointID != touchMoveID) {
myTextField.text = "ignoring unrelated touch";
return;
}
mySprite.x = event.stageX;
mySprite.y = event.stageY;
myTextField.text = "touch move" + event.touchPointID;
}
function onTouchEnd(event:TouchEvent) {
if(event.touchPointID != touchMoveID) {
myTextField.text = "ignoring unrelated touch end";
return;
}
touchMoveID = 0;
stage.removeEventListener(TouchEvent.TOUCH_MOVE, onTouchMove);
stage.removeEventListener(TouchEvent.TOUCH_END, onTouchEnd);
myTextField.text = "touch end" + event.touchPointID;
}
|
|
|
|
|