ok ... 그래서 무작위로 클래스의 레벨을 생성 한 다음 게임에 전달합니다.프로그램이 루프에 갇혀 있는지 확인하십시오.
문제는 가끔 레벨을 생성 할 때, 그것은 (인해 그것을 생성 할 때 검사에) 루프 걸리면이다. 난 코드를 수정하여 동결의 수를 줄이려고 했어.하지만 여전히 경우에 1 ~ 2 %처럼 붙어옵니다.
-(void)positionMonsters:(int)nrM{
int nrH=[randomHero count];
int rdm;
CGPoint randPt;
BOOL is;
while ([randomMonsters count]!=nrM) {
rdm=arc4random()%(nrH-1);
if (rdm!=nrH-1) {
randPt=random_on_line([[randomHero objectAtIndex:rdm]position], [[randomHero objectAtIndex:rdm+1]position ], CCRANDOM_0_1());
}else{
randPt=random_on_line([[randomHero objectAtIndex:rdm]position], [[randomHero objectAtIndex:0]position ], CCRANDOM_0_1());
}
is=NO;
for (Monster *mob in randomMonsters) {
if (ccpFuzzyEqual(randPt, mob.position, 40)) {
is=YES;
break;
}
}
if (!is) {
Monster *mob=[[Monster alloc]initWithPosition:randPt];
[randomMonsters addObject:mob];
}
}
}
나 코드를 안내하자 :
그래서 난 영웅의 수를 얻을 수 (방법이 많은)만큼 RandomLevel에서
나는이 있습니다 내가 만들고 싶은만큼의 몬스터가 없다. 나는 2 연속 히어로 사이에 임의의 라인을 선택하고 그 라인에 포인트를 생성한다. 생성 된 포인트가 다른 포인트에 가까운 지 확인한다. 겹치기) .. 만약 그렇다면 그것은 무작위로 그것을 추가하지 않으면 루프를 다시 시작합니다. mobs
군중이 다른 군중과 겹치는 지 확인하면 나빠질 것입니다 ...하지만 heros는 항상 최소 200px 떨어져 있기 때문에 나는 몹을 손으로 만 만듭니다.
내가 원하는 것은/중지*****
라인을 취소하고 내가 말했듯이 ... ... 다시 임의의 수준을 얻으려고하는 것입니다
-(id)init{
//stuff stuff
RandomLevel *rlv=[[RandomLevel alloc]initWithHeros:6 andMonsters:6]; *****
heros=rlv.randomHeros;
mobs=rlv.randomMonsters;
}
이는 단지 1 일 : 내 GameScene에서
내가 이렇게 게임이 처리 이상 0.5 초 걸리는 경우이 같은
루프가 고착되어 있는지 확인하는 방법을 궁금하게 생각한다면 코드를 잘못 구성했을 것입니다. 나는 그것이 많은 답변이 아니라는 것을 알고 있지만 진실이다. – Almo
어디서 어떻게 붙잡 았는지는 알지만 처리 능력이 엄청나지 않으면 아무 것도 할 수 없다. – skytz
나는이 코드가 코드에 철저히 논평하는 한 엣지 케이스가 있다고 생각한다. 큰 성능이있다. 절감 효과가 있으며, 단지 반창고 솔루션이 아닙니다. 반복 횟수를 확인하고 확인할 수 있으며 반복 횟수에 따라 반복 횟수가 달라질 수 있습니다. – AlexMA