'Action Script'에 해당되는 글 26건

  1. 2011/01/14 Moving Ball_ver1
  2. 2011/01/14 객체 마우스 포인트 따라다니는 방법.
  3. 2011/01/11 MouseEvent.MOUSE_WHEEL Event
  4. 2011/01/11 Scroll Event
  5. 2010/12/17 가비지 컬렉션
  6. 2010/12/16 SWC_ Embed Font 만들기.
  7. 2010/10/07 AS 2.0 - Key Class
  8. 2010/10/07 for each문
  9. 2010/05/31 StopWatch : Date Type
  10. 2010/05/28 Rectangle, 위치 지정값의 정의
2011/01/14 02:24

 

import flash.events.MouseEvent;

import flash.events.Event;

 

var xPos:Number = 10;

var yPos:Number = -10;

 

function init(e:MouseEvent):void

{

     mcBall.addEventListener(MouseEvent.MOUSE_DOWN, moveBallHandler);

     stage.removeEventListner(MouseEvent.MOUSE_DOWN, init);

}

 

function moveBallHandler(e:Event):void

{

     if(mcBall.x <= 0) {

          xPos *= -1;

     } else if(mcBall.x >= stage.stageWidth - mcBall.width) {

          xPos *= -1;

     } else if(mcBall.y <= 0) {

          yPos *= -1;

     } else if(mcBall.y >= stage.stageHeight - mcBall.height) {

          yPos *= -1;

     }

 

     mcBall.x += xPos;

     mcBall.y = yPos;

}

 

stage.addEventListener(MouseEvent.MOUSE_DOWN, init);

저작자 표시
Posted by gaziman_『Growth』
2011/01/14 01:08

 

 

객체를 마우스 포인트에 따라다니게 하는 기본적인 코드로는

 

import fl.events.MouseEvent;

 

init();

function init():void

{

     mcBar.addEventListner(Event.ENTER_FRAME, mouseDownHandler);

}

 

function mouseDownHandler(e:Event):void

{

     e.target.x = this.mouseX;

     e.target.y = this.mouseY;

}

 

ENTER_FRAME을 이용한 객체 이동의 위치를 매 프레임마다 체크해 움직이게 하는 방법이다.

 

또 다른 방법의 코드로는,

 

function init():void

{

     stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);

}

 

 

function mouseMoveHandler(e:MouseEvent):void

{

     mcBar.x = this.mouseX;

     mcBar.y = this.mouseY;

}

init();

저작자 표시
Posted by gaziman_『Growth』
2011/01/11 19:00

 

import flash.events.MouseEvent;

 

stage.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);

 

function mouseWheelHandler(e:MouseEvent):void

{

     if(e.delta > 0 && mcBar.y > mcSlideBar.y) || (e.delta < 0 && mcBar.y < (mcSlideBar.height) - mcBar.height)){

          mcBar.y = mcBar.y - (e.delta * 5);

     }

}

    

저작자 표시
Posted by gaziman_『Growth』
2011/01/11 14:29

 

Mask Area에 지정된 Image Contents와 Mask.height의 길이를 맞춰준다.

 

 

Script Code :

 

..MouseEvent Scroll관련 기본 코드 생략.

 

 * Drag 이벤트 생성시.

 var rect:Rectangle = new Retangle(bar.x, bar.y, 0, scrollBar.height - bar.height);

 

function loop(e:Event):void

{

     //이벤트 실행시 지정된 Area에 distroy MouseEvent 생성.

     var checkBarPos:Number = ((bar.y - 0) / (scrollBar.height - bar.height) * 100);

     var contentsPos:Number = (((slideContents.height - scrollBar.height) * checkBarPos) / 100 * (-1)) + 0;

 

     slideContents.y += (0.2 * (contentsPos - (slideContents.y)));

}

 

 

 

stage.addEventListener(MouseEvent.MOUSE_WHEEL, wheelHandler);

 

function wheelHandler(e:MouseEvent):void

{

     if(e.delta > 0){

          //스크롤 기능 코드 추가 연동

     } else {

          //스크롤 기능 코드 추가 연동

     }

}

    

 

저작자 표시
Posted by gaziman_『Growth』
2010/12/17 01:05

