所有的段都添加好了之后,調(diào)用positionSegments()方法來(lái)圍繞_shapesHolder容器的注冊(cè)點(diǎn)也就是舞臺(tái)的中心點(diǎn)旋轉(zhuǎn)他們,用360除以段的數(shù)量就可以很容易的算出每個(gè)段之間相距的角度。
代碼:
var segments:int = _shapeHolder.numChildren; var angle:Number = 360 / segments; for (var i:int = 1; i < segments; i++ ) { _shapes[i].rotation = angle * i; }
init方法最后的幾行為舞臺(tái)添加3個(gè)事件偵聽(tīng)器,然后給舞臺(tái)應(yīng)用發(fā)光濾鏡用來(lái)添加一些視覺(jué)效果。(有關(guān)濾鏡的更多內(nèi)容在下一章)。
在onStageMouseDown()函數(shù)中,我在第一個(gè)shape中調(diào)用moveTo()方法,這樣虛擬畫(huà)筆會(huì)移動(dòng)到鼠標(biāo)當(dāng)前的位置,然后我創(chuàng)建一個(gè)偵聽(tīng)器用來(lái)偵聽(tīng)EVENT_FRAME事件。
代碼:
var shape:Shape = _shapes[0]; shape.graphics.moveTo(shape.mouseX, shape.mouseY); addEventListener(Event.ENTER_FRAME, onEnterFrame);
onStageMouseUp()函數(shù)中我只是簡(jiǎn)單的移除對(duì)ENTER_FRAME事件的偵聽(tīng),onEnterFrame函數(shù)會(huì)在ENTER_FRAME 發(fā)生時(shí)調(diào)用。在onEnterFrame里面,我旋轉(zhuǎn)_shapeHolder容器并調(diào)用draw()方法。
代碼:
_shapeHolder.rotation += ROTATION_RATE; draw();
draw()方法,我在第一個(gè)shape中調(diào)用lineTo方法,這樣會(huì)繪制一條到鼠標(biāo)當(dāng)前位置的直線(xiàn)。
代碼:
var shape:Shape = _shapes[0]; shape.graphics.lineTo(shape.mouseX, shape.mouseY);
記住當(dāng)鼠標(biāo)按下之后這會(huì)發(fā)生在每一幀上,即便鼠標(biāo)不移動(dòng),但是因?yàn)開(kāi)shapeHolder容器自身的旋轉(zhuǎn),所以當(dāng)前鼠標(biāo)坐在的位置跟之前 shape.moveTo定義的位置還是不一樣。接下來(lái),我遍歷所有的段,調(diào)用copyFrom方法把第一個(gè)shape中的內(nèi)容復(fù)制到他們每一個(gè)里面,就這么簡(jiǎn)單!
代碼:
var segments:int = _shapeHolder.numChildren; for (var i:int = 1; i < segments; i++ ) { _shapes[i].graphics.copyFrom(shape.graphics); }
init方法里面最后一個(gè)偵聽(tīng)器用來(lái)偵聽(tīng)鍵盤(pán)按下事件。當(dāng)鍵盤(pán)按下時(shí),onStageKeyDown方法被調(diào)用,在它里面我檢查上下箭頭是否被按下,如果按下Up鍵,我首先確保當(dāng)前段的數(shù)量小于最大段數(shù)限制,如果還沒(méi)達(dá)到限制,我調(diào)用addSegment()方法添加一個(gè)新段,然后調(diào)用 positionSegment()方法定位所有的段。
代碼:
case Keyboard.UP: if (_shapeHolder.numChildren < MAX_SEGMENTS) { addSegment(); positionSegments(); }
如果DOWN鍵被按下,我檢查當(dāng)前段數(shù)是否小于最小段數(shù)限制,如果沒(méi)有,我調(diào)用removeSegment()方法刪除一個(gè)段并調(diào)用 positionSegment()方法從新定位所有的段。
removeSegment()方法簡(jiǎn)單的刪除_shape數(shù)組里面的最后一個(gè)值,并把它從_shapeHolder容器中刪除。
代碼:
var shape:Shape = _shapes.pop(); _shapeHolder.removeChild(shape);
現(xiàn)在繼續(xù)玩玩你的大作吧,看看你畫(huà)出什么漂亮的東西出來(lái),記得按上下鍵來(lái)調(diào)整段的數(shù)量,看看出來(lái)的效果有什么不同。圖1-15中我展示了一些我的“藝術(shù)品”。
經(jīng)典論壇交流:http://bbs.blueidea.com/thread-2992169-1-1.html
本文鏈接:http://m.95time.cn/tech/multimedia/2010/7819.asp
出處:藍(lán)色理想
責(zé)任編輯:bluehearts
上一頁(yè) ActionScript3.0 Image Effects 復(fù)制圖形 [3] 下一頁(yè)
◎進(jìn)入論壇RIA設(shè)計(jì)與應(yīng)用版塊參加討論
|