首先,这是我的.h文件代码,我宣布了所有内容......
@interface NextlLevel : UIViewController{
IBOutlet UIImageView *Coin1;
int score;
IBOutlet UILabel *scorelable;
}
@property (nonatomic, assign) int score;
@property (nonatomic, retain) IBOutlet UILabel *scorelable;
@end
我还在我的.m文件中合成了我的实现,这里是代码......
@synthesize score;
@synthesize scorelable;
其次,我有一些代码可以检查我的可拖动图像是否与静止图像相撞。这是代码......
-(void) ifCollided {
if(CGRectIntersectsRect(Coin1.frame,MoneyBag.frame)){
Coin1.hidden = YES;
}
}
此代码只是检查碰撞的基本方法,但是一旦图像发生碰撞,我想添加到标签中显示的int。 我认为我能做到这一点的唯一方法是......
首先将这行代码添加到'ifCollided'
[self scorecheck];
所以现在'ifCollided'看起来像这样:
-(void) ifCollided {
if(CGRectIntersectsRect(Coin1.frame,MoneyBag.frame)){
Coin1.hidden = YES;
[self scorecheck];
}
}
第三,我不得不做'得分',我是这样做的......
-(void)scorecheck{
score++;
scorelable.text = [NSString stringWithFormat:@"%i", score];
}
}
这是一张图片,显示我正在使用的代码无法正常工作。因此,不只是在我设置为0的int中只添加一个。我在分数标签中显示int(在我的屏幕顶部)。由于代码没有正确工作,只要你触摸,拖动和保持,同时碰撞在图像的边界与collieion规则(在这种情况下钱袋)
这是我正在谈论的图像:
非常感谢任何帮助
编辑:这是我在虚空ifCollided中应该做的事情
-(void) ifCollided {
if (!Coin1.hidden)
{
Coin1.hidden = YES;
[self scorecheck];
}
}
谢谢@Elliott Perry
答案 0 :(得分:1)
那么,为了澄清一下,你想要一种机制来保证每个硬币与钱袋相撞时分数只会增加一次吗?
有很多方法可以做到这一点,但它们都要求你跟踪哪些硬币已经以某种方式处理过。您可以为每个硬币提供唯一的参考,并存储一组代表已经处理过的硬币的ID,如果该集合包含相关硬币的ID,则无法调用scorecheck
。
或者,和我采用的方法一样,你可以标记每枚硬币让自己知道不再处理那枚硬币。由于您在碰撞时隐藏了硬币,为什么不使用hidden
属性来确定是否增加分数:
-(void)ifCollided
{
if(CGRectIntersectsRect(Coin1.frame,MoneyBag.frame))
{
if (!Coin1.hidden)
{
Coin1.hidden = YES;
[self scorecheck];
}
}
}
如果出于任何原因,这里不可行的是使用标签属性标记硬币的示例:
-(void)ifCollided
{
if(CGRectIntersectsRect(Coin1.frame,MoneyBag.frame))
{
if (Coin1.tag != 1)
{
Coin1.hidden = YES;
[self scorecheck];
Coin1.tag = 1;
}
}
}