iPhone游戏开发,碰撞检测,创造墙效果

时间:2011-11-05 03:22:15

标签: iphone collision

好吧,我上次试了这个,太模糊了,所以我会再试一次。我正在制作一个自上而下的透视iPhone游戏,有一个mainSprite(一个UIImageView)会与另一个UIImageView碰撞。当它发生时,我希望mainSprite停止移动。基本上创造一堵墙。那有意义吗?我没有使用任何框架,如cocos2d。我知道CGRectIntersectWithRect方法,我的问题是我需要在该方法中添加什么。我没有任何其他变量,如速度或速度,只是将精灵移动到屏幕周围的按钮。这是我的代码。

这是用于在屏幕上移动精灵的.m代码。

-(void)goDown{
mainSprite.center = CGPointMake(mainSprite.center.x, mainSprite.center.y+5);
}

-(IBAction)down{
    [self downAnimation];
    goDown = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(goDown) userInfo:nil repeats:YES];
    if (goDown == nil) {
        goUp = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(goDown) userInfo:nil repeats:YES];

    }
}

以下是我为碰撞设置的方法:

-(void)collision {
    if (CGRectIntersectsRect(mainSprite.frame, collisionImage.frame)) {

    }
}

非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

你可以做的是添加一个关于对象是否发生碰撞的bool(我建议作为实例变量)

使用此功能,可以在rects相交时将其设置为YES

在你的goDown方法中你会检查布尔值,如果布尔值为YES则不更改中心,否则继续更改它

每次调用-goDown时都会添加碰撞检查

这样,如果它已经发生碰撞,你实际上可以停用该计时器,使其不再停机,或者你可以按我上面提到的布尔方式进行。

我建议使用当前中心的一个参数检查碰撞的方法,以便检查是否在中心的y处添加5会导致它发生碰撞,因此您可以停用计时器/停止添加5

之后碰撞而不是碰撞
- (void)goDown {
   float delta = [self checkCollision];
   mainSprite.center = CGPointMake(mainSprite.center.x, mainSprite.center.y + delta);
}

- (float)checkCollision {
   CGRect testFrame = CGRectMake(mainSprite.frame.origin.x, mainSprite.frame.origin.y + 5.0f, mainSprite.frame.size.width, mainSprite.frame.size.height);
   if (CGRectIntersectsRect(testFrame, collisionImage.frame)) {
       return 0.0f;
       // stop the sprite from moving anymore so it doesn't actually intersect, just stops "on top"
    }
    return 5.0f;
    // if they have not collided then just continue on your way

代码示例实际上没有显示我的上述方法

我在这里做的是检查碰撞,如果碰撞是碰撞然后停止向中心添加任何一个,否则它将继续添加到中心坐标