2012-09-15 42 views
-2

对于变量:命名diamondTextgoldTextsilverTextbronzeText 4文本视图;货币变量unsigned int money;以及NSTimer,每0.1秒,运行功能:游戏币转换:数学效率

-(void)updateMoney{ 
    money++; 
    bronzeText.text = [NSString stringWithFormat:@"%d",money]; 
    silverText.text = [NSString stringWithFormat:@"%d",money%10]; 
    goldText.text = [NSString stringWithFormat:@"%d",money%100]; 
    diamondText.text= [NSString stringWithFormat:@"%d",money%1000]; 
} 

鉴于我的货币是钻石= 10金= 10银= 10铜= 1;

什么是计算和显示货币标签最有效的方法?你将如何存储这个变量,与GameCenter和NSDictionary或GameCenter和其他东西?


更多细节如下:

澄清:青铜赢得最后的2号,银具有未来2号,以此类推。

我明白我可以使用4个整数或一个数组,但我宁愿尝试使用这种方法,除非使用更有效的方法。

例如:当money = 1000; bronzeText = nothing,silverText = 10,goldText = nothing, diamondText = nothing;

回答

2

首先,如果你给每个硬币两位数,那么你的数学是关闭的。如果你把所有的东西都改成10,那么每个硬币只能得到一位数。但是你甚至没有那么做;数学没有考虑到硬币的价值,或者忽略了你已经考虑过的硬币,或者其中的任何一个。假设你有1371美元......用你目前的数学,铜牌= 1371,银牌= 1,金牌= 71,钻石= 371。我很确定那不是你想到的。

你可以尝试像

int bronze = money % 100; 
int silver = (money/100) % 100; 
int gold = (money/10000) % 100; 
int diamond = money/1000000; 

现在,如果你有1371的钱,你有青铜= 71,银= 13,金= 0,钻石= 0。

至于更新的意见,与铜牌,你几乎总是要不断更新 - 任何改变都会影响它。但是,如果你总是递增1,那么当前硬币的数量为0时,你只需要更新下一个更高的硬币。例如,如果你有2799并且更新了,将你的钱增加到2800,那么你现在有铜牌= 0,所以你会将银牌更新为28枚。因为28!= 0,但是金牌不需要更新,所以你甚至不用钻石。

虽然你只需要更新它当钱改变。所以在碰撞时做这件事比在计时器上更有意义。 :)

+0

伟大的工作,接受的答案 – Comradsky

+0

就个人而言,我会说'bronzeText.text = ...;如果(青铜!= 0)返回; silverText.text = ...;如果(银!= 0)返回;'等等。更新将与您拥有的更新类似,只不过不是在那里做数学,而是使用上面提到的变量。 – cHao