made by C.L


AS3 tilelist component 삽질기

Computing/General : 2008/06/18 05:45


.... 불현듯 -_- basescrollpane 클래스를 삽질하던차.. -_-
몬가 복잡한 문제를 만나 다른삽질을 하다보니 발견한 컴포넌트다...

이글 보고 어 이런거네.. 하고 써볼생각한다면 글 끝까지 잘보길 바란다 -_-



위는 샘플파일에 들어있는 예제다..
보는것처럼 리스트컨트롤, dataprovider에 외부 이미지를 loader를 통해 가져오며, icon을 삽입할수도 있다.
레이블링도 되며
xml을 통해 간편하게도 구현이 가능하다.


var imagesXML:XML = <images> <img src="http://www.helpexamples.com/flash/images/image1.jpg" /> <img src="http://www.helpexamples.com/flash/images/image2.jpg" /> <img src="http://www.helpexamples.com/flash/images/image3.jpg" /> </images>;
var dp:DataProvider = new DataProvider(imagesXML);
var myTileList:TileList = new TileList();
myTileList.dataProvider = dp;
myTileList.labelFunction = myLabelFunction;
myTileList.sourceField = "src";
myTileList.columnWidth = 100;
myTileList.rowHeight = 67;
myTileList.columnCount = 3;
myTileList.rowCount = 1;
myTileList.move(10, 10);
addChild(myTileList);
function myLabelFunction(item:Object):String {
    var fileName:String = item.src;
    var filePath:Array = fileName.split("/");
    return filePath.pop();
}


대략 간만보면 이런식이다...

그러나 -_- 이녀석은 말그대로 예제용 -_- 컴포넌트였다.

이늠이 상속하는 개체는

Tilelist Inherit classes
TileList  SelectableList  BaseScrollPane  UIComponent  Sprite  DisplayObjectContainer  InteractiveObject  DisplayObject  EventDispatcher  Object

순서다.

그리고 interface는 ifocusmanagercomponent 를 사용한다

그렇다 -_- 어딜봐도 loader 관련 클래스가 없다 -_-

그래서 클래스 원형을 찾아 삽질을 하다보니 -_-

TileList 의 style -_- 로써 imagecell 과 cellrenderer 가 호출되고 있다.
cellrender 에 uiLoader 가 함수내 var로 임시 호출되고 있다
따라서 dispatch 되는 이벤트는 개체상속을 받지 못한다.

그렇다 -_- 만약, load 하는 url 에 이미지가 없을 경우, dispatch event 를 통해 error 가 넘어오지 않는다.
이것이 첫번째 문제고,
(ioErrorEvent를 설정하면 error suppression 만 가능하지 실제 이벤트가 타고오진 않는다)


두번째 문제는 실질적인 loader에서 뿌리는 error url opening 메시지는 suppression 을 할수없다.
그말은 플래시등의 remote debug 가 활성화된 브라우저에서는 로드를 실패했다는 워닝창이 미친듯이 뜬다는소리다.

그래서 icellrenderer 를 인터페이스 매개체로 cellrenderer 클래스를 상속받은 새로운 imagecell class를 작성하고
내장에 event dispatcher 를 새로작성해주었지만 uiloader 단까지 이벤트핸들링이 안된다.
이말은 클래스 소스를 가져와서 같은형식으로 정의하고 try & catch 로 잡아다 묶어야 한다는소리다.
역시했다 -_-;;

결정적으로 cellrenderer 는 어느파일이 어떻게 안되었는가를 알지못한다.
현재 랜더링하고 있는 파일에 대해 파일명정도밖에는 failed 되었을때 알아오지 못한다.
다른말로는 dataprovider 에 정의된 추가적인 object를 가져와야 하는부분이 있는데,
여기서 dataprovider 랑 renderer가 별도로 노는 사건이 발생하게 되는것이다.

이를 묶어주기 위해서는 콜러보다 더 상위개층 (stage level) 을 통해서 무비클립을 서로 연결해주어야 하는데,
이경우 전체적인 방대한 데이터가 아규먼트로 돌아다니는 문제가 있었다.

그리고 결정타가 있었다. -_-
클릭을 한번하는순간.. 모든 listdata 이미지를 새로 로드한다...
이것도 원형을 가져다 수정할수는 있지만 -_- 갑자기 급 짜증이 나서 때려쳤다..
한 5시간 낚인기분이 든다 -_-

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/06/18 05:45 2008/06/18 05:45
top

  1. tjdusdl18 2008/06/18 18:19 PERM. MOD/DEL REPLY

    짝짝짝

Write a comment.

[로그인][오픈아이디란?]


Flash Action Script QR 02

Application : 2007/08/26 21:19


앞선 강의는 클래스부분까지 정상적으로 진행되었다.

그러나 잊지 말아야할 부분을 몇가지 포인트로 다시 잡는다.

as3에 대한 모든 클래스들은 플래시 자체 도움말에 존재한다.

책따윈 필요없다는거다. 책의 저자나, 번역가의 엉성한 번역이 지식을 망가트린다.

개발사의 매뉴얼이 언제나 정확하다.

메쏘드 이용법에 대한 설명