프로그램에서 객체를 생성할 때 마다, 액션스크립트는 이를 시스템 메모리(RAM과 같은)에 저장하게 된다. 프로그램에서 각각의 객체를 생성할 때마다 프로그램은 점점 더 많은 메모리를 차지하게 된다. 바닥난 시스템 메모리를 보지 않기 위해 액션스크립트는 프로그램에서 객체를 더 이상 필요로 하지 않는 경우, 해당 객체를 메모리에서 자동으로 제거해 준다. 이와 같은 것을 가비지 컬렉션이라고 부른다.

 

1. 가비지 컬렉션의 대상

더 이상 접근이 불가능하게 된 순간부터 객체는 가비지 컬렉션의 대상이 된다. 객체는 하나의 가비지 컬렉션 루트를 통해 직접 또는 간접적으로 접근할 수 없을 때, 접근 불가능 상태가 된다.

 

(1). 가비지 컬렉션 루트

▷. 패키지 레벨 변수

▷. 현재 실행 중인 메서드 또는 함수 내의 지역 변수

▷. static 변수

▷. 프로그램 메인 클래스 인스턴스의 인스턴스 변수

▷. 플래시 런타임 디스플레이 리스트 상에 있는 객체의 인스턴스 변수

▷. 현재 실행 중인 함수나 메서드의 스코프 체인 내의 변수

 

 

※ 가비지 컬렉션의 대상이 되지 않는 상태.

package{

     import flash.display.Sprite;

     import gaziman.*;

 

     public class Gaziman extends Sprite {

          private var gazi:Gaziman;

          public function Gaziman() {

               gazi = new Gaziman("ChkNum");

          }

     }

}

 

위의 코드로 실행시 생성자가 실행되면서 새로운 객체를 생성한다. 하지만 객체는 프로그램의 메인 클래스의 인스턴스 변수에 저장되었다. 따라서 이러한 객체는 도달 가능한 상태가 되어 버리고, 가비지 컬렉션의 대상이 되지 않는다.

 

 

 2. 가비지 컬렉션 주기

 

객체가 접근 불가능한 상태가 되면, 해당 객체가 가비지 컬렉션의 대상이 된다는 사실을 알았다. 하지만 정확히 언제, 접근 불가능한 객체들이 메모리에서 제거되는지는 모른다. 실제로 접근 불가능한 객체들을 메모리에서 바로 제거하는 일에는 많은 시간이 소요되고, 이럴 경우 정말 단순한 프로그램조차도 실행 속도가 늦어지거나 응답하지 않는 상태를 보일 수 있다.

그래서 주기적으로 접근 불가능한 객체들을 확인하고 이를 제거하는데, 이를 가비지 컬렉션 주기라고 부른다.

 

(1). 점진적인 마크앤 스윕(mark and sweep) 가비지 컬렉션 방식.

 

- 작동원리 : 플래시 런타임이 실행되면, 먼저 운영 체제에 현재 구동 중인 프로그램의 객체들을 저장하기 위한 일정량의 메모리를 할당해 달라고 요청하고, 프로그램이 실행되면, 메모리에 객체들이 쌓인다. 이때 특정 시점에서, 프로그램의 객체 중 일부는 접근이 가능한 상태가 되고, 일부는 접근 불가능한 상태가 된다. 많은 객체들이 생성된 후에는, 액션스크립트가 가비지 컬렉션 주기를 한 번 돌기로 결정한다. 이 주기 동안, 메모리상의 모든 객체들은 '접근성'을 조사받는다. 접근 가능한 모든 객체들은 그대로 보존되도록 마크되고, 접근이 불가능한 모든 객체들은 메모리에서 스위핑(제거) 된다.

 

※ 가비지 컬렉션 주기는 일반적으로 프로그램의 객체들을 저장하는 데 필요한 메모리의 양이, 현재 플래시 런타임에 할당된 메모리의 양에 근접했을 때 트리거된다. 하지만 액션스크립트에서는 언제 가비지 컬렉션의 주기가 수행되는지에 대해서 명확한 보증을 하지 않고 있다. 아울러 프로그래들이 강제적으로 가비지 컬렉션을 수행하는 방법도 없다.

 

 

 (2). 내부적으로 객체 처리하기

 

시스템 메모리부터 직접 객체를 제거할 수 있는 방법이 제공되지 않는 액션스크립트는 자동으로 진행되는 가비지 컬렉션 시스템을 통해 간접적으로 이루어진다. 하지만 메모리로부터 객체를 제거할 수는 없어도, 객체에 대한 프로그램 내의 참조를 모두 제거해 객체를 제거 대상으로 만들 수는 있다.

