[Flash/ActionScript] 4일차 - 디스플레이리스트
1. 텍스트필드 Hello World!를 스테이지에 추가하기
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
var i:int;
var parts:Array = ["Hello", "World", "!"];
for(i=0;i0 ){
//기본적으로 텍스트 필드의 너비와 높이는 100픽셀 그전의 객체를 참조하여 위치설정
txtFld.x = getChildAt(i-1).x + getChildAt(i-1).width;
}
addChild(txtFld);
}
2. 디스플레이 리스트
- stage[스테이지] : 객체 디스플레이 컨테이너, 리스트의 최상위 컨테이너
- main timeline[메인 타임라인] : 객체 디스플레이 컨테이너, root 속성을 통해 접근가능.
fla 파일은 다른 자원들이 포함된 메인 타임라인을 가진다.
이벤트 전달을 위해 메인 타임라인에 이벤트 리스너를 추가하기도한다.
- movieClip[무비클립]: 객체 디스플레이 컨테이너 (자식으로 다른 객체를 가질 수 있다.)
- shape : 사각형, 원형, 선이나 그리기도구로 생성된 모양
- Bitmap
- Sprite : 액션스크립트3 에서 새롭게 등장한 개념인 스프라이트는 무비클립에서 타임라인이 빠진 객체이다.
- Loader : 이미지나 다른 swf 를 불러와서 디스플레이 리스트에 포함시키는 역할을 한다.
3.디스플레이 자식 객체 확인
function showChildren(dispObj:DisplayObject, indentLevel:Number):void {
for (var i:uint = 0; i < dispObj.numChildren; i++) {
var obj:DisplayObject = dispObj.getChildAt(i);
if (obj is DisplayObjectContainer) {
trace(padIndent(indentLevel), obj.name, obj);
showChildren(obj, indentLevel + 1);
} else {
trace(padIndent(indentLevel) + obj);
}
}
}
showChildren(stage, 0);
function padIndent(indents:int):String {
var indent:String = "";
for (var i:uint = 0; i < indents; i++) {
indent += " ";
}
return indent;
}
root1 [object MainTimeline]
largeContainer [object MovieClip]
[object Shape]
smallContainer [object MovieClip]
[object Shape]
child2 [object MovieClip]
[object Shape]
[object StaticText]
child0 [object MovieClip]
[object Shape]
[object StaticText]
child1 [object MovieClip]
[object Shape]
[object StaticText]
4. 반복문을 이용한 여러줄 정렬
// 정렬하는법
// total : 총갯수 , maxLine : 열 갯수
// x좌표 : ( i % maxLine ) * 넓이값
// y좌표 : int( i / maxLine ) * 높이값
5.난수발생 (랜덤)
난수범위 : int( Math.random() * 최대값-최소값+1 ) + 최소값
예) 1 ~ 6 의주사위범위
int(Math.random() * (6-1) ) + 1;
import flash.display.Sprite;
import flash.display.MovieClip;
var box:Sprite = new Sprite();
var total:int = 20;
for( var i:int = 0; i< total; i++ ){
var mc:MovieClip = new Apple() as MovieClip;
mc.width = 30;
mc.height = 30;
mc.rotation = Math.random()*360;
mc.scaleX = mc.scaleY = Math.random()*0.5+0.5;
mc.x = int( Math.random() * (stage.stageWidth - mc.width));
mc.y = int( Math.random() * (stage.stageHeight - mc.height));
addChild(mc);
}
6. 원정렬
distance(p0:Point, p1:Point):Number : 두 포인트이 거리를 반환하는 고정함수
polar(len:Number, angle:Number):Point : 거리와 각도로 좌표를 반환해주는 고정함수
offset(dx:Number, dy:Number):void : 포인트 객채의 x, y 속성을 지정한만큼 더해준다.
※polar 메서드에 전달하는 각도는 Degree 값이 아닌 Radian 값이다.
따라서 90도를 전달하기 위해서는 아래의 수식으로 계산한 값이 필요하다.
반지름 * radian = 부채꼴 호의 길이
var angle:Number = 90;
var radian:Number = angle * Math.PI/180
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.geom.Point;
var total:int = 10;
var len:int = 100;
var angle:Number = 360/total;
for( var i:int = 0; i< total; i++ ){
var mc:MovieClip = new Apple() as MovieClip;
mc.width = 20;
mc.height = 20;
//360도를 total갯수로 나눈 각도 를 radian 값으로 변환시킨다. ( 공식 : angle / 180*Math.PI)
var point:Point = Point.polar(len, i*angle/180*Math.PI);
point.offset(stage.stageWidth/2-10, stage.stageHeight/2-10);
mc.x = point.x;
mc.y = point.y;
//아래 로테이션 값을 주면 중심을 한 모습이 된다.
mc.rotation = angle*i + 90;
addChild(mc);
}
댓글
댓글 쓰기