(private/public) function (펑션명) (데이터 입력부):데이터 반환형식 { 실행문 }
으로 펑션의 구조는 되어있다는것

예제
public function abc (A:String):String 은 A라는 내부변수로 String을 입력받고 String 으로 반환한다는 뜻이다.


QR01 을 마치면 이제 액션스크립트의 모든것을 핸들링할 수 있게 된다.

그러나 플래시 개발자들의 클래스는 언제나 모두 완벽하지 않다. 그렇기 때문에 새로 짜야하는 클래스나, 구조들이 매우 많다.


1. 무비클립도 Class 다.. 뭐 변수타입에 있다면 말다했듯이 마찬가지 이야기다.
그러나 MovieClip 또한 엄격히는 Class 이며, 별도로 이용시 해당 무비클립의 linkage가 활성화되는 순간 as 파일이 생성되도록 되어있다. (그러나 브릿지등에서는 이 기능이 동작하지 않아 잘 모르겠다 실제로 생기는지 어쩐지)
해당 무비클립의 AS 는 별도로 생성된 파일등에서 이용하는것이 올바르다.

이를 위해서는 flash 및 모든 프로그래밍에 호환되는 표준 펑션들을 미리 익힐 필요가 있다.

이러한 펑션들은 ActionScript 3.0 Language / Language Elements / Global Functions, Operators, Statements 등을 참조하라.

기본적인 함수와 변수를 핸들링 하는 함수들이 씌여있다.

2. Sprite 클래스에 대해 알아야 한다.
이녀석은 무비클립이나 기본적인 디스플레이를 핸들링 하기 위해 필요한 기초클래스가 되어있다.
이녀석을 통해 무비클립의 인스턴스들은 객체화하여 배열하거나, 배치순을 조정하거나, 인스턴스간의 상호연동을 꽤할수 있게 되는 부분이다. 따라서 클래스형식의 코딩에 있어 중요한 부분을 차지한다.

이 클래스는 Extends 를 선헌해 사용하면된다.

이 부분의 강의가 끝날 경우 이제 액션스크립트의 이해도는 중반부를 달리게 된다.
나머지는 도움말을 얼마나 많이 보고 익히는가가 전부다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
2007/08/26 21:19 2007/08/26 21:19
top

  1. tjdusdl18 2007/08/27 18:57 PERM. MOD/DEL REPLY

    어째서.. 중급인거지....

  2. 밤꼬양이 2007/08/28 11:28 PERM. MOD/DEL REPLY

    어떤 기준이냐에 따라 다르겠죠. 저한테는 고급인데요 -_-

Write a comment.

[로그인][오픈아이디란?]


Flash Action Script QR 01

Application : 2007/08/23 00:07


이 자료는 간단히 플래시 액션스크립트 3.0 에 적응하기 위해 만들어진 Quick Reference로써
이 자료를 이용한 간략한 강의를 목적으로 제작되었으며, 이 자료만으로는 이해가 잘 되지 않을 수 있다.

1. 변수 핸들링

변수 = Variable = 변동하는 수치 (정적이지 않고 변하는 수치)

변수명의 정의(선언)는 var 로 시작한다.
예제코드)
    var i=10;

i라는 명칭의 변수에 10이라는 정수를 담는다

흔히 이렇게들 var i=10 이라고 as 2.0 때부터들 많이들 써왔다.

그러나 as 3.0 에서부터 혼동이 오기 시작하고 적응이 잘 안되는게 바로 이 변수선언이나 변수 및 펑션들에 대한 기초가 잡혀있지 않기 때문이다.

변수에는 여러가지 종류가 있다. 이 종류를 컨테이너 내지는 데이터타입, 자료형이라고 한다. 언어마다 조금씩 틀리게 부른다.

var i=10 이렇게 자료형이 없이 선언되는것을 mixed variable 이라고 표현한다. 자동감지식으로써 정수인가 문자열인가 데이터형인가, 어레이인가를 자동감지하여 선언시키는 시스템이다.
PHP등지에서 쓰이며 이러한 자동감지식 변수는 감지처리 및 오버라이딩 (재설정행위)로 인한 연산부하가 따라서 걸리게 된다.

이제 어떠한 자료형이 존재하는지 간단히 본다.
아래의 자료형은 대부분의 언어 (php, c, vb, python) 등에서 공용적으로 쓰인다.

정수형 (int) = 숫자만 담는다. 32비트제로 -20억정도부터 20억정도의 수치를 담을 수 있다.

정수형 (Number) - int 와 같다. 그러나 64비트 연산을 제공한다 소수선언은 52비트까지만 연산이 가능한것으로 알고있다. 이녀석을 흔히들 쓰는데 정수형은 c로 치자면 double float이다. 따라서 더 많은 메모리를 사용한다.
흔히 웹디들이 작은 숫자단위에 Number형을 자주 쓰는데 이것은 매우 잘못된 경우다. int 를 써야한다.

정수형 (uint) - unsigned int 를 의미한다. -20억~20억까지의 수치가 아니라, 0부터 40억까지 표현하게 된다.
따라서 20억이상의 수치를 표현하기 위해서는 uint 를 쓰는것이 좋다.

