as3 insert a link into array

Actionscript’deki array kullanımında çok esnek davranmışlar bi çok kolaylığı sağlıyor arraylerle çalışırken, ayrıca yeni bir array sisteminide eklediler. Yani bi açıdan baktığımızda arrayleri kullanmamız işimizi kolaylaştırabiliyor bazı noktalarda. Kısa verileri depolamak, etiketleri dizi içerisinde biriktirmek vs. gibi işlemlerde array yapılarını kullanabiliriz. Ben de menü yapılarında etiketleri genelde array’in içerisinden alıyorum. Ama linkleme sisteminde de click eventinde if kontrolyüle hangi butona tıkladığını kontrol edip ona göre linkleme yapıyordum. Eğer birden fazla link varsa if koşulu bir o kadarda uzuyordu. Bunu en aza indirgemek için linklerede belirli bir atama yaparak kurtarabiliyorum. Aşağıda bir örneği var.

Aşağıdaki kodda for döngüsünde arraylerimizin elemanlarını listeliyoruz. Daha sonra eachArray metodunun split() fonksiyonuyla belirlediğim ayracı buluyorum. Daha sonra clicklediğim eventte eğer link yolu varsa linke gidiyor, eğer yoksa sayfa numarasına gidiyor. 

var array:Array = new Array("Anasayfa","Hakkımda","İletişim","Ürünler|http://www.link.com");

for (var i:int = 0; i<array.length; i++)
{
	var lbl:libLink = new libLink();
	addChild(lbl);
	lbl.x = 150;
	lbl.y = 40 + i * 40;

	var eachArray:Array = array[i].split("|");
	lbl.txt.text = eachArray[0];
	lbl.linkPage = eachArray[1];
	lbl.itemNo = "" + i;
	lbl.addEventListener(MouseEvent.CLICK, clickPage);

}

function clickPage(event:MouseEvent):void
{
	var mcSelected:MovieClip = event.currentTarget as MovieClip;

	if (mcSelected.linkPage != undefined)
	{
		navigateToURL(new URLRequest(mcSelected.linkPage),"_blank");
	}
	else
	{
		changePageNum(mcSelected.itemNo);
	}
}

function changePageNum(pageIndex:int = 0)
{
	trace("sayfa numarası " + pageIndex);
}

Advertisements

Enerjiyi kaybetmek

Herhangi bir dalda mutlu olmak ya da başarılı olmak isteniyorsa, ilk olarak mutlu bir çevrenin olması gerekir. Son zamanlarda çok sıkıntı yaşadığım için iş anlamında aşırı derecede bir çöküş içerisindeyim. Hiç bir şekilde hiçbir şeye tutunamıyorum ve bu beni aşırı derecede kötü yönde etkiliyor. Kendimi çok kötü hissediyorum ve aynı zamanda mutsuz. Ailem ile anlaşamamanın yoğun bir üzüntüsünü gün be gün yaşamak bana sıkıntı veriyor. Benim bu zamana kadar istediğim yegane şey çevrem ile mutlu bir iletişimimin olmasıydı. Ancak düşünce farklılıkları buna engel olabiliyor. Hal böyle olunca ister istemez insanları kırıp üzebiliyorsun. Herkes kendi düşündüğünün doğruluğunu savunur. Ama kimse aynı açıdan bakmaz. İşte bu sebelerden dolayı ve daha fazlalarının yaşandığı için günden güne tükeniyor sanki insan..

as3 words counter

Twitterdakinden bir örnek alarak farklı bir şey yapmayı denedim. Aşağıdaki örnekte kullanıcının kaç adet kelime girdiğini sayacımızda yapıyoruz. Bunu karakter olarakda yapabilirdik ancak kelime olarak yapmakda algoritmik açıdan daha kalıcı bir iş olarak görüyorum ilerde böyle bir şey çıkarsa tekrardan bakarım diye…

Tahmin edersiniz ki sahnemizde bir adet “txt” adında textField var ve inputText arından birde “count” adında bir textFieldımız daha var. Yaptığımız işleme gelinde “txt” adlı metin alanına bir olay dinleyicisi atıyorum bu her kelime girildiğinde “changed” adındaki fonksiyonu çalıştırıyor. Daha sonra kullanıcının girdiği stringi array’e atayarak dizi haline getiriyorum. Aşağıda da dizi kadar for döngüsüne sokuyorum daha sonra i değerine göre count’ textfieldın değerini değiştiriyorum…


txt.addEventListener(Event.CHANGE, changed);
var arr:Array;

