在 Xcode/iOS 中碰撞图像方法时出错

Posted

技术标签:

【中文标题】在 Xcode/iOS 中碰撞图像方法时出错【英文标题】:Error colliding Images method in 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 它被设置为一旦他们接触就停止,当我尝试稍微改变坐标时,它永远不允许角色在那个确切的点停止。 好的,回到我原来的评论,我现在用它作为答案。 【参考方案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 像素的变化。

以上是关于在 Xcode/iOS 中碰撞图像方法时出错的主要内容,如果未能解决你的问题,请参考以下文章

图像不会在 Xcode iOS 模拟器中加载

XCode - 图像上触摸事件的确切相对坐标 - iOS

将 UIImageView 和覆盖的 UIView 保存为图像(xcode/iOS)

xcode ios - 如何使图像适合不同的屏幕尺寸

导航栏 rightbaritem 图像按钮错误 iOS 11

iOS滑块的默认拇指图像大小?