当UIImages碰撞时添加到int

时间:2013-03-30 20:18:40

标签: ios uiview int collision

首先,这是我的.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规则(在这种情况下钱袋)

这是我正在谈论的图像:

enter image description here

非常感谢任何帮助

编辑:这是我在虚空ifCollided中应该做的事情

-(void) ifCollided {

    if (!Coin1.hidden)
    {
        Coin1.hidden = YES;
        [self scorecheck];
    }
  }

谢谢@Elliott Perry

1 个答案:

答案 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;
        }
    }
}