as3 image slice determine piece


var sliceImageArr:Array = sliceImage(new Bitmap(new GameGif()));
var increaseZoom:Number = 5;

stage.addEventListener(MouseEvent.CLICK, clickf);

function clickf(event:MouseEvent):void
{
	increaseZoom +=  10;
	scaleUp();
}

function scaleUp():void
{
	for (var i:int=0; i<sliceImageArr.length; i++)
	{
		for (var j:int=0; j<sliceImageArr[i].length; j++)
		{
			var sp:Bitmap = sliceImageArr[i][j];
			sp.x = j * (increaseZoom + sliceImageArr[i][j].width);
			sp.y = i * (increaseZoom + sliceImageArr[i][j].height);
			addChild(sp);
		}
	}
}

scaleUp();

function sliceImage(image:Bitmap, numRows:int=3, numColumns:int=3 ):Array
{
	var iWidth:Number = image.width;
	var iHeight:Number = image.height;
	var pieceWidth:Number = iWidth / numColumns;
	var pieceHeight:Number = iHeight / numRows;
	var iArray:Array = new Array();

	var rectangle:Rectangle;
	var bitmap:Bitmap;
	var bData:BitmapData;

	for (var i:int = 0; i < numRows; i++)
	{
		iArray[i] = new Array();
		for (var j:int = 0; j < numColumns; j++)
		{
			bData = new BitmapData(pieceWidth,pieceHeight,true,0x00000000);
			rectangle = new Rectangle( j * pieceWidth, i * pieceHeight, pieceWidth, pieceHeight );
			bData.copyPixels( image.bitmapData, rectangle, new Point( 0, 0 ) );
			bitmap = new Bitmap(bData);
			iArray[i][j] = bitmap;
		}
	}
	return iArray;
}

/*		for vertical slices		*/
function sliceImageVertical(image:Bitmap, numColumns:int=3 ):Array
{
	var iArray:Array = sliceImage(image,1,numColumns);
	return iArray[0];
}

/*		for horizontal slices		*/
function sliceImageHorizontal(image:Bitmap, numRows:int=3 ):Array
{
	var iArray:Array = sliceImage(image,numRows,1);
	var hArray:Array = new Array();
	
	for (var i:int = 0; i < numRows; i++)
	{
		hArray[i] = iArray[i][0];
	}
	return hArray;
}
Advertisements

Javascript reference object

Başlıktanda anlaşılacağı gibi javascriptte bir objeden(.js dosyasından) herhangi bir referans değişkeni ya da metodu isteyebiliriz. Çok basit bir kaç işlemle yapılabilir aslında ama ben kendi işimi kolaylaştırmak için bir kaç bişey yaptım bununla ilgili. Kod yazım stilide denilebilir. 🙂

Bir Main.html olsun bu html bütün javascriptleri çağıran bir döküman.

<!doctype html>
<html>
	<head>
		<meta charset="utf-8"/>
		<title></title>
		<link rel="stylesheet" media="all" href="style.css"/>
		<meta name="viewport" content="width=device-width, initial-scale=1"/>
		<script type="text/javascript" src="main.js"></script>
		<script type="text/javascript" src="second.js"></script>
	</head>
	
	<body lang="en" onload="init();">
		<article><h1 class="huge">Deneme</h1>Merhaba bu benim ilk denemem ve bu siteyi kendi porfolyo sitemi yapmak için kullanacağım..<br/> sitenin alt yapısını html5 ve css3 kullanarak yapmayı planlıyorum aslında.</article>
	</body>
	
</html>

Görmüş olduğunuz gibi iki tane javascript dosyamız var. Bunlara istediğimiz yerden ulaşabiliriz. OOP’daki public variable gibi düşünebilirsiniz. Ancak ulaşmak istediğimiz objemize ulaşırken değişkenimizin ismini yazmamız yeterli oluyor. Ancak hangi javascript dosyasına ait olduğunu bilmiyoruz. Bunun için bir “instance” yaratmak gerekiyor aslında. Oda şöyle;

main.js

var main = undefined;    // bu bizim instance değerimiz. Bunun sayesinde hangi class'dan haberleştiğimizi öğreniyoruz.
var property;
var num;
var lists = [];

function init()
{
	main = this;
	property = "x";
	num = 0;
	
	lists[0] = "serhat sezer";
	lists[1] = "21 yaşında.";
	lists[2] = "yazılım"

	setTimeout(onAddedToStage, 1000);
}

second.js

function onAddedToStage()
{
	alert("stage is added to html...");
	console.log("this is my variables " + main.num);
	console.log("kullanıcı listeleri " + main.lists[0]);
	console.log("deneme " + num);
	console.log("diğer js "  +str );
}

Yukarıda görmüş olduğunuz bütün değerler “main.js” den alınıyor. İlk iki değerimin main.js den aldığımı bildiren bir ibare mevcut diğerlerinin aslında nerden geldiğini bilmiyorum. Yani kısacası kodlar arasında kaybolmamak için hangi objemizi hangi classdan aldığımızı bilmemiz bizim için önemli olduğunu düşünüyorum. Kafa karışlığını önlemek için bu yola başvurmakta fayda var.