【发布时间】:2015-02-06 15:14:04
【问题描述】:
我正在使用 Objective C 使用 Xcode 6.1 创建一个 iOS 应用程序
我正在尝试创建代码以在碰到另一个对象时停止移动对象(字符)。我尝试使用两种方法来做到这一点,但对象似乎停止在与我设置的不同点。以下是我尝试过的两种方法。我还在 Dropbox 上放了完整版代码的链接(链接如下)。
方法一:当物体到达特定坐标时。
//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];
}
方法二:当对象与第二个对象相交时
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
【问题讨论】:
-
角色移动的速度是多少?如果您希望角色在 295 处停止,则需要在停止计时器后设置其位置。如果角色以每个计时器刻度 40 像素的速度移动,则停止位置的范围可能在 295 到 335 之间。
-
角色每 0.3 秒移动 30 像素。
-
当你发生碰撞时,角色离你期望他的位置有多远?
-
对不起,问题是当角色靠近墙壁时,它会停在一个不是我设置的实际坐标的点上。请看一下这张图片,你可以看到角色停止的点是在它穿过物体之后。 dropbox.com/s/0vcebj725y6qpw5/Main_storyboard2.png?dl=0 它被设置为一旦他们接触就停止,当我尝试稍微改变坐标时,它永远不允许角色在那个确切的点停止。
-
好的,回到我原来的评论,我现在用它作为答案。
标签: ios objective-c xcode cgrectintersectsrect