我的問題是:如何僅使用代碼重繪形狀?如何在ActionScript 3.0中重繪形狀?
對任務本身的簡短評論。我有一個eventListener,它可以捕捉舞臺和舞臺大小的點擊。兩者都執行相同的功能 - redrawEvents(evt:Event)
。舞臺包含一些代表某些事件的區塊。在每次重繪時,都會重新定位這些塊,並繪製線條(表示事件之間的連接)。
我已經想出了一種重新定位所有塊的方法,但是我被卡在重繪線上。
我使用單個形狀來保存所有行,因爲與塊不同,行不是交互式的。由於應用程序的全部內容都是創建一系列互連事件,所以每次創建新塊時都必須修改此形狀,這也會調用重繪功能。
下面是我用它來修改形狀
stage.addEventListener(MouseEvent.CLICK,redrawEvents);
function redrawEvents (evt:Event) {
var lines:Shape = new Shape();
lines.graphics.lineStyle(2, 0xFFFFFF, .75);
lines.graphics.clear();
for (var k:int = 0; k < connections.length; k++){
lines.graphics.moveTo(eventList[connections[k][0]].x + 50, eventList[connections[k][0]].y + 50);
lines.graphics.lineTo(eventList[connections[k][1]].x + 50, eventList[connections[k][1]].y + 50);
}
addChild(lines);
}
但是,每當形狀被修改了代碼,但它仍然會使屏幕上的自己的「舊版本」,而我不希望出現這種情況。我試圖創建和刪除實例,變量類型轉換,但仍然沒有解決問題。
在此先感謝
我已經更新了代碼^並回復了evilguy。 不過,這要麼是我做錯了什麼,要麼這些建議不能解決我的問題。現在我的舞臺上沒有任何線條:) – 2012-01-08 20:25:31
@Loki'lines'是你的事件處理程序的一個局部變量 - 你在'Shape'的新實例上調用'clear()',所以你唯一重新清除是線條樣式。你需要將'lines'作爲一個類字段(或者保存在某個地方),只將其初始化一次(不是每次事件觸發)並在任何其他繪圖命令之前調用clear()。 – Staven 2012-01-08 20:30:30
好吧,我們假設我會在'redrawEvents'之外放置'lines'和'lineStyle'以及全局變量。那我該如何訪問這個函數中的'lines'? – 2012-01-08 20:33:53