CGPointMake (random (), random ()) не работает

Возможное дублирование:
Генерация случайных чисел в Objective-C

Привет, я создаю приложение, в котором, когда вы нажимаете прыщик, он перемещается в случайное место на экране. Прыщ - это UIImageView. Вот код, который я ввел:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *myTouch = [touches anyObject];

    CGPoint point = [myTouch locationInView:pimple];
    if ( CGRectContainsPoint(pimple.bounds, point) ) {
        [self checkcollision];
    }
}

-(void)checkcollision 
{

    pimple.center = CGPointMake(random(), random());    
    sad.hidden = NO;    
    NSURL* popURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"pop" ofType:@"mp3"]];
    AudioServicesCreateSystemSoundID((CFURLRef) popURL, &popID);
    AudioServicesPlaySystemSound(popID);
}

Этот код: pimple.center = CGPointMake (random (), random ()); не работает. Когда надавливаю на прыщик, прыщик исчезает. Поскольку я не указал ни одного скрытого прыща, это должно означать, что он ДВИГАЕТСЯ. Но вы не можете его увидеть (он находится вне поля зрения). Что-то не так с моим кодом? Я что-то упускаю? Пожалуйста помоги.


person user722566    schedule 30.05.2011    source источник


Ответы (1)


afaik random () - это то же самое, что и rand () в c, который

Возвращает псевдослучайное целое число в диапазоне от 0 до RAND_MAX. [...] RAND_MAX - это константа, определенная в cstdlib. Его значение по умолчанию может варьироваться в зависимости от реализации, но предоставляется не менее 32767.

В результате вы перемещаете наш прыщик в произвольное положение внутри прямоугольника, который намного больше вашего окна. Попробуйте это: (я предполагаю, что self - это UIView)

pimple.center = CGPointMake(
    random() % (unsigned int)self.bounds.size.width, 
    random() % (unsigned int)self.bounds.size.height);

% -Operator - это оператор по модулю.

Кажется, что вы не запускаете свой псевдослучайный генератор, который всегда ведет к одной и той же траектории при каждом запуске. Существует другой поток в stackoverflow, который говорит нам использовать arc4random вместо random ( ) / rand ()

person thomas    schedule 30.05.2011