【问题标题】:Error colliding Images method in Xcode/iOS在 Xcode/iOS 中碰撞图像方法时出错
【发布时间】: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


【解决方案1】:

如果您希望角色在 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];
}

【讨论】:

  • 感谢您的回答,但这仍然无法正常工作,同样的问题正在发生,在对象实际碰撞之前或之后识别出碰撞。可能与我的设置而不是我的代码有关吗?
  • 您能否发布一个新的屏幕截图来说明现在发生的事情?
  • 而且,鉴于 iPhone 6 的屏幕宽度为 375,是什么让您认为正方形不是 295?
  • 当我将坐标数增加到 300 时,它会停在同一点。即使数字是 305,它仍然会停在完全相同的点。
  • 停止时注销 x。我猜你的陈述是不正确的,你只是没有注意到 5 或 10 像素的变化。
猜你喜欢
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多