그래서 게임을 만들려고합니다. (적어도 시도하려고합니다.) 임의의 위치에 산란하는 일부 엔네임을 가지고 있습니다. 정렬. 그런 다음 루프 enterframe의 함수가 해당 배열의 엔비들을 무작위로 맵 주위로 이동시킵니다. 그래서 그들의 움직임은 무작위이지만 모두 동기화되어 같은 동작을 반복합니다. 나는 그들을 다르게 움직이게 만드는 방법을 알아 내려고하고있다. 적어도 랜덤 딜레이로 산란 시켜서 모두 동기화하지는 않는다. 그것은 기본적인 질문 일지 모르지만 나는 현재 이해하고 설명 할 수있는 게임을 만들려고 노력하고 있습니다. 그래서 나는 당신의 설명과 충고에 진심으로 감사 할 것입니다. 여기 플래시 as3 : 동일한 IA로 된 ennemies가 서로 다르게 이동합니다.
내 코드 (미안 그것은 내 프랑스어 노트의 일부와,하지만 난 시험에서 그들을 설명 할 수 있도록 내가 물건을 기억해야합니다 : D)는 그래서 ennemies가 아즈카반부터입니다 ennemy 스프라이트의 다른 방향
여기대향 포함 된 동영상 클립 "DementorAllSprite"은 루프 기능
01,235,164 루프를 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;
}
}
}
}
또한 배열에 넣은 이후로 dementors 운동이 꽤 짧습니다. (원래 1 개가 있었는데 방향을 변경하기 전에 원래 많이 움직였습니다. 이제는 위치가 매우 빨리 바뀌므로 기간이 150 시간으로 늘어납니다. 여러분의 도움과 관심
빠른 답변을 보내 주셔서 감사 드리며, 초보자 실수로 유감스럽게 생각합니다. 배우고 있습니다. 그래서 내가 좀 당신의 코드를 이해하지만, 매우 진보 된 방식으로 일하는 것, 내가 나중에 시험 하하에서 설명 할 수 있도록 이해하려고 노력할 것입니다. 그 동안 나는 그것을 실행하려고 시도했다. 그리고 다음과 같은 오류가 발생했다 : "target.direction = DList [int (DList.length * Math.random)"에 대해 "무효 타입의 값을 무명 타입 번호에 암시 적으로 강제 변환")]; ' – Ymines
@Ymines가 수정되었습니다. 함수 호출을해야합니다 : ** Math.random() ** – Organis
모든 것이 작동합니다. 만약 당신이 몇 번이나 논리를 설명 할 수 있을까요? 아니면 예를 들어'DHash : Object'와 같은 코드의 일부 고급 부분을 설명 할 수 있습니까? 나는 당신이 그것을 참조 할 때 어떻게 사용되는지를 모호하게 이해하지만, 왜 그리고 어떻게 사용 하는지를 설명 할 수 없을 것입니다. 그러나 당신이하지 않으면 그것은 당신이 나를 많이 도와 줬던 모든 신이다 즐거운 하루 보내라. D – Ymines