2014-09-13 4 views
0

У меня есть небольшой метод, который я призываю рисовать звезды постепенно, когда игра движется дальше. Вот код: `Проблемы с значениями UIView alpha

-(void)stars{ 
    for (int i = 0; i < (ScoreNumber * 3); i++){ 
     int starX = ((arc4random() % (320 - 0 + 1)) + 0); 
     int starY = ((arc4random() % (640 - 0 + 1)) + 0); 
     int starSize = ((arc4random() % (1 - 0 + 1)) + 1); 
     UIView *stars = [[UIView alloc] initWithFrame:CGRectMake(starX,starY, starSize, starSize)]; 
     stars.alpha = (i/5); 
     stars.backgroundColor = [UIColor whiteColor]; 
     [self.view addSubview:stars]; 
    } 
    } 

звезды действительно показывают, но при каждой итерации через цикл ней ошибки еще один UIImageView (главный герой) и сбрасывает его положение. Кроме того, значения альфа-видимому, не работает вообще, и он, по-видимому, использует только значение 1 (полный показ). Любые советы (для нового программиста) будут оценены.

+0

Как только 'i' больше 5 альфа, будет равно 1. Даже в первых 4 циклах альфа устанавливается в 1? – trevorj

+0

Да, это было мое намерение, но да, как было указано ниже, я сделал глупый математический надзор. – Frankeex

ответ

1

i является целым числом в этом случае, поэтому результат всегда будет округлен до ближайшего целого числа. 0 в то время как я < 5. В противном случае 1, 2, 3 и т.д. Вместо этого вы можете:

stars.alpha = (CGFloat)i/5.0; 

Хотя альфа-прежнему будет 1,0 или более после того, как я> = 5.

Может быть, вы имели в виду что-то вроде :

stars.alpha = 0.20 + (CGFloat)((i % 5)/5.0; 

Это придаст вашим альфа-значениям звезд от 0,2 до 1,0.

+0

Спасибо, это отлично сработало для альфа-проблемы. Есть ли у вас какие-либо советы или идеи, почему каждый раз, когда я добавляю звезды UIView *, главный герой (UIImageView) сбрасывается в исходную точку? – Frankeex

0

Проблема заключается в том, что только первые 5 звезд будет иметь альфа меньше, чем один:

-(void)stars{ 
    for (int i = 0; i < (ScoreNumber * 3); i++){ 
     int starX = ((arc4random() % (320 - 0 + 1)) + 0); 
     int starY = ((arc4random() % (640 - 0 + 1)) + 0); 
     int starSize = ((arc4random() % (1 - 0 + 1)) + 1); 
     UIView *stars = [[UIView alloc] initWithFrame:CGRectMake(starX,starY, starSize, starSize)]; 
     stars.alpha = (i/5); // ONCE THIS IS 5 (LIKELY WON'T TAKE LONG), ALPHA WILL BE 1 FOR ALL YOUR STARS 
     stars.backgroundColor = [UIColor whiteColor]; 
     [self.view addSubview:stars]; 
    } 
} 

Кроме того, если звезда добавляется в надтаблицы поверх текущей звезды и ее альфа на самом деле меньше чем 1, он будет выглядеть так, как будто он имеет больше альфы, чем на самом деле.

Одним из исправлений может быть изменение 5 на нечто большее, например, 25 или 50. Трудно понять, что было бы уместно, не зная, насколько велика может быть ScoreNumber.

Edit:

Кроме того, только что понял, еще одна проблема: вы деления Int с помощью межд, поэтому альфа будет Int (не то, что вы хотите). Если вы измените 5 до 5,0 (или 25,0 или 50,0), вы получите поплавок.

Надеюсь, это поможет!

+0

Спасибо за совет, определенно получил 1 исправленную проблему. Любые идеи, почему каждый раз, когда я добавляю звезды UIView *, основной символ (UIImageView) сбрасывается в исходную точку? – Frankeex