Kullanıcı etkileşiminin temelleri

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

Uygulamanız kullanıcı etkinliğine yanıt vermek için ActionScript 3.0 kullanarak etkileşim oluşturabilir. Bu bölüm, ActionScript 3.0 olay modelini zaten bildiğinizi varsaymaktadır. Daha fazla bilgi için Olayları işleme bölümünü inceleyin.

Kullanıcı girdisini yakalama

İster klavye isterse fare ile ya da her ikisi ile kurulan kullanıcı etkileşimi, etkileşimin temelini oluşturur. ActionScript 3.0 içerisinde kullanıcı etkileşimini tanımlamak ve yanıt vermek öncelikle bu olayları dinlemeye dayanır.

DisplayObject sınıfının bir alt sınıfı olan InteractiveObject sınıfı kullanıcı etkileşimini işlemek için gerekli olan yaygın olay yapısını ve işlevselliğini sağlar. Doğrudan bir InteractiveObject sınıfı örneği oluşturmazsınız. Bunun yerine SimpleButton, Sprite, TextField gibi görüntüleme nesneleri ve çeşitli Flash geliştirme aracı ve Flex bileşenleri, kullanıcı etkileşimi modelini bu sınıftan miras alır ve bu nedenle ortak bir yapıya sahiptir. Bu da InteractiveObject öğesinden derlenmiş olan bir nesnede kullanıcı etkileşimini işlemek için öğrendiğiniz tekniklerin ve yazdığınız kodun diğerlerine de uygulanabileceği anlamına gelir.

Önemli kavramlar ve terimler

Devam etmeden önce aşağıdaki önemli kullanıcı etkileşimi terimlerini öğrenmeniz gereklidir:

Karakter kodu
Geçerli karakter kümesinde bir karakteri temsil eden sayısal kod (klavyede basılan bir tuş ile ilişkilendirilmiş). Örneğin, "D" ve "d" karakterleri İngilizce bir klavyede aynı tuşa basılarak oluşturulmalarına rağmen karakter kodları farklıdır.

Bağlam menüsü
Bir kullanıcı sağ tıklattığında veya belirli bir klavye-fare birleşimini kullandığında görünen menü. Bağlam menüsü komutları seçilen eylemleri uygular. Örneğin, bir görüntünün bağlam menüsü görüntüyü farklı bir pencerede açma komutu ile görüntüyü indirme komutu içerebilir.

Odak
Seçili öğenin etkin ve klavye ya da fare etkileşiminin hedefi olduğunun göstergesidir.

Tuş kodu
Klavyedeki fiziksel bir tuşa karşılık gelen sayısal kod.

Odak yönetme

Etkileşimli bir nesne, programlama veya kullanıcı eylemi ile odak alabilir. Ayrıca, tabEnabled özelliği true olarak ayarlanmışsa kullanıcı Sekme tuşu ile odağı bir nesneden diğerine geçirebilir. Aşağıdaki durumlar haricinde tabEnabled değerinin varsayılan olarak false şeklinde olduğuna dikkat edin:

  • Bir SimpleButton nesnesi için değer true olur.

  • Bir giriş metni alanı için değer true olur.

  • buttonMode değeri true olan bir Sprite veya MovieClip nesnesi için değer true olur.

Her iki durumda da odak değiştiğinde ek davranış sağlamak için FocusEvent.FOCUS_IN veya FocusEvent.FOCUS_OUT öğelerine dinleyici ekleyebilirsiniz. Bu durum özellikle metin alanları ve formlar için kullanışlıdır ancak InteractiveObject sınıfından miras alan hareketli grafikler, film klipleri veya diğer nesneler için de kullanılabilir. Aşağıdaki örnek Sekme tuşu ile odak değiştirmenin nasıl etkinleştirileceğini ve sonra gelen odak olayına nasıl yanıt verileceğini gösterir. Bu durumda, karelerin her biri odak haline geldiğinde renk değiştirir.

Not: Flash Professional odak yönetme için klavye kısayolları kullanır ve bu nedenle uygun odak simülasyonu için SWF dosyaları Flash içerisinde değil de bir tarayıcı veya AIR ile test edilmelidir.
var rows:uint = 10; 
var cols:uint = 10; 
var rowSpacing:uint = 25; 
var colSpacing:uint = 25; 
var i:uint; 
var j:uint; 
for (i = 0; i < rows; i++) 
{ 
    for (j = 0; j < cols; j++) 
    { 
        createSquare(j * colSpacing, i * rowSpacing, (i * cols) + j); 
    } 
} 
 
