我有一个小方法,我打电话来随着游戏的进行逐渐绘制星星。这是代码:`
-(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(主角)并重置它的位置。此外,alpha值似乎根本不起作用,它似乎只使用值1(完整显示)。任何建议(对于新的程序员)都将不胜感激。
答案 0 :(得分:1)
在这种情况下,i是一个整数,因此结果将始终四舍五入到最接近的整数。 0而我&lt; 5.否则为1,2,3等。相反,您可能需要:
stars.alpha = (CGFloat)i / 5.0;
虽然在i> = 5之后alpha仍然是1.0或更高。
也许你的意思是:
stars.alpha = 0.20 + (CGFloat)((i % 5) / 5.0;
这将使你的星星alpha值介于0.2和1.0之间。
答案 1 :(得分:0)
问题是只有前5颗星的alpha值小于1:
-(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,则它看起来会比实际上具有更多的alpha值。
一个修正可能是将5改为更大的东西,比如25或50.如果不知道ScoreNumber
有多大,很难知道什么是合适的。
修改强>
另外,刚刚意识到另一个问题:你将int除以int,所以alpha将是一个int(不是你想要的)。如果你将5改为5.0(或25.0或50.0),你将获得一个浮动。
希望它有所帮助!