객체에 대한 모든 참조를 제거하려면, 배열에서 이를 제거해야 하고 이를 참조하는 모든 변수들을 null로(또는 기타 값) 설정해야 한다. 하지만 객체를 가비지 컬렉션의 대상으로 만든다고 해서 이 객체가 바로 제거되지는 않는다. 단지 주기가 실행될 때 액션스크립트가 해당 객체를 제거할 수 있도록 권한을 부여하는 것에 불과하다.

 

※ 가능하면 객체를 제거하기보다 재사용하는 방식을 택하도록 노력하는 것이 좋다.

 

 

 (3). 객체 비활성화하기

 

 객체 내의 불필요한 코드가 실행되는 것을 막으려면, 프로그램에서는 객체를 버리기 전에 객체를 비활성화시켜야 한다. 이 말인 즉슨, 프로그램의 어떤 부분에서도 해당 객체와 관련된 코드가 실행되지 않도록 객체를 유휴(idle) 상태에 놓는다는 의미다.

 

▷ 이벤트와 관련된 객체의 메서드를 등록 해지한다.

▷ 모든 타이머와 인터벌을 중단한다.

▷ 타임라인의 플레이헤드(PlayHead)를 중단한다(플래시 저작 도구에서 생성한 무비클립 인스턴스의 경우).

▷ 이 객체가 접근 불가능한 상태가 될 때 아울러 접근이 불가능해지는 모든 객체를 비활성화시킨다.

 

※ 시스템 메모리 : System.totalMemory

 

 

저작자 표시
Posted by gaziman_『Growth』
2010/12/16 20:01

 

텍스트 API 개요.

 

1. 화면 텍스트 제어 - TextField : 액션스크립트 코드로 만든 텍스트 필드,

                                              플래시 저작 도구에서 만든 dynamic, input 형식의 텍스트 필드.

2. 텍스트 형태 - TextFormat : 문자 형태 정보를 담고 있는 간단한 데이터 클래스.

 

 

기본적으로, 플래시 플레이어는 디바이스 폰트를 이용해 텍스트를 표시한다. 디바이스 폰트는 사용자의 시스템에 설치되어 있는 폰트다. 플래시 플레이어가 디바이스 폰트를 이용해 텍스트를 표시하는 경우, 텍스트 렌더링 과정은 사용자 환경에 따라 달라진다.(운영체체 등).

 

(1). 디바이스 폰트 : 보이는것보다 파일 크기가 중요할 경우.

(2). 임베드 폰트 : 파일크기보다 보여지는게 중요할 경우.

 

 

 

1. SWC를 통한 폰트 가볍게 Embed 하기.

폰트를 만들 새로운 FLA 를 생성하고, 텍스트필드를 바탕에 만들어 준다.

 

 

텍스트 필드를 Property 패널에 Embed 버튼을 선택하여 임베드할 Character-set 을 설정한다.

 

 

전체 ALL을 하면 용량을 너무 많이 차지하게 되니 꼭 필요한 부분만 선택하여 체크 한다. 이후 텍스트 필드를 선택한 후 F8을 눌러

MovieClip으로 생성해준다.

그후, Library 패널에서 무비클립을 우클릭하여 나오는 메뉴중에서 Export SWC File을 선택해서 Swc 파일로 Export한다.

 

 

Export 할 위치는 플래시의 컴퍼넌트 폴더여야 하며, 사용자 마다 다른 위치이지만 일반적인 위치는

사용자폴더\AppData\Local\Adobe\Flash CS5\en\Configuration\Components\

위치로 설정하게 되어있다.

Export할 파일명은 한글로 해도 상관없다. 보통 폰트만 따로 모아둘 요량으로 Fonts라는 폴더를 따로 만들어 관리한다.

 

 

그런 다음 컴퍼넌트(Ctrl + 7)패널에서 우측의 메뉴를 눌러 Reload Components 메뉴를 선택하자.

 

 

그러면, 그림과 같이 컴퍼넌트 패널이 업데이트 되면서 방금 Export 한 폰트가 생성되었다.

사용할 폰트 별로 볼드나 이태릭, 볼드 이태릭, 등의 속성을 사용하시려면, 각각의 Swc를 모두 제작 등록하여야 한다.

 

이제 새로운 Fla를 생성해서 컴퍼넌트에서 생성된 폰트를 Library 창에 추가한다.

이제 Embed가 된 폰트를 확인한다.

 

 

