【发布时间】:2017-10-22 14:57:06
【问题描述】:
所以我正在制作一款游戏(至少尝试这样做),并且我有一些在随机位置生成的敌人,然后我将它们放入一个数组中。然后循环输入框中的一个函数使该数组中的敌人在地图上随机移动。所以它们的动作是随机的,但它们都是同步的,所以它们同时做出相同的动作模式。我正在尝试弄清楚如何使它们以不同的方式移动,或者至少以随机延迟产生,以使它们不完全同步。这可能是一个基本问题,但我正在尝试用我目前理解并能够解释的内容制作游戏,所以我非常感谢您的解释和建议。
这是我的代码(其中包含我的一些法语笔记,对此我感到抱歉,但我需要记住一些东西,以便我可以在测试中解释它们:d)
所以敌人是摄魂怪,来自一个电影剪辑“DementorAllSprite”,其中包含面向不同方向的敌人的精灵
这是循环输入框外的代码
//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(它是之前下降)并且有一点变化,但这仍然很奇怪)
无论如何感谢您的帮助和关注
【问题讨论】:
标签: arrays actionscript-3 flash random