2014-09-13 67 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,alpha就会是1.即使在前4个循环中alpha也被设置为1? – trevorj 2014-09-13 11:18:52

+0

是的,这实际上是我的意图,但是,正如我在下面指出的那样,我做了一个愚蠢的数学监督。 – Frankeex 2014-09-14 11:35:32

回答

1

在这种情况下,我是一个整数,所以结果总是舍入到最接近的整数。 0,而我< 5.否则1,2,3,等等。相反,你可能想:

stars.alpha = (CGFloat)i/5.0; 

虽然阿尔法仍将是1.0或更长时间后我> = 5

也许你的意思是一样的东西:

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

这会给你的恒星alpha值在0.2和1.0之间。

+0

谢谢,这对alpha问题非常有效。你有什么建议或想法,为什么每次添加UIView *星号时,主角(一个UIImageView)重置为起点? – Frankeex 2014-09-14 11:34:52

0

的问题是,只有第一个5星将有一个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); // 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]; 
    } 
} 

而且,如果一个明星的加入上海华对当前星的顶部,其alpha实际上是少比1还要多,它看起来就像它比实际上有更多的阿尔法。

一个问题可能是将5更改为更大的值,例如25或50.如果不知道ScoreNumber可能有多大,很难知道什么是合适的。

编辑:

此外,刚刚意识到另一个问题:你将一个int通过int型,所以阿尔法将是一个int(不是你想要的)。如果将5更改为5.0(或25.0或50.0),则会得到一个浮点数。

希望它能帮助!

+0

感谢您的建议,肯定有1个问题修复。任何想法为什么每次我添加UIView *星号时,主角(一个UIImageView)重置为起点? – Frankeex 2014-09-14 11:34:07