function changed(event:Event):void
{
	var str:String = String(txt.text);
	arr = str.split(" ");

	if (arr != null)
	{
		for (var i:int=0; i<arr.length; i++)
		{
			trace("array " + arr,i);
			count.text = "" + i;

		}
	}
}

as3 Göreceli konumlandırma (the power of relative positioning)

ActionScript’de sahnedeki her bir obje displayobject olarak kabul edilir. Ve konumlandırmasıda Stage’in – Scene’e göre ayarlanmaktadır. Bu gibi durumlarda stage’in boyutuna göre koordinatlandırma yapabiliriz. Ya da Aşağıdaki gibi bir akordiyon sistemi de işimizi görebilir.

Aşağıda yorum satırı olarak kodların ne işe yaradığını açıkladım.



// navigasyonun içinde kaç adet kutu olacağını belirtiyoruz...
var boxNum:int = 8;
var mcSelected:MovieClip;

// Kutuları daha iyi kontrol edebilmek için nav isminde bir movieclibe atıyoruz.
var nav:MovieClip = new MovieClip();
nav.x = 20;
nav.y = 20;
addChild(nav);

// Kutular kütüphaneden çekiliyor..
// i değerine göre x değerlerini diziyoruz
// setupRollOver fonskiyonuna movieclipleri yolluyoruz...
for (var i:int = 0; i < boxNum; i++)
{
	var box:Box = new Box();
	box.x = box.width * i;
	nav.addChild(box);
	setupRollOver(box);
}

function setupRollOver(mc:MovieClip):void
{
	// scaleDest değerine göre objelerimiz scale ediyor...
	mc.scaleDest = 1;
	mc.buttonMode = true;
	mc.addEventListener(MouseEvent.CLICK, onClick);
	//mc.addEventListener(MouseEvent.ROLL_OUT, onOut);
	mc.addEventListener(Event.ENTER_FRAME, onScaleEnterFrame);
}

function onScaleEnterFrame(event:Event):void
{
	// her obje için enterFrame'e giriyor...
	var mc:MovieClip = MovieClip(event.target);
	// hedefteki movieclibin mevcut değerini 'scaleDest' değeri ile mevcut scaleX değerini çıkartıyoruz
	// ivme katmak için ise 2 değerine bölüyoruz Bu değer arttıkça ease değeride yumuşayacaktır.
	mc.scaleX += (mc.scaleDest - mc.scaleX) / 3;
	trace("selected mc " + mc.scaleX);
}

function onClick(event:MouseEvent):void
{
	// bir sonraki tıklanan movieclibin 'scaleDest' değerini 1 yapıp eski haline getiriyoruz.
	if(mcSelected)
	{
		mcSelected.scaleDest = 1;
		removeEventListener(Event.ENTER_FRAME, onLoop);
	}
	// tıkladığında genişletmesini sağlıyoruz...
	event.target.scaleDest = 3;
	
	mcSelected = event.target as MovieClip;
	addEventListener(Event.ENTER_FRAME, onLoop);
}

/*function onOut(event:MouseEvent):void
{
	event.target.scaleDest = 1;
}*/


function onLoop(event:Event):void
{
	// kutuların pozisyonlarını ayarlıyoruz...
	for (var i:int = 1; i < boxNum; i++)
	{
		// currentBox tıkladığımız andaki movieclibi alıyoruz.
		var currentBox:MovieClip = MovieClip(nav.getChildAt(i));
		// currentBox ile tıkladığımız objenin bir öncesini alıyoruz.
		var prevBox:MovieClip = MovieClip(nav.getChildAt(i-1));
		// tıkladığımız movieclibin değerini bi önceki movieclibin x değeri ile prevBox'ın width değerini topluyoruz...
		currentBox.x = prevBox.x + prevBox.width;
	}
}

as3 “nested array”

2D oyunlarında ya da diğer web uygulamalarında Arraylerin büyük bir faydası var. Bazı durumlarda günüde kurtardığı oluyor. Bunun için arrayleri iyi kavramalı, silme, ekleme istediğini silme, sonuna ekleme, başına ekleme gibi durumları kullanabiliriz projelerde. Array yapısı bütün programlama dillerinde hemen hemen aynı yapıda olduğu için herhangi bir programlama dilinde array mantığını iyi bi şekilde öğrendikten sonra programatik açından bi çok işinizi halledecektir.

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;

