Starling starting part – 1

Main.as

package 
{
	import flash.display.MovieClip;
	import starling.core.Starling;
	
	[SWF(width="640",height="480",frameRate="60",backgroundColor="#ffffff")]
	
	public class Main extends MovieClip
	{
		private var starling:Starling;
		
		public function Main()
		{
			starling = new Starling(Game, stage);
			starling.showStats = true;
			starling.start();
		}
	}
}

Game.as

package  
{
	import starling.textures.TextureAtlas;
	import starling.textures.Texture;
	import starling.display.Sprite;
	import starling.display.Image;
	import starling.animation.Juggler;
	import starling.core.Starling;
	import starling.display.MovieClip;
	
	public class Game extends Sprite 
	{
		// SpriteSheet'lerimizi kullanacağımız içerisinde konum ve diğer argümanlar olan xml
		[Embed(source="maps.xml",mimeType="application/octet-stream")]
        public static const AtlasXml:Class;
 
		// SpriteSheet'imiz içerisinde graphic assetslarımız bulunuyor.
        [Embed(source="maps.png")]
        private static const AtlasTexture:Class;
		
		public function Game() 
		{
			// Texture Classının bitmap metodunu kullanarak fiziksel bir şekilde kullanımını sağlıyoruz.
			var atlasTexture:Texture = Texture.fromBitmap(new AtlasTexture());
			// Aynı şekilde aldığımız .PNG dosyamızın içerisinde gezinmemizi sağlayacak XML dosyası.
			var atlasXML:XML = XML(new AtlasXml());
			// Artık SpriteSheet'imizi istediğimiz gibi kullanabilecek duruma getirdik.
			var atlas:TextureAtlas = new TextureAtlas(atlasTexture, atlasXML);
			
			// Sadece Image olarak kullanmak için aşağıdaki metodu kullanıyoruz.
			/*
			var animTextureImg:Image = new Image(atlas.getTexture("RedClip0000"));
			addChild(animTextureImg);
			*/
			
			/* 
			Animasyon olarak kullanmak istediğimizde XML'deki Clip isimlerini verip kaç sekans olduğunu belirtiyoruz. 
			"Buarada benim clibin ismi RedClip000... gibi bir isimlendirmesi var ben sadece sayılar olmadan belirtiyorum. Gerisini class kendisi hallediyor 
			*/
			var animateBallClip:MovieClip = new MovieClip(atlas.getTextures("RedClip"), 30);
			addChild(animateBallClip);
			Starling.juggler.add(animateBallClip);
			
		}
	}
}
Advertisements

as3 dragging content according to stage bounds

Açıklamaları yakında ekleyeceğim 😉


var offsetPoint:Point = new Point();
var destinationPoint:Point = new Point();
var boundsRect:Rectangle = new Rectangle(0,0,stage.stageWidth,stage.stageHeight);
var isDragging:Boolean = false;
var speed:Number = 5;

mcObj.addEventListener(MouseEvent.MOUSE_DOWN, onStartDrag);
stage.addEventListener(MouseEvent.MOUSE_UP, onStopDrag);
mcObj.addEventListener(Event.ENTER_FRAME, onUpdateMouse);

function onStartDrag(event:MouseEvent):void
{
	offsetPoint.x = mcObj.mouseX;
	offsetPoint.y = mcObj.mouseY;
	isDragging = true;

}

function onStopDrag(event:MouseEvent):void
{
	isDragging = false;
}

function onUpdateMouse(event:Event):void
{
	if (isDragging)
	{
		destinationPoint.x = mouseX;
		destinationPoint.y = mouseY;
	}

	mcObj.x -= (mcObj.x - (destinationPoint.x - offsetPoint.x)) / speed;
	mcObj.y -= (mcObj.y - (destinationPoint.y - offsetPoint.y)) / speed;

	if (mcObj.x > boundsRect.left)
	{
		trace("asfasf");
		mcObj.x = boundsRect.left;
	}
	if (mcObj.x <  -mcObj.width + boundsRect.right)
	{
		mcObj.x =  - mcObj.width + boundsRect.right;
	}
	if (mcObj.y > boundsRect.top)
	{
		mcObj.y = boundsRect.top;
	}
	if (mcObj.y <  -  mcObj.height + boundsRect.bottom)
	{
		mcObj.y =  -  mcObj.height + boundsRect.bottom;
	}
}

