2013-04-23 2 views
0

이 for 루프가 왜 내 배열의 마지막 스프라이트 만 표시하는지 알 수 없습니다. 나는 AS3 다소 새로 온 사람과 일을 왜 궁금하면이 :AS3의 배열에서 여러 개의 스폿 렌더링

private function loadComplete(event:Event):void { 

var image:Bitmap = Bitmap(loader.content); 

for (var i:int = 0; i < 4; i++) { 
    var pB:BitmapData = new BitmapData(image.width/2, image.height/2, false, 0x000000FF); 
    pB.copyPixels(image.bitmapData, new Rectangle(i * 20 , i * 20, image.width/2, image.height/2), new Point(0, 0)); 
    pieces.push(new Piece(new Sprite(), 0, 0)); 
    pieces[i].getSprite().graphics.beginBitmapFill(new Bitmap(pB.clone()).bitmapData, null, false); 
    pieces[i].getSprite().graphics.drawRect(0, 0, image.width/2, image.height/2); 
    pieces[i].getSprite().graphics.endFill(); 
    pieces[i].getSprite().addEventListener(MouseEvent.MOUSE_DOWN, downHandler); 
    pieces[i].getSprite().addEventListener(Event.ENTER_FRAME, dragPiece); 

    addChild(pieces[i].getSprite()); 

     } 
    stage.addEventListener(MouseEvent.MOUSE_UP, upHandler); 
    } 

조각 클래스 :

public class Piece 
{ 
    private var pieceX:int; 
    private var pieceY:int; 
    private var sprite:Sprite; 

    public function Piece(sprite:Sprite, pieceX:int, pieceY:int):void 
    { 
     this.sprite = sprite; 
     this.pieceX = pieceX; 
     this.pieceY = pieceY; 
    } 

    public function getSprite():Sprite { 
     return sprite; 
    } 

} 
+2

SO! 귀하의 코드 형식을 수정하고 귀하의 질문을 명확하게하기 위해 귀하의 게시물을 편집했습니다. – Brian

+2

그들은 모두 서로 겹쳐져 있습니까? 나는'Piece' 클래스와 그것이 무엇을 할 수 있는지를 볼 수 없기 때문에 정말로 말할 수 없습니다. – prototypical

+0

Piece 클래스에는 Sprite와 X 및 Y 위치 만 있습니다. – Axfan

답변

0

첫째, 당신은 당신의 Piece 클래스 extends Sprite을하고, 그 추한 getSprite()없이 Sprite의 기능을 사용할 수 있습니다 건설, 그냥 조각.

public class Piece extends Sprite { 
    private var pieceX:int=0; 
    private var pieceY:int=0; 
    public function Piece(pieceX:int=0,pieceY:int=0) { 
     this.pieceX = pieceX; 
     this.pieceY = pieceY; 
    } 
    ... 
} 

그런 다음, 하나의 조각 이상을보기 위해, 당신은 그렇지 않으면 실제로 다른 이상을 적층, 스프라이트의 X 및 Y 속성을 변경해야합니다.

for (var i:int = 0; i < 4; i++) { 
    var pB:BitmapData = new BitmapData(image.width/2, image.height/2, false, 0x000000FF); 
    pB.copyPixels(image.bitmapData, new Rectangle(i * 20 , i * 20, image.width/2, image.height/2), new Point(0, 0)); 
    var piece:Piece=new Piece(0,0); 
    pieces.push(piece); 
    piece.graphics.beginBitmapFill(pB.clone(), null, false); 
    piece.graphics.drawRect(0, 0, image.width/2, image.height/2); 
    piece.graphics.endFill(); 
    piece.addEventListener(MouseEvent.MOUSE_DOWN, downHandler); 
    piece.addEventListener(Event.ENTER_FRAME, dragPiece); 

    addChild(piece); 
    // here, add "piece.x=" and "piece.y=" assignments with correct values. For example 
    piece.x=Math.random()*(stage.stageWidth-piece.width); 
    piece.y=math.random()*(stage.stageHeight-piece.height); 

} 

왜 비트 맵 개체를 만들어 해당 비트 맵을 복제합니까? pB.clone()은 문제없이 작동합니다. (단지 pB을 시도하고 beginBitmapFill()이 비트 맵 링크를 유지한다는 것을 알게되었으므로 기본 비트 맵이 변경되면 이미지가 변경됩니다.)

+0

사실, 어제 대답하지 못하게되었지만 당신이 옳았습니다. x 값을 변경해야했습니다. 고맙습니다! – Axfan