0

基本上,我想要的是一个精灵来填充一个不断更新的区域。我创建了两条始终指向光标相反方向的线,我想要的是在这两条线的起点和终点创建一个带有角的精灵。这是我最初创建精灵所做的:

function addWalls():void {
    var w:Sprite = new Sprite();
    w.graphics.beginFill(0x00FF00);
    //sArray is an array containing the two lines, and the lines' length == 200
    w.graphics.moveTo(sArray[0].x, sArray[0].y);
    w.graphics.lineTo(sArray[1].x, sArray[1].y);
    w.graphics.lineTo(sArray[1].x + Math.cos(sArray[1].rotation / 180 * Math.PI) * 200, sArray[1].y + Math.sin(sArray[1].rotation / 180 * Math.PI) * 200);
    w.graphics.lineTo(sArray[0].x + Math.cos(sArray[0].rotation / 180 * Math.PI) * 200, sArray[0].y + Math.sin(sArray[0].rotation / 180 * Math.PI) * 200);
    w.graphics.lineTo(sArray[0].x, sArray[0].y);
    w.graphics.endFill();
    addChild(w);
    wArray[0] = w;
}

我应该如何在 enter_frame 函数中更新此代码以使其根据行进行更改?

4

1 回答 1

0

一个好的解决方案是将您的绘图逻辑移动到它自己的方法中。graphics.clear()然后只需在 enterFrame 处理程序中调用该方法:

function addWalls():void {
    var w:Sprite = new Sprite();
    drawWalls();
    addChild(w);
    wArray[0] = w;
}

function drawWalls(w:Sprite):void {
    w.graphics.beginFill(0x00FF00);
    //sArray is an array containing the two lines, and the lines' length == 200
    w.graphics.moveTo(sArray[0].x, sArray[0].y);
    w.graphics.lineTo(sArray[1].x, sArray[1].y);
    w.graphics.lineTo(sArray[1].x + Math.cos(sArray[1].rotation / 180 * Math.PI) * 200, sArray[1].y + Math.sin(sArray[1].rotation / 180 * Math.PI) * 200);
    w.graphics.lineTo(sArray[0].x + Math.cos(sArray[0].rotation / 180 * Math.PI) * 200, sArray[0].y + Math.sin(sArray[0].rotation / 180 * Math.PI) * 200);
    w.graphics.lineTo(sArray[0].x, sArray[0].y);
    w.graphics.endFill();
}

function enterFrameHandler(e:Event):void {
    for(var i:int=0;i<wArray.length;i++){
        wArray[i].graphics.clear(); //clear the current graphics;
        drawWalls(wArray[i]);
    }
}

this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
于 2013-05-27T23:57:40.500 回答