for loop performance benchmarking

Loop type

time

results

for (i = 0; i < n; i++) {} 472 ms 10000000
for (i = 0; i < n; ++i) {} 438 ms 10000000
for (i = 0; i < n;) {i++} 364 ms 10000000
for (i = 0; i < n;) {++i} 418 ms 10000000
for (i = 0; i++ < n;) {} 372 ms 10000000
for (i = 0; ++i < n;) {} 385 ms 9999999
i = 0; while (i < n) { i++; } 381 ms 10000000
i = 0; while (i < n) { ++i; } 372 ms 10000000
i = 0; while (i++ < k) {} 386 ms 10000000
i = 0; while (++i < k) {} 399 ms 9999999
i = n; while (i > 0) { i–; } 194 ms 10000000
i = n; while (i > 0) { –i; } 191 ms 10000000
i = n; while (i–) {} 199 ms 10000000
i = n; while (–i) { } 191 ms 9999999
for (s in array) 24451 ms 10000000
for each (i in array) 1181 ms 10000000
accessing array without integer casting 2580 ms 10000000
accessing array with integer casting 2159 ms 10000000

as3 pushed items

import com.greensock.*;

var menuItem:MenuItem;
var container:MovieClip = new MovieClip();
addChild(container);

container.x = 50;
container.y = 10;

var menus:Array = [];
var activeItem:MenuItem;

var menuSpace:int = 5;

for (var i:int =0; i<5; i++)
{
	menuItem = new MenuItem();
	container.addChild(menuItem);
	menuItem.x = ((menuItem.width + menuSpace) * i);
	menuItem.addEventListener(MouseEvent.CLICK, onclick);
	menus.push(menuItem);
	menus[i].buttonIndex = i;
}


function onclick(event:MouseEvent):void
{
	if(activeItem != null)
	{
		TweenMax.to(activeItem,1,{scaleX:1, scaleY:1, onUpdate: scaleUpdate });
	}
	
	activeItem = event.currentTarget as MenuItem;

	TweenMax.to(event.currentTarget,1,{ scaleX:1.5, scaleY:1.5, onUpdate: scaleUpdate });
}

function scaleUpdate():void
{
	var nPush:uint = 0;
	for (var i:int=0; i<menus.length; i++)
	{
		menus[i].x = nPush;
		nPush += (menus[i].width + menuSpace);
	}
}


Dizi içerisinde karakter filtreleme

Bugün güzel bir metod ile karşılaştım. Daha önceden bunu denemiştim ama işime yaracağı aklıma gelmezdi. Şuanda işime büyük ölçüde yaradığı için buraya yazma gereği duyuyorum. Array.every() bir çok programlama dilinde bulunuyor aslında. Kullanımı ise basit. Array.every() metodu içine bir callBack metodu çağırıyor. Bu metodun içinde ise (element,index,array) argümanları içeriyor. Biz karakterlerimizi bu argümanlara göre işlem yapıyoruz.


var array:Array = new Array("serhat","123456");
var stats:Boolean = array.every(controlCharLimit);

if(stats)
{
	// OK. do it.
}

function controlCharLimit(element:String , index:Number , array:Object)
{
	if (element.length == 6)
	{
		return true;
	}
	else
	{
		return false;
	}
}

javascript prototype referans yöntemi

Eğer javascript yazıyorsak ve ek özelliklere ihtiyaç duyuyorsak ( array splice, slice, trim vs.) gibi işlemler için kendimize ek metodlar yapabiliriz. Ben aşağıda sadece mantığını kavrayabilmek için bir örnek yaptım.

function Serhat()
{
	this.name = "serhat";
	this.surname = "sezer";
	this.position = "developer";
}

Serhat.prototype.execute = function()
{
	var object = new Serhat();
	var txt = document.body;

	txt.innerHTML = object.name;
	txt.innerHTML += "<br>";
	txt.innerHTML += object.surname;
	txt.innerHTML += "<br>";
	txt.innerHTML += object.position;
}

window.onload = init;

function init()
{
	/*
            === Referans yönetimiyle isteme şekli ===
        var serhat = new Serhat();
	log(serhat.name);
	log(serhat.surname);
	log(serhat.position);
	
        */
	var serhat = new Serhat();
	serhat.execute();
}

function log($)
{
	console.log($);
}