[Flash/ActionScript] 4일차 - 디스플레이리스트(난수, 배치)

[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);
}

댓글

이 블로그의 인기 게시물

[파이썬] #2-모듈설치 및 스파이더(spyder)사용

[Tool-Tip] 에디트플러스에서 자동정렬기능 추가하기

[파이썬] #1- 아나콘다 설치, 아나콘다 파이썬 환경 만들기