所以我正在做一個遊戲(至少要嘗試),而且我有一些隨機位置產生的敵人,然後我把它們放在一個陣列。然後循環框中的函數使該陣列中的敵人在地圖上隨機移動。所以他們的動作是隨機的,但他們都是同步的,所以他們在同一時間做出同樣的動作模式。我試圖弄清楚如何讓它們以不同方式移動,或者至少產生一個隨機延遲,以便它們不是全部同步。這可能是一個基本問題,但我試圖用我目前理解並能夠解釋的方式製作遊戲,所以我會非常感謝您的解釋和建議。Flash as3:用同一個IA做敵人,彼此移動方式不同
這裏是我的代碼(在它的一些我的法語筆記對此深感抱歉,但我需要記住的東西,所以我可以在測試解釋它們:d)
所以ennemies是攝魂怪,從的movieclip「DementorAllSprite」含有ennemy的精靈面向不同方向
這裏是代碼圈外enterFrame事件
//set up var Dementor and array
//duration: random number between 0 et 150
//Facing: random number arrondi en dessous, donc entre 0 et 3
var DementorTimer = 0;
var DementorDuration = Math.random() * 150;
var DementorFacing: Number = Math.floor(Math.random() * 4);
var DementorSpeed: Number = 13;
var enemies_arr:Array = [];
這裏的在循環函數
PlayContainer.addEventListener(Event.ENTER_FRAME, PlayLoop);
function PlayLoop(loopEvent:Event):void
{
addDementor();
moveDementor();
function addDementor():void
{
//max number of ennemies
if(enemies_arr.length < 20)
{
//add le dementor if conditions check
var Dementor:DementorAllSprite = new DementorAllSprite();
//positions random on a grass container
var startX:int = Math.random() * 5760;
var startY:int = Math.random() * 3600 ;
Dementor.x = startX;
Dementor.y = startY;
//add Dementor to grass container and set their transparency (they gain alpha when they hit the Player)
GrassContainer.addChild(Dementor);
Dementor.alpha=0.4;
//store the object in an array
enemies_arr.push(Dementor);
}
}
//---Mouvements Dementors---//
//Timer = 0, Duration entre 0 et 25, chaque loop rajoute 1 au timer (DementorTimer ++;)
//jusqu'a ce que le if ne match plus, puis reset
//Facing mvmt: 0= back/1= front/2= right/3= left
//Frames Dementor: 1= front/2= back/3= left/4= right
//switch = if, else if, else if, ....
function moveDementor():void
{
//check les dementors de l'array (de 0 a leur nombre)
for (var j:int = 0; j < enemies_arr.length; j++)
{
if (DementorTimer < DementorDuration)
{
switch (DementorFacing)
{
case 0 :
enemies_arr[j].y-=DementorSpeed;
enemies_arr[j].gotoAndStop(2)
break;
case 1 :
enemies_arr[j].y+=DementorSpeed;
enemies_arr[j].gotoAndStop(1)
break;
case 2 :
enemies_arr[j].x+=DementorSpeed;
enemies_arr[j].gotoAndStop(4)
break;
case 3 :
enemies_arr[j].x-=DementorSpeed;
enemies_arr[j].gotoAndStop(3)
}
DementorTimer++;
}
//reset
else
{
DementorDuration = Math.random() * 150;
DementorFacing = Math.floor(Math.random() * 4);
DementorTimer = 0;
}
}
}
}
而且攝魂怪運動是因爲我把它們放在一個數組很短(最初,只有1,他沒有動想了很多改變方向之前,現在他們改變位置非常快,我增強持續時間150(它是一路下跌之前),有一個是一個小的變化,但是這仍然是奇怪)
反正感謝您的幫助和關注
感謝您的快速回答,並且對我的新手錯誤感到抱歉,我正在學習。 所以我有點理解你的代碼,但你似乎以非常先進的方式工作,我會試着理解,以便我可以稍後在測試中解釋哈哈。 與此同時,我試圖運行它,我得到了以下的錯誤:「target.direction = DList [int(DList.length * Math.random)」隱式強制將一個類型爲void的類型的值強制爲無關類型數字)];' – Ymines
@Ymines固定。應該是一個函數調用:** Math.random()** – Organis
一切正常,非常感謝!如果你有時可以解釋邏輯,或者像'DHash:Object'這樣的代碼的高級部分,例如?我隱約明白,當你提及它時,它有什麼用處,但我無法解釋爲什麼以及如何使用它。但是,如果你不是這一切,那麼你幫了我很多,祝你有個美好的一天:D – Ymines