var fonts:Array = Font.enumerateFonts();

var font:Font;

 

for each(font in fonts) trace(font.fontName);

 

 

임베드된 폰트들의 이름을 확인 할 수 있을것이다. 확인한 이름을 통해 코드를 넣는다.

 

 

var txtTest:TextField = new TextField();

txtTest.defaultTextFormat = new TextFormat("Malgun Gothic", 12);

txtTest.embedFonts = true;

txtTest.text = "맑은 고딕 테스트";

 

addChild(txtTest);

 

Library에 추가된 폰트를 통해 Embed되어 있는 폰트를 볼 수 있다.

저작자 표시
Posted by gaziman_『Growth』
2010/10/07 22:52

var keyListener:Object = new Object();

keyListener.onKeyDown = function(){
     switch(key.getCode()){
          case 13 :  enterHandler(); break;
          case 32 : spaceHandler(); break;
      }
}

Key.addListener(keyListener);

※ To disable that, use :

     Key.removeListener(keyListener);


==========================================================================================================



Ascil = Key.getAscii();

String = String.fromCharCode(Key.getAscii());

Code = Key.getCode();



<URL : http://flash-creations.com/notes/asclass_key.php>
저작자 표시
Posted by gaziman_『Growth』
2010/10/07 22:44


function gaziman(type:String, ...args):void
{
     for each(var subType:String in args){
          trace(type + " : " +  subType);
     }
}

gaziman("gaziman1", "gaziman2", "gaziman3");

저작자 표시
Posted by gaziman_『Growth』
2010/05/31 18:18

 - Date 클래스 생성 후 (minutes, seconds, milliseconds)를 이용 스톱와치를 제작한다.

     : set, get 메소드를 이용하여 현재 데이터와 시간 데이터 값을 " - " 하여 최초 값 "0"을 지정한다.




//-- 이하 생략

private function init() : void
{
     _currentDate = new Date();
     _currentMin = _currentDate.getMinutes();
     _currentSec = _currentDate.getSeconds();
     _currentMiliSec = _currentDate.getMilliseconds();

     addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}

private function enterFrameHandler(e:Event):void
{
     var date:Date = new Date();
     date.setMinutes(date.getMinutes() - _currentMin);
     date.setSeconds(date.getSeconds() - _currentSec);
     date.setMilliseconds(date.getMilliseconds() - _currentMiliSec);

     trace(chkText(date.getMinutes().toString()) + " : " + chkText(date.getSeconds().toString()) + " : " + chkText   
                                                                                                                                    (date.getMilliseconds().toString()));
}

private function chkText(value:String):String
{
     var chkLength:Number = value.length;

     if(chkLength <= 1){
          return "0" + value;
     } else if(chkLength == 3) {
          return value.substr(0, 2);
     } else {
          return value;
     }

}









저작자 표시
Posted by gaziman_『Growth』
2010/05/28 21:04





















한계점의 좌표

    : container.width - image.width.


* 보여지는 mask 범위에서 보여줄 이미지의 넓이를 뺀 값, 이 값이 이미지가 움직여질 좌표값을 나타낸다.



//-- 이하 생략

public class imageDrag extends Sprite
{
     private var _image:Bitmap; 
     private var _stageW:int;
     private var _stageH:int;
     private var imageSize:Rectangle;
     private var imageContainer:Sprite;
     private var _chkScale:Number;
  
     private var _defaultWidth:int;
     private var _defaultHeight:int;
     
     private function imageDrag(image:Bitmap, stageW:int, stageH:int)
     {
          _image = image;
          _stageW = stageW;
          _stageH = stageH;

          _image.smoothing = true;

          _defaultWidth = image.width;
          _defaultHeight = image.height;

          _chkScale = .8;

          imageContainer = new Sprite();
          addChild(imageContainer);

          imageContainer.scaleX = .8;
          imageContainer.scaleY = .8;

          initImageDrag();
     }

     private function initImageDrag():void
     {
          imageContainer.addChild(_image);
          imageSize = new Rectangle(0, 0, _stageW - imageContainer.width, _stageH - imageContainer.height);

          imageContainer.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
          imageContainer.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
     }

     private function mouseDownHandler(e:MouseEvent):void
     {
          imageContainer.startDrag(false, imageSize);
     }

     private function mouseUpHandler(e:MouseEvent):void
     {
          imageContainer.stopDrag();
     }
}
저작자 표시
Posted by gaziman_『Growth』