Iterator Design Pattern

Programming/Design Patterns 2007.02.21 10:54
// Iterator interface //

interface Iterator{
public function hasNext():Boolean;
public function next():Object;
}

// Aggregate interface //

interface Aggregate{
public function iterator():Iterator;
}

// Book class //

class Book{
private var name:String = "";
public function Book(name:String){
this.name = name;
}
public function getName():String{
return name;
}
}


// BookShelfIterator class //

class BookShelfIterator implements Iterator{
private var bookShelf:BookShelf;
private var index:Number;
private var book:Book;
public function BookShelfIterator(bookShelf:BookShelf){
this.bookShelf = bookShelf;
this.index = 0;
}
public function hasNext():Boolean{
if(this.index < bookShelf.getLength()){
return true;
}else{
return false;
}
}
public function next():Object{
this.book = bookShelf.getBookAt(this.index);
this.index++;
return this.book;
}
}



// BookShelf class//



class BookShelf implements Aggregate{
private var books:Array;
private var last:Number = 0;
public function BookShelf(){
this.books = new Array();
}
public function getBookAt(index:Number):Book{
return books[index];
}
public function appendBook(book:Book):Void{
this.books[last] = book;
last++;
}
public function getLength():Number{
return last;
}
public function iterator():Iterator{
return new BookShelfIterator(this);
}
}



// Main class //

class Main{
private var bookShelf:BookShelf;
private var it:Iterator;
private var book:Book;
public function Main(){
init();
}
public function init(){
this.bookShelf = new BookShelf();
this.bookShelf.appendBook(new Book("Around the World in 80 Days"));
this.bookShelf.appendBook(new Book("Bible"));
this.bookShelf.appendBook(new Book("Cinderella"));
this.bookShelf.appendBook(new Book("Daddy-Long-Legs"));
this.it = bookShelf.iterator();
while(it.hasNext()){
this.book = Book(it.next());
trace(""+this.book.getName());
}
}
}
신고
    

설정

트랙백

댓글

동적으로 로드한 이미지 Allow smoothing 컨트롤 하기...

Programming/ActionScript 2.0 2007.02.21 10:54

Dcaland.com을 만들면서 사용한 메소드를 하나 올릴까 합니다. 플래시 8 버전에서는 이미지를 외부로 부터 로드를 할 경우에 default로 Allow smoothing(매끄럽게)이 false 값을 가지게 되는데 Allow smoothing이 false일 경우에는 에니메이션(좌표,로테이션등) 할때 이미지가 지글거리는 문제가 있죠. 라이브러리에 등록된 이미지는 속성에서 수동으로 채킹을 해서 사용하면 된다지만 외부에서 동적으로 불러온 이미지를 움직일 때는 문제가 있죠. 아래 메소드는 그 문제를 해결해 주는 메소드입니다. http://www.kaourantin.net/ 에 기술된 내용을 간단하게 수정해서 사용하고 있습니다.







import flash.display.*;

private function loadImg (target : MovieClip, url : String) : Void
{
        var bmc : MovieClip = target.createEmptyMovieClip ("bmc", target.getNextHighestDepth ());
        var listener : Object = new Object ();
        listener.tmc = target;
        listener.onLoadInit = function (mc : MovieClip)
        {
                mc._visible = false;
                var bitmap : BitmapData = new BitmapData (mc._width, mc._height, true);
                this.tmc.attachBitmap (bitmap, this.tmc.getNextHighestDepth () , "auto", true);
                bitmap.draw (mc);
        };
        var loader : MovieClipLoader = new MovieClipLoader ();
        loader.addListener (listener);
        loader.loadClip (url, bmc);
}


BitmapData 를 사용하기 위해서 import flash.display.*; 임포트 시켜서 사용하세요
입맛에 맞게 수정해서 사용하세요 어떻게 보면 약간의 꼼수가 있는거 같지만 8.5 나오기 전까지는 작지만 유용한 메소드가 될듯 싶습니다.

신고
    

설정

트랙백

댓글

jasu'blog 오픈합니다.

Miscellaneous/Story 2007.02.21 10:53

그동안 사용하던 개인 사이트 및 블로그를 정리하고 이것으로 개인 자료를 정리해 보려고 합니다.
여러가지 블로그를 찾아보다가 용량 및 트래픽 무제한으로 제공하는 티스토리로 오게 되었는데 언제까지 그런 지원이 가능할지는 모르겠네요...

앞으로 개인적인 관심 분야 및 기타 자료들을 모아놓을 예정입니다. 참고로 앞으로는 특별히 대외적인 글이 아닌 이상은 글에서의 존칭은 생략하도록 하겠습니다.

감사합니다.

신고
    

설정

트랙백

댓글