學習Flash,不學ActionScript,所做的事情是有限的。但很多朋友都在抱怨AS太難學了。筆者要告訴大家,其實AS一點也不難學。現在,筆者就教大家制作一個可以隨意開動,並旋轉其炮台的坦克(感覺就象在玩遙控汽車,很有意思)。在文章中,我們將學到AS中一些基本的語句、屬性、對象和方法。
好,下面我們就一起來學習吧。首先,新建一個文件,600*450像素,背景為黑色,40fps。
一、實現炮塔的旋轉
1.按快捷鍵Ctrl+F8創建一個名為“炮塔”的影片剪輯元件。接著在其編輯場景中繪制一個炮塔,如圖1所示。注意,炮塔是圍繞場景中央的“╬”字進行旋轉的。所以大家在制作的時候要把炮塔圓蓋的中心和元件場景中的“╬”字重疊在一起。
2.按快捷鍵Ctrl+F8創建一個名為“坦克”的影片剪輯元件。接著在其編輯場景的“圖層 1”中繪制一個坦克的主體。接著再從庫中把“炮塔”元件拖拽到“圖層2”中,如圖2所示。
3.點選“圖層2”中的“炮塔”元件,按F9打開“動作”面板,輸入以下代碼:
// 鍵盤上有鍵按下時執行
onClipEvent (keyDown) {
// 如果按下“z”鍵,炮塔向左旋轉6度
if (Key.getCode() == 90) {
_rotation -= 6;
}
// 如果按下“x”鍵,炮塔向右旋轉6度
if (Key.getCode() == 88) {
_rotation += 6;
}
}
測試一下,你會發現炮塔現在可以旋轉了。因為我們通過_rotation屬性來改變“炮塔”的角度。Key.getCode()返回按下的最後一個鍵的鍵控代碼值。不過,如果讀者要用其它鍵來控制炮塔的選擇也是可以的。具體要用什麼鍵,我們可以查查該鍵的代碼——字母鍵a-z對應的數值是65-90。無論你使用什麼鍵,都要注意這樣一個原則——方便用戶操作。
二、實現坦克的運動
回到場景1,打開庫,把庫中的“坦克”元件拖入場景中,接著點選“坦克”元件,按F9打開“動作”面板,輸入如下代碼:
onClipEvent (enterFrame) {
// move函數通過改變坦克的坐標值實現坦克的移動
function move() {
_y -= (Math.cos(Math.PI/180*this._rotation))*speed;
_x += (Math.sin(Math.PI/180*this._rotation))*speed;
}
// 如果敲擊鍵盤上的“↑”鍵或“↓”鍵,就調用move函數
if (Key.isDown(Key.UP)) {
move();
}
if (Key.isDown(Key.DOWN)) {
move();
}
// 如果敲擊鍵盤上的“←”鍵或“→”鍵,就讓坦克旋轉
if (Key.isDown(Key.LEFT)) {
_rotation -= 3;
}
if (Key.isDown(Key.RIGHT)) {
_rotation += 3;
}
// 改變坦克的速度偏移量,使坦克運動時有一個加速度
if (Key.isDown(Key.UP) && !(Key.isDown(Key.DOWN)) && speed>-3 && speed<3) {
speed += 0.1;
}
if (Key.isDown(Key.DOWN) && !(Key.isDown(Key.UP)) && speed>-3 && speed<3) {
speed -= 0.1;
}
if ((speed>0.1) && (!Key.isDown(Key.UP)) && (!Key.isDown(Key.DOWN))) {
move();
speed -= 0.05;
}
if ((speed<-0.1) && (!Key.isDown(Key.UP)) && (!Key.isDown(Key.DOWN))) {
move();
speed += 0.05;
}
// 如果同時按住兩個方向相反的鍵,坦克不會一直移動
if ((Key.isDown(Key.UP)) && (Key.isDown(Key.DOWN))) {
speed /= 1.1;
if ((speed>-0.1) && (speed<0.1)) {
speed = 0;
}
}
// 使坦克始終在場景中移動
if (_x<=0) {
_x = 600;
} else if (_x>=600) {
_x = 0;
}
if (_y<=0) {
_y = 450;
} else if (_y>=450) {
_y = 0;
}
}
上面的一大段代碼,讀者一下子恐怕也消化不了。現在筆者就來細細地講講這些代碼。
1.大家可以發現,程序中很多地方用到了move函數,如果我們直接使用move函數裡的代碼,將會使整個程序變得冗長。而且,這樣也不方便對程序地維護。
2.物體在運動的時候,總有一個不斷變化的加速度。當坦克在運動在改變運動方向的時候,所改變的角度是不斷變化的。通過代碼:
_y -= (Math.cos(Math.PI/180*this._rotation))*speed;
_x += (Math.sin(Math.PI/180*this._rotation))*speed;
實現這一變化。其中y軸坐標用“-=”是和Flash坐標系設定有關的。因為,在主場景中,向上移動元件,就要減小y值。
3.Key.isDown()方法在按下“()”中指定的鍵時返回true值。我們通常用該方法檢測是否按下“Shift鍵”、“Tab鍵”。
現在測試一下,你一定會覺得很有意思的。