这是我的代码:
-(void)detectCollision{
imageView.center = CGPointMake(imageView.center.x + X, imageView.center.y + Y);
if(CGRectIntersectsRect(imageView.frame,centre.frame)){
label.text= [NSString stringWithFormat:@"%d", count];
++count;
}
我在detectCollision上有一个CADisplayLink(60fps)。 我希望每次“imageView”与“center”碰撞时增加一个“count”,但我的问题是计数增量太快,每次碰撞时它增加近100或200,我不知道为什么。我该如何解决这个问题?
答案 0 :(得分:0)
找出碰撞你应该使用边界而不是框架
bounds - 对象内部的大小
frame - 从superview x,y + size(bounds)偏移
这里我假设你处于肖像模式
-(void)detectCollision{
if(CGRectContainsPoint( imageView.bounds, CGPointMake(160, 240)) ){
label.text= [NSString stringWithFormat:@"%d", count];
++count;
}
}
答案 1 :(得分:0)
因为每次帧开始相交时,
if(CGRectIntersectsRect(imageView.frame,centre.frame))
您的情况将成立,直到帧分离并且CADisplayLink中的计数增加超过100
因此您可以使用BOOL并在帧首次相交时将其设置为true。然后检查它们是否分开并使BOOL恢复为假。
在init中将BOOL intersectFlag
初始化为false。我假设帧最初不会相交。
-(void)detectCollision
{
imageView.center = CGPointMake(imageView.center.x + X, imageView.center.y + Y);
if(!intersectFlag)
{
if(CGRectIntersectsRect(imageView.frame,centre.frame))
{
intersectFlag = YES;
label.text= [NSString stringWithFormat:@"%d", count];
++count;
}
}
else
{
if(!CGRectIntersectsRect(imageView.frame,centre.frame))
{
intersectFlag = NO;
}
}
}