Flash遊戲開發系列一 遊戲中的敵人 1

2021-05-21 20:13:39 字數 2068 閱讀 3663

對於目前的 flash 來說,開發一些像模像樣的遊戲並不是什麼奇怪的事情了。我這裡所涉及到的內容和開發遊戲有關,但是都是一些比較基本的知識。如果您是遊戲開發方面的高手,那麼完全可以忽略我這裡所描述的內容。我的計畫是要做一系列的教程,這是其中乙個系列。

遊戲是乙個互動作品,簡單說,就是通過使用者的行為,會對這個作品的程序產生一定的影響。說到遊戲,總要提到難度,遊戲的難度在於:當你想要達到某種目的 的時候,你會發現它的實現多少有些困難,困難越難克服,難度也就越大。不同型別的遊戲有不同的難度,以及不同的實現方法。比如:俄羅斯方塊通過改變方塊下 落的速度來改變遊戲的難度,空戰射擊遊戲通過不同的敵機以及不同的 boss 來實現不同的難度。

在這個系列裡面,我們想和大家一起研究一下遊戲中敵人的運動方式,一點一點來。as 基礎最好是有一些,不然會稍微有些頭疼。

一、最直接的跟蹤

首先看看這個例子:

假定紅色圓圈是玩家,綠色圓圈是敵人,移動你的滑鼠,敵人就會跟著你跑。

這就是最簡單的跟蹤敵人,它的原理是:

如果(玩家x座標 <> 敵人x座標)

如果(玩家y座標 <> 敵人y座標)

這應該是極其容易理解的。那麼具體的**實現應該是什麼樣子的呢?

我們先把兩個不同的 movieclip 放置在舞台上,乙個例項名叫做 player,另外乙個叫做 enemy。

為了方便,我們僅僅通過滑鼠來實現玩家的移動,於是**就很簡單了:

player._x = _xmouse-10;

player._y = _ymouse-10;

updateafterevent();

玩家可以移動了,下面來解決座標調整的問題。

看上面的,不管玩家和敵人處於什麼位置,只要不重合,兩個角色之間總是具有一定距離的,我們用 dx 和 dy 來代表 x 方向和 y 方向的差值。根據 dx 和 dy,基於敵人靠近玩家的概念,我們就可以得出敵人應該前進的方向。

敵人應該具有一定的速度,根據這個速度向玩家靠近。所以我們可以先定義乙個變數來代表敵人的速度:enemyspeed。

根據分析,我們可以得出下面的計算公式:

dx = player._x-enemy._x;

dy = player._y-enemy._y;

if (math.abs(dx)>=enemyspeed)

if (math.abs(dy)>=enemyspeed)

觀察到,我們用了乙個 math.abs(dx)>=enemyspeed 來限制敵人運動,其實也可以不限制,但是那樣在敵人速度比較高的時候,就會發生抖動現象。因為這種情況下,敵人的座標和玩家座標之間差值小,敵人可能會在 逼近過程中不斷搖擺。大家可以去掉限制嘗試一下。

對於 as 不太熟悉的,我來解釋一下這句: enemy._x += ((dx>=0) ? enemyspeed : -enemyspeed),其實是相當於下面這句:

if (dx >= 0) else
這是用來判斷敵人的運動方向的,根據 dx dy 的正負情況,來決定向哪個方向運動。

好,到此為止,我想已經都解釋清楚了,下面是完整的第一幀源**:

var enemyspeed:number = 2;

var dx, dy:number;

/* functions */

tracker = function ()

if (math.abs(dy)>=enemyspeed)

updateafterevent();

};/* run it*/

setinterval(tracker, 10);

針對 as 新手:程式先定義了變數,確定了敵人的運動速度,這個是可以更改的,函式 tracker 則主要用來處理玩家移動以及敵人移動。 updateafterevent 是為了保證流暢度設定的,沒有也可以。

如果不觸發 tracker 函式,那麼這個程式是不會跑起來的,所以,我們使用了 setinterval,每隔 10 毫秒觸發一次 tracker 函式,這樣,程式就正常執行了。

這一次的介紹就到這裡了,很簡單是不是?下一次我們要給目前的這個敵人增加一些小功能,或者說,限制一下它。

Flash遊戲開發例項系列 打小狗

img files beyondpic 2006 10 15 20051217202758399.gif img img files beyondpic 2006 10 15 zip.gif img 遊戲概述 在flash遊戲中,打小狗 老鼠等 遊戲是比較基礎的遊戲了。如果對flash遊戲設計有興趣...

flash遊戲中控制角色慣性移動

首先做好角色的mc,然後在mc上編寫如下指令碼 偵聽鍵盤,如果沒有按鍵則變數kpress的值為 沒有按鍵 onclipevent load key.addlistener mylistener 設定初始值 onclipevent load 左邊界 if x 30 下邊界 if y 370 上邊界 i...

從msn的flash遊戲中存在的問題的一些感想

我的乙個朋友已經按照這種思路自行提交了高積分,導致自己僅玩了幾局遊戲而積分是別人的數百倍。當然那位朋友的意圖不在於自己的積分,而是他們自己做了類似的遊戲,所以也就考慮這種遊戲的安全性。除了通常令人厭煩的自動提交之外,還有就是使用者特意的修改某個值,這個值可能包含在post的資料中。這樣使用者就可以獲...