萬盛學電腦網

 萬盛學電腦網 >> 圖文處理 >> Flash教程 >> Flash游戲開發實例制作旋轉坦克

Flash游戲開發實例制作旋轉坦克

   學習Flash,不學ActionScript,所做的事情是有限的。但很多朋友都在抱怨AS太難學了。筆者要告訴大家,其實AS一點也不難學。現在,筆者就教大家制作一個可以隨意開動,並旋轉其炮台的坦克(感覺就象在玩遙控汽車,很有意思)。在文章中,我們將學到AS中一些基本的語句、屬性、對象和方法。

  好,下面我們就一起來學習吧。首先,新建一個文件,600*450像素,背景為黑色,40fps。

  一、實現炮塔的旋轉

  1.按快捷鍵Ctrl+F8創建一個名為“炮塔”的影片剪輯元件。接著在其編輯場景中繪制一個炮塔,如圖1所示。注意,炮塔是圍繞場景中央的“╬”字進行旋轉的。所以大家在制作的時候要把炮塔圓蓋的中心和元件場景中的“╬”字重疊在一起。

Flash游戲開發實例制作旋轉坦克篇   三聯

  2.按快捷鍵Ctrl+F8創建一個名為“坦克”的影片剪輯元件。接著在其編輯場景的“圖層 1”中繪制一個坦克的主體。接著再從庫中把“炮塔”元件拖拽到“圖層2”中,如圖2所示。

Flash游戲開發實例制作旋轉坦克篇

  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鍵”。

  現在測試一下,你一定會覺得很有意思的。

copyright © 萬盛學電腦網 all rights reserved