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:
  1. flash.ui.Multitouch.inputMode özelliğini MultitouchInputMode.TOUCH_POINT özelliğine ayarlayarak uygulamanızın dokunma olaylarını işlemesini sağlayın.

  2. Sprite veya TextField gibi özelliklerini InteractiveObject sınıfından alan bir sınıf örneğine olay dinleyicisi ekleyin.

  3. İşlenecek dokunma olayının türünü belirtin.

  4. 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; 
}