function createSquare(startX:Number, startY:Number, tabNumber:uint):void 
{ 
    var square:Sprite = new Sprite(); 
    square.graphics.beginFill(0x000000); 
    square.graphics.drawRect(0, 0, colSpacing, rowSpacing); 
    square.graphics.endFill(); 
    square.x = startX; 
    square.y = startY; 
    square.tabEnabled = true; 
    square.tabIndex = tabNumber; 
    square.addEventListener(FocusEvent.FOCUS_IN, changeColor); 
    addChild(square); 
} 
function changeColor(event:FocusEvent):void 
{ 
    event.target.transform.colorTransform = getRandomColor(); 
} 
function getRandomColor():ColorTransform 
{ 
    // Generate random values for the red, green, and blue color channels. 
    var red:Number = (Math.random() * 512) - 255; 
    var green:Number = (Math.random() * 512) - 255; 
    var blue:Number = (Math.random() * 512) - 255; 
     
    // Create and return a ColorTransform object with the random colors. 
    return new ColorTransform(1, 1, 1, 1, red, green, blue, 0); 
}

Girdi türlerini keşfetme

Flash Player 10.1 ve Adobe AIR 2 sürümleri, çalışma zamanı ortamlarını belli girdi türlerinin desteklenmesi açısından test edebilmeyi sağlamıştır. Çalışma zamanının dağıtılmış olduğu aygıtın açık olup olmadığını sınamak için ActionScript’i kullanabilirsiniz:
  • Stilus ile veya parmakla girişi (veya hiç dokunmadan girişi) destekler.

  • Kullanıcı için sanal veya fiziksel klavyeye sahiptir (veya klavyesizdir).

  • Bir imleç görüntüler (görüntülemiyorsa, imleci bir nesnenin üzerinde bekletmeye bağlı özellikler çalışmaz)

Girdi keşfetme ActionScript API’leri şunları içerir:

Girdi keşfetme API’leri, bir kullanıcının aygıt yetkilerinden faydalanabilmenize imkan verir veya bu yetkiler mevcut olmadığında alternatifler sunar. Bu API’ler özellikle mobil ve dokunmatik uygulamalar geliştirmek için faydalıdır. Örneğin, stilus için küçük düğmeleri bulunan bir mobil aygıt arabirimine sahipseniz, kullanıcının parmakla giriş yapabileceği daha büyük düğmelere sahip alternatif bir arabirim sağlayabilirsiniz. Aşağıdaki kod, stilus etkileşimine uygun bir kullanıcı arabirimi öğesi grubu atayan createStylusUI() adlı işleve sahip bir uygulama içindir. createTouchUI() adı verilen bir diğer işlev ise parmak etkileşimine uygun başka bir kullanıcı arabirimi öğesi grubu atar:

if(Capabilities.touchscreenType == TouchscreenType.STYLUS ){ 
    //Construct the user interface using small buttons for a stylus 
    //and allow more screen space for other visual content 
    createStylusUI(); 
} else if(Capabilities.touchscreenType = TouchscreenType.FINGER){ 
    //Construct the user interface using larger buttons 
    //to capture a larger point of contact with the device 
    createTouchUI(); 
}
Farklı girdi ortamları için uygulamalar geliştirirken aşağıdaki uyumluluk çizelgesini göz önünde bulundurun:

Ortam

supportsCursor

touchscreenType == FINGER

touchscreenType == STYLUS

touchscreenType == NONE

Klasik Masaüstü

true

false

false

true

Kapasitif Dokunmatik Ekranlı Aygıtlar (tabletler, PDA’lar ve Apple iPhone ya da Palm Pre gibi hafif dokunuşları algılayan telefonlar)

false

true

false

false

Dirençli Dokunmatik Ekranlı aygıtlar (tabletler, PDA’lar ve HTC Fuze gibi hassas, yüksek basınçlı teması algılayan telefonlar)

false

false

true

false

Dokunmatik Olmayan Ekranlı aygıtlar (uygulamaları çalıştırıp teması algılayan ekranlara sahip olmayan, özellikli telefonlar ve aygıtlar)

false

false

false

true

Not: Farklı aygıt platformları çok sayıda girdi türü kombinasyonunu destekleyebilir. Bu çizelgeyi genel bir kılavuz olarak kullanın.