好吧,我上次试了这个,太模糊了,所以我会再试一次。我正在制作一个自上而下的透视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)) {
}
}
非常感谢帮助。
答案 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
代码示例实际上没有显示我的上述方法
我在这里做的是检查碰撞,如果碰撞是碰撞然后停止向中心添加任何一个,否则它将继续添加到中心坐标