错误在Xcode / iOS中碰撞Images方法

时间:2015-02-06 15:14:05

标签: ios objective-c xcode cgrectintersectsrect

我正在使用Objective C

创建一个带有Xcode 6.1的iOS应用程序

我正在尝试创建代码以在击中另一个对象时停止移动对象(角色)。我尝试使用两种方法来做到这一点,但对象似乎停止在我设置它的不同点。以下是我尝试过的两种方法。我还在dropbox上放置了完整版代码的链接(下面的链接)。

方法1:当物体到达特定的坐标时。

//Right Wall
if(Character.center.x>295){
    [CharacterMovingTimer invalidate];
}
//Left Wall
if(Character.center.x<30){
    [CharacterMovingTimer invalidate];
}
//Top Wall
if(Character.center.y<30){
    [CharacterMovingTimer invalidate];
}
//Bottom Wall
if(Character.center.y>587){
    [CharacterMovingTimer invalidate];
}

方法2:当物体与第二个物体相交时

if(CGRectIntersectsRect(Character.frame, RightWall.frame)){
 [CharacterMovingTimer invalidate];
 }
 if(CGRectIntersectsRect(Character.frame, LeftWall.frame)){
 [CharacterMovingTimer invalidate];
 }
 if(CGRectIntersectsRect(Character.frame, TopWall.frame)){
 [CharacterMovingTimer invalidate];
 }
 if(CGRectIntersectsRect(Character.frame, BottomWall.frame)){
 [CharacterMovingTimer invalidate];
 }

ViewController.h https://www.dropbox.com/s/56j7rokp4il5eul/ViewController_h.rtf?dl=0

ViewController.m https://www.dropbox.com/s/faqqbsnqb8o4se7/ViewController_m.rtf?dl=0

1 个答案:

答案 0 :(得分:0)

如果你想让角色在295停止,你需要在停止计时器后设置它们的位置。如果角色以每个计时器40个像素移动,则停止位置可以在295到335之间。

以您的第一个代码为例:

if(Character.center.x>295){
    Character.center = CGPointMake(295, Character.center.y);
    [CharacterMovingTimer invalidate];
}
//Left Wall
if(Character.center.x<30){
    Character.center = CGPointMake(30, Character.center.y);
    [CharacterMovingTimer invalidate];
}
//Top Wall
if(Character.center.y<30){
    Character.center = CGPointMake(Character.center.x, 30);
    [CharacterMovingTimer invalidate];
}
//Bottom Wall
if(Character.center.y>587){
    Character.center = CGPointMake(Character.center.x, 587);
    [CharacterMovingTimer invalidate];
}