2014-09-13 62 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