불린형 (Boolean) - True ? False 혹은 1 ? 0 을 의미한다.  스위칭등의 변수로 사용할때 많이 쓴다.

문자형 (String) - UTF-16 캐릭터셋을 기본으로 하는 문자열이 저장된다. 문자형을 삽입할때는 "" 등의 쿼테이션이 필수다.
기본은 Null 이며, UTF-8 이나 euckr 등으로 캐릭터셋을 변경시킬수 있다. (시스템 함수를 통해)

void형 (void) - c에서와 유사한 형식으로 돌고있는데, void 는 특정한 값을 담고있지 않는다. 엄밀히는 펑션의 결과를 반환하거나, 펑션을 포인팅하는데 사용된다. 클래스 등지에서 이용되며, 이때 return 문이 삽입되어야 한다.

배열형 (Array) - 간단한 자료구조를 포함하는 형식이다.
이를 배열이라고 하며, 배열에 대해서는 별도의 강의가 필요하다.
기초적인것은 10명의 이름을 하나의 변수에 서로 구분되게 넣는 경우로 보자
var test:Array = new Array('홍길동','동길홍','가나다','마바사');
이러한 형식으로 저장하고 호출할때는 test[0] 이나 test[숫자] 로 호출이 가능하다.
물론 숫자는 해당 레코드를 정확히 지칭하여야 한다.

또 간단히 설명하자면 액셀의 한 행과 같다.
액셀에서 1행의 A열, B열, C열을   이름, 전화번호, 주소 라고 설정했다치다.
그렇다면 이것은 어레이로
var test:Array = new Array();
test[0]['이름']='홍길동';
test[0]['주소']='뭐뭐뭐';
test[0]['전번']='뭐뭐뭐';
test[1]['이름']='음음음';

 의 형식으로 표현이 가능하다.  test[0]['이름'] 에서 앞의 0은 행번호다. 뒤에 이름은 열이름이라고 보면된다.
이를 적절히 매핑하는것을 더블포인팅 어레이 또는 어소시에이티브 어레이라고한다.

함수형 (Function) - 펑션타입의 변수다.
즉, 변하는 수가 아니라 실행되는 구문이 삽입되는것이다. {}로 실행구문을 인덴트하여야 한다.
흔히 말하는 프로그램이 이 펑션에 속한다.

오브젝트형 (Object) - 글로 설명하기가 복잡하지는 시점이다
오브젝트는 말그대로 위에 해당하는 모든것을 담게된다.
Mixed var 형식인데, 흔히들 클래스를 오브젝트라고 표현한다.
이 변수는 하나의 명칭으로 다양한 기능을 포괄시킬수있다.

var A:Object = new Object();
A.i = 10;
A.b = "스트링";

등으로 정의할수가 있을지는 모르겠다 --;; 이런식으론 사실 안해봤다.

그러나 위처럼 A라는 변수안에 i라는 추가 정수형 변수와 b 라는 문자형 변수가 혼재된다.
즉 말그대로 오브젝트를 포괄하는 형식이다.
이 형식을 대표적으로 이용하는것이 클래스라고 부른다.

클래스형 (Class) -
클래스는 기선언된 하나의 오브젝트 집합체다.
그 안에 다양한 변수와 다양한 함수를 프로그래밍하여 이를 이용할수가 있다.
위에 오브젝트에 대한 설명과 동일하다.

간단한 클래스를 예로든다.

class test {
   public var a:string = "문자열 테스팅 성공입니다";
   function test() {
       trace("클래스가 시작되었습니다");
   }
   function test_start() {
       trace(this.a);
   }
}


이렇게 클래스를 선언한다.

클래스를 호출하는것은 간단하다. 향후 메모리관리자 쉬운 액세스를 위해 클래스는 변수형으로 주로 요청한다.

    var gogogo:test = new test();  


여기서 첫 :test 는 클래스명을 지칭한다.  그러나 복잡하게 갈수록.. 굳이 클래스명이 아니기도 한다는 사실;;
그 다음에 new test() 는 test 라는 클래스의 새로운 선언과 함수의 실행을 의미한다.

그렇다면 저렇게 선언을 하기만 하여도 test() 펑션이 구동한다. 따라서 바로 화면에 클래스가 시작되었습니다.
라는 문구가 표기된다.

그 다음 test_start 라는 펑션을 구동시켜보자
           gogogo.test_start();

라고 실행을 하면 문자열 테스트 성공입니다 라고 출력된다.

즉 gogogo 라고 선언된 variable 이 object 타입으로써 하단부에 클래스가 돌고있는것이다.
변수가 꼭 변하는 수만이 아니라 이런형식으로 프로그래밍도 가능하다는 사실을 잊어서는 안된다 ;;

예를들어 a 라는 변수가 function 으로 +10 씩 가중시킨다고 할 경우
var a:Function = function(p:uint) {
    return p+10;
};

trace ( a(10) );

이렇게 하면 a에 10을 입력하면 20이 되어 나온다

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
2007/08/23 00:07 2007/08/23 00:07
top

Write a comment.

[로그인][오픈아이디란?]