#iphone #xcode #cgpoint #arc4random #xvalue
#iPhone #xcode #cgpoint #arc4random #xvalue
Вопрос:
У меня есть 22 изображения… 11 являются (rightwall1, rightwall2, rightwall3 и т.д.), Остальные 11 являются (leftwall1, leftwall2, leftwall3 и т.д.)
Я размещаю каждый из них поверх другого, устанавливая их значение y равным значению y предыдущих стен плюс высоту стены (все стены одинаковой высоты).
Это работает отлично!
Теперь я пытался установить значение x с помощью arc4random, чтобы они перескакивали повсюду в определенном диапазоне…
Правые стены работают отлично, но левые стены, некоторые из них работают, но большинство из них не отображаются на экране.
Я вручную установил значение x, равное единице, равным -15, и оно появилось на экране, и это меньше, чем позволяет arc4random.
Единственная проблема, о которой я могу подумать, это неправильное вычитание для левых стен?
Вот код для установки расположения стен, другого кода во всем проекте у меня пока нет.
-(void)awakeFromNib {
rightWall1.center = CGPointMake( ((arc4random()%75) 330), (460-((rightWall1.frame.size.height)/2)) );//460 = bottom of screen
rightWall2.center = CGPointMake( ((arc4random()%75) 330), ((rightWall1.center.y)-(rightWall2.frame.size.height)) );
rightWall3.center = CGPointMake( ((arc4random()%75) 330), ((rightWall2.center.y)-(rightWall3.frame.size.height)) );
rightWall4.center = CGPointMake( ((arc4random()%75) 330), ((rightWall3.center.y)-(rightWall4.frame.size.height)) );
rightWall5.center = CGPointMake( ((arc4random()%75) 330), ((rightWall4.center.y)-(rightWall5.frame.size.height)) );
rightWall6.center = CGPointMake( ((arc4random()%75) 330), ((rightWall5.center.y)-(rightWall6.frame.size.height)) );
rightWall7.center = CGPointMake( ((arc4random()%75) 330), ((rightWall6.center.y)-(rightWall7.frame.size.height)) );
rightWall8.center = CGPointMake( ((arc4random()%75) 330), ((rightWall7.center.y)-(rightWall8.frame.size.height)) );
rightWall9.center = CGPointMake( ((arc4random()%75) 330), ((rightWall8.center.y)-(rightWall9.frame.size.height)) );
rightWall10.center = CGPointMake( ((arc4random()%75) 330), ((rightWall9.center.y)-(rightWall10.frame.size.height)) );
rightWall11.center = CGPointMake( ((arc4random()%75) 330), ((rightWall10.center.y)-(rightWall11.frame.size.height)) );
leftWall1.center = CGPointMake( ((arc4random()%75)-60), (460-((leftWall1.frame.size.height)/2)) );
leftWall2.center = CGPointMake( ((arc4random()%75)-60), ((leftWall1.center.y)-(leftWall2.frame.size.height)) );
leftWall3.center = CGPointMake( ((arc4random()%75)-60), ((leftWall2.center.y)-(leftWall3.frame.size.height)) );
leftWall4.center = CGPointMake( ((arc4random()%75)-60), ((leftWall3.center.y)-(leftWall4.frame.size.height)) );
leftWall5.center = CGPointMake( ((arc4random()%75)-60), ((leftWall4.center.y)-(leftWall5.frame.size.height)) );
leftWall6.center = CGPointMake( ((arc4random()%75)-60), ((leftWall5.center.y)-(leftWall6.frame.size.height)) );
leftWall7.center = CGPointMake( ((arc4random()%75)-60), ((leftWall6.center.y)-(leftWall7.frame.size.height)) );
leftWall8.center = CGPointMake( ((arc4random()%75)-60), ((leftWall7.center.y)-(leftWall8.frame.size.height)) );
leftWall9.center = CGPointMake( ((arc4random()%75)-60), ((leftWall8.center.y)-(leftWall9.frame.size.height)) );
leftWall10.center = CGPointMake( ((arc4random()%75)-60), ((leftWall9.center.y)-(leftWall10.frame.size.height)) );
leftWall11.center = CGPointMake( ((arc4random()%75)-60), ((leftWall10.center.y)-(leftWall11.frame.size.height)) );
}
Ответ №1:
Я вручную установил значение x, равное единице, равным -15, и оно появилось на экране, и это меньше, чем позволяет arc4random.
((arc4random()u)-60)
возвращает числа от -60 до 14, поскольку (arc4random()u)
возвращает числа от 0 до 74.
Комментарии:
1. ОХХХХХХХХХХХХХХХХ! HAHAHHAHAHAHAHAHHAHAHAAH
2. Все равно не сработало, проблема в том, что при работе с отрицательными значениями arc4random вы не можете использовать целые числа, вам приходится использовать значения с плавающей точкой.. Если при вычитании вы не можете просто вычесть, вам нужно добавить значение arc4random, умноженное на отрицательное значение с плавающей точкой 1. Это потому, что arc4random использует модуль, я полагаю…
3. arc4random возвращает значения без знака. Использование % ограничивает диапазон. Вам не нужны числа с плавающей запятой — просто целые числа со знаком после%.