我正在使用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
答案 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];
}