// Kütüphanedeki objeleri sahneye ekliyorum. 
// addChild işlemini başka bir işlemde yapıyorum.
var roof:libRoofSouth = new libRoofSouth();
roof.name = "libRoofSouth";
var ramp:libRampWest = new libRampWest();
ramp.name = "libRampWest";
var plain:libPlainBlock = new libPlainBlock();
plain.name = "libPlainBlock";
var chest:libChestClosed = new libChestClosed();
chest.name = "libChestClosed";
var ramp2:libRampSouth = new libRampSouth();
ramp2.name = "libRampSouth";

// Objeleri dizilere ekleyip daha sonra istediğim gibi ekleme çıkartma yapabiliyorum.
var array1:Array = [ramp, plain, plain, ramp2];
var array2:Array = [plain,plain,plain,plain];
var array3:Array = [chest, chest, chest, chest];

// Bütün dizilerimi bir tane array içinde tutuyorum.
var level:Array = [array1,array2,array3];

// Level'ı döngüye sokuyorum...
// Bu durumda 3 kere döngü dönecektir. 0,1,2 şeklinde.
for(var row:int = 0; row < level.length; row ++)
{
	// Bu döngüde ise yukarıda oluşturulan dögünün içine giriyor yani şu şekilde bi işlem oluyor
	// Herşeyi içine alan dizinin içindeki array'in değerleri al.
	// array[0]
	// array[array1] = içinde değeleri alacak yani hangi objeleri eklediysek. gibi...
	for(var column:int = 0; column < level[row].length; column ++)
	{
		var ObjectClass:Class = getDefinitionByName(level[row][column].name) as Class;
		var bmd:BitmapData = new ObjectClass() as BitmapData;
		
		var imgBmp:Bitmap = new Bitmap(bmd);
		imgBmp.x = 5 + imgBmp.width * column;	// İlk olarak x koordinatını ayarlıyoruz. bu durumda 0,1,2,3,4... ile imgBmp'nin width'i çarpılacak.
		imgBmp.y = 210 - (imgBmp.height-50) * row; // Daha sonra Sütün sayısına göre ekliyoruz. 0,1,2 şeklinde olacaktır.
		addChild(imgBmp);		
	}
}

Son olarak satır – sütün (row and column) mantığını anlayabilmek için bir araştırma yaptım çok kullanmadığımız için mantığını kavramada ve uygulamada sıkıntı yaşıyorum. Şöyle ki ;

Satır(Row)
Satırlar(rows) bizim yatay düzlemde sıraladığımız sitemdir. Daha iyi anlayabilmek için aşağıdaki resime bakabilirsiniz…
510px-Matrix_Rows

Sütün(Column)
Sütünlar(columns) bizim dikey düzlemde sırladığımız objelerimiz olarak adlandırılabilir.
510px-Matrix_Columns

as3 Array’den seçilen objeyi kaldırma

Uzun başlıkları sevmeyip tekrardan uzun başlık atan birisiyim. Buda ilginç 🙂 Neyse, olay şu şekilde cereyan etti şimdi ben tıkladığım objemin sahneden kalkmasını(aynı zamanda array’den remove etmesini) istiyordum. Baktım ettim sonunda kendime yardımcı bir fonksiyon yaptım. Buyurun ihtiyacı olan sömürebilir 🙂


var array:Array = new Array("a","b","c","d","e","f");

arrayRemoveCurrentItem(array,"e", 1);

function arrayRemoveCurrentItem(item:Object, char:Object, quantiy:int):void
{
	if(item !== null && item is Array)
	{
		item.splice(item.indexOf(char), quantiy);
		char = null;
		quantiy = undefined;
	}
}

trace(array);

Aynı zamanda bunu movieclip içinde deneyebilirsiniz. Sonuçta alınan iki argümanda Object türünden olduğu için hiç bir sıkıntı çıkarmayacaktır. Yanlız ilk argümanı Array vermeye dikkat etmek gerekiyor. Movieclip ile ilgili örnek;

var array:Array = [mc0,mc1,mc2];

for (var i:int=0; i<array.length; i++)
{
	array[i].addEventListener(MouseEvent.CLICK, clickItem);
}

function clickItem(event:MouseEvent):void
{
	arrayRemoveCurrentItem(array,event.currentTarget as MovieClip, 1);
}

function arrayRemoveCurrentItem(item:Object, char:Object, quantiy:int):void
{
	if (item !== null && item is Array)
	{
		item.splice(item.indexOf(char), quantiy);
		char.visible = false;
		char = null;
		quantiy = undefined;
	}
}

trace(array);