2014-10-04 4 views
0

Я использую arc4random() и CGPointMake для произвольной регенерации платформ во всем приложении с одним представлением.Создание случайных достижимых платформ

Однако, как я могу случайно регенерировать платформы рядом с другой платформой, чтобы она достижима игроком/персонажем игры?

Другими словами, если я просто установил его случайным образом, одна платформа может быть слишком далеко слева, а другая платформа слишком далеко справа, что сделает невозможным достижение персонажа на последней платформе.

спасибо.

+0

Sure. Я хотел бы принять ваш ответ, но я не вижу никаких галочек рядом с вашими ответами? – dendritic

+0

Не чувствуйте себя вынужденным принять неправильный ответ. @Zaph никак не ответил на ваш вопрос и не должен настаивать на том, чтобы вы согласились в любом случае - это плохая форма. Я дам вам подсказку через секунду. – davbryn

+1

@ davbryn Я не троллинг для репутации, это просто хороший совет. Я проголосовал за ответ 0x141E после того, как он был исправлен, и IMO oit должен быть принят. – zaph

ответ

1

1) Объявляет различные случайных чисел генерации функции

#define kArc4RandomMaxValue  0xFFFFFFFF 
static inline double skRandf() { 
    return (double)arc4random_uniform(kArc4RandomMaxValue)/kArc4RandomMaxValue; 
} 

static inline CGFloat skRandInRange (CGFloat low, CGFloat high) { 
    return (skRandf() * (high - low) + low); 
} 

2) Определение мин/макс расстояния от текущей платформы к новому

#define kMinDistance 100 
#define kMaxDistance 200 

3) генерации случайных х и у значений на основе положения текущей платформы

CGFloat radius = skRandInRange(kMinDistance, kMaxDistance); 
CGFloat angle = skRandf()*M_PI*2; 
CGFloat x = radius * cosf(angle); 
CGFloat y = radius * sinf(angle); 

newPlatform.position = CGPointMake(currentPlatform.position.x+x, currentPlatform.position.y+y); 

EDIT: Альтернативный метод для вычислить новое положение платформы,

#define kRangeX   100 
#define kMinYDistance 100 
#define kMaxYDistance 200 


CGFloat x = skRandInRange(-kRangeX/2, kRangeX/2);; 
CGFloat y = skRandInRange(kMinYDistance, kMaxYDistance);; 

newPlatform.position = CGPointMake(currentPlatform.position.x+x, currentPlatform.position.y+y); 
+0

Не использовать rand() он не очень случайный, у него есть начальное значение по умолчанию 1, поэтому будет повторяться одна и та же последовательность при каждом запуске приложения. Из [Manage Pages OS X] (https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/rand.3.html) «Эти интерфейсы устарели [arc4random (3) ] (https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/arc4random.3.html # // apple_ref/doc/man/3/arc4random) – zaph

+0

Базовая функция из кода набора спрайтов от Apple. – 0x141E

+0

Каково максимальное значение arc4random_uniform()? – 0x141E

0

разбить его на простые шаги:

You want a randomly placed platform 

You want a reachable platform 

Я предполагаю, что вы можете случайно генерировать платформу. Итак, у вас есть одна проблема для решения: может ли игрок достичь этого?

Как далеко ваш персонаж может прыгать горизонтально? Это ваше максимальное расстояние X. Как высоко он может прыгать? Это ваш Y.if ваш случайный блок больше, чем тот, он недостижим.

Вы можете добавить несколько правил, но ключ должен работать, где ваш персонаж может достичь и затем выбрать место в этих регионе

Смежные вопросы