SpriteKit 奇怪的“PKPhysicsBody”崩溃

2024-04-14

我正在尝试实现一个简单的类别SKPhysicsBody这将使我能够将“完美弹跳”应用于物理体。

这将简单地做的是当perfectBouncing = YES将会发生以下情况:

restitution = 1.0

linearDamping = 0.0

friction = 0.0

但是,当我尝试使用我的实现(如下所示)时,我收到一个奇怪的崩溃,告诉我无法发送perfectBouncing消息发送至PKPhysicsBody,这是一个我从未引用过的类,并且在我的项目中也不存在,也不存在于 SpriteKit SDK 中。

是的,该类别正在被导入。

崩溃消息

-[PKPhysicsBody setPerfectBouncing:]: unrecognized selector sent to instance 0x7fa828f84610

*** First throw call stack:
(
    0   CoreFoundation                      0x000000010882b3f5 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x0000000107dbfbb7 objc_exception_throw + 45
    2   CoreFoundation                      0x000000010883250d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x000000010878a7fc ___forwarding___ + 988
    4   CoreFoundation                      0x000000010878a398 _CF_forwarding_prep_0 + 120
    5   Squash The Dot                      0x000000010785662c -[gameNode viewDidAnimateIn] + 1116
    6   Squash The Dot                      0x000000010783e709 -[lzyViewHandler initViewChild:] + 3305
    7   Squash The Dot                      0x000000010783d93d -[lzyViewHandler initViewChildren:] + 573
    8   Squash The Dot                      0x000000010785d3e0 __28-[splashVC viewDidAnimateIn]_block_invoke + 256
    9   SpriteKit                           0x000000010933837e _ZN9SKCAction25didFinishWithTargetAtTimeEP9SKCSprited + 44
    10  SpriteKit                           0x0000000109399638 _ZN9SKCSprite6updateEd + 170
    11  SpriteKit                           0x0000000109352dd4 -[SKScene _update:] + 119
    12  SpriteKit                           0x000000010936d299 -[SKView(Private) _update:] + 563
    13  SpriteKit                           0x000000010936ac2f -[SKView renderCallback:] + 829
    14  SpriteKit                           0x0000000109367cec __29-[SKView setUpRenderCallback]_block_invoke + 54
    15  SpriteKit                           0x0000000109394744 -[SKDisplayLink _callbackForNextFrame:] + 256
    16  QuartzCore                          0x00000001091f88f7 _ZN2CA7Display15DisplayLinkItem8dispatchEv + 37
    17  QuartzCore                          0x00000001091f87bf _ZN2CA7Display11DisplayLink14dispatch_itemsEyyy + 315
    18  CoreFoundation                      0x00000001087934e4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
    19  CoreFoundation                      0x00000001087930a5 __CFRunLoopDoTimer + 1045
    20  CoreFoundation                      0x00000001087563dd __CFRunLoopRun + 1901
    21  CoreFoundation                      0x0000000108755a06 CFRunLoopRunSpecific + 470
    22  GraphicsServices                    0x000000010be319f0 GSEventRunModal + 161
    23  UIKit                               0x000000010953f550 UIApplicationMain + 1282
    24  Squash The Dot                      0x00000001078550a3 main + 115
    25  libdyld.dylib                       0x000000010b6cb145 start + 1
)

类别实施

#import <SpriteKit/SpriteKit.h>

@interface SKPhysicsBody (lzySKPhysics)

// Enables perfect boucing by setting friction = 0, linearDamping = 0 and restitution = 1.
@property (nonatomic) BOOL perfectBouncing;

@end


@implementation SKPhysicsBody (lzySKPhysics)

-(BOOL) perfectBouncing {
    return (self.restitution == 1 && self.linearDamping == 0 && self.friction == 0);
}

-(void) setPerfectBouncing:(BOOL)perfectBouncing {
    self.restitution = perfectBouncing;
    self.linearDamping = !perfectBouncing;
    self.friction = !perfectBouncing;
}

@end

使用示例

hero = [[SKSpriteNode alloc] initWithColor:[SKColor blueColor] size:CGSizeMake(heroRadius*2, heroRadius*2)];

hero.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:heroRadius];
hero.physicsBody.perfectBouncing = YES;

任何想法这难以捉摸PKPhysicsBody是以及为什么我会发生这次崩溃?


在内部,Sprite Kit 为许多公共类提供了自定义类。在这种情况下,SKPhysicsBody 实际上创建了内部类 PKPhysicsBody 的实例。据推测,PK 代表“物理套件”。

这就是为什么你的类别不起作用,如果我记得正确的话,铸造也不会成功,因为 SKPhysicsBody 不是从 PKPhysicsBody 继承的,但如果我错了,你可以这样尝试:

((SKPhysicsBody)hero.physicsBody).perfectBouncing = YES;

无论如何,这里不需要类别。相反,您可以使用辅助类和类方法实现相同的效果,例如:

@implementation SKPhysicsHelper

+(BOOL) perfectBouncingWithBody:(SKPhysicsBody*)body {
    return (body.restitution == 1 && body.linearDamping == 0 && body.friction == 0);
}

+(void) setPerfectBouncing:(BOOL)perfectBouncing body:(SKPhysicsBody*)body {
    body.restitution = perfectBouncing;
    body.linearDamping = !perfectBouncing;
    body.friction = !perfectBouncing;
}

@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpriteKit 奇怪的“PKPhysicsBody”崩溃 的相关文章

  • 将 CALayer 旋转 90 度?

    如何旋转CALayer90度 我需要旋转所有内容 包括子图层和坐标系 Obj C theLayer transform CATransform3DMakeRotation 90 0 180 0 M PI 0 0 0 0 1 0 Swift
  • 应用程序未通过协同设计验证?

    我在提交 iPhone 申请时遇到问题 我看到了一些类似的问题 但没有找到答案 当我存档项目并单击 验证 时 收到错误消息 应用程序未通过协同设计验证 签名无效 或者未使用 Apple 提交证书进行签名 我假设我在协同设计部分做错了什么 我
  • Swift 中通过不同类调用委托方法

    我正在获取 JSON 菜单 一旦 JSON 返回 我想运行 menuReady 来更新表的内容在 SomeTableViewController 类中 但下面的代码似乎不起作用 AIM Run 菜单就绪 JSON 返回后更新内容 PROBL
  • 如何通过辅助功能 API 获取当前所选文本的全局屏幕坐标。

    我需要帮助来了解字典应用程序如何在任何应用程序上按 CMD CTRL D 时显示所选文本的以下弹出对话框 我想实施 我的可可应用程序具有相同的功能 我的应用程序将在后台运行 并显示有关所选文本的一些热键的建议 我已经实现了热键捕获 我只需要
  • 退出导航控制器

    我试图离开初始视图控制器 并进入空白视图控制器 这很好 但是这会使空白视图控制器也成为导航控制器的一部分 这不是我想要的 我想脱离视图控制器 在视图控制器中 我尝试退出 它会自行弹出 当我尝试视图中的方法时 将出现目标视图控制器 self
  • ActionScript、NetStream.Play.Failed iOS AIR 移动设备

    我正在尝试以类似于 Tiberiu Ionu Stan http stackoverflow com questions 2036107 aac mp4 not working in actionscript 3s netstream 的方
  • 设置 TableView setEditing 时无法选择 UITableViewCell

    我希望能够选择多行 如下所示的默认邮件应用程序 我有一个名为编辑的按钮 可以调用 self myTableView setEditing YES animated YES 编辑按钮成功显示单元格左侧的圆圈 如上所示的邮件应用程序 但是 当我
  • 如何使用 Objective-C 协议

    我需要将 Picker 选择的值继承到其他地方 我正在尝试下面的代码 但空值即将到来 请检查我哪里出错了 我必须继承在中传递的字符串值PickerView 请检查代码 选取器1 h import
  • iOS 以编程方式将 AVI 转换为 MP4 格式

    我的应用程序中有一个查询 因为我想将 AVI 格式的视频转换为 MP4 电影格式 所以有没有什么方法可以以编程方式执行此操作 任何代码片段将不胜感激 你需要使用AVAssetExportSession将视频转换为 mp4格式 下面方法转换
  • 正确的标头 php mysql blob 显示图像

    我正在尝试在我的 PHP 页面中显示来自 mysql blob 的图像 我知道这不是最佳实践 然后我会将其引入我的 iOS 应用程序中 我在设置页面标题时遇到问题 我认为需要将其设置为图像 所以 这显示了图像 但我不相信页眉是正确的 hea
  • 使用 Objective-C 进行 Windows 开发

    最近读了一篇关于 Objective C 的文章 我觉得它是一门相当简洁的语言 具有很多很酷的功能 我无意进行任何 iPhone 开发 但是我了解 GCC 能够编译 Objective C 代码 所以我想知道 Objective C 是 W
  • iOS AFNetworking downloadProgressBlock 计算返回负数

    我正在使用 AFNetworking 下载使用第三方类解析的数据 我之前曾多次使用 AFNetworking 执行类似的操作 但由于某种原因 当我调用 downloadProgressBlock 并进行计算以与我的进度条一起使用时 数字返回
  • 如何在 xcode 中使用相同的 nib 文件创建多个窗口

    我有一个使用表格视图作为界面的 iPhone 应用程序 每次用户点击其中一个表格单元格时 我想向用户显示另一个窗口 然而 我推入导航控制器的窗口的用户界面非常相似 因此 我决定制作一个 通用 nib 文件 以便在该通用 nib 文件的文件所
  • xcode 4 垃圾收集已删除?

    我正在学习 Xcode 和 Objective C 但是我正在阅读的书使用的是旧版本 3 2 的 Xcode 其中一章完全致力于内存和泄漏 说我需要通过 项目设置 gt 构建 打开垃圾收集 但是 我找不到垃圾收集设置 它已被删除还是我只是错
  • Apple 允许后台任务运行多长时间?

    我必须将一系列图像文件上传到数据库 因此 我偶然发现苹果后台执行指南 https developer apple com library ios documentation iPhone Conceptual iPhoneOSProgram
  • WKWebView:无需 Javascript 即可缩放PageToFit 行为

    如何获得scalesPageToFit显示在 HTML 内容中的行为WKWebView 不使用 JavaScript 在我们的例子中需要禁用 JS 抱歉没有发布任何代码 但我不知道如何实现这一目标 我所知道的和我找到的所有解决方案都是基于J
  • 如何在 UITableViewCell 上使用自定义初始值设定项?

    我有一个自定义 UITableViewCell 我想在我的表视图中使用它 这是我的单元格代码 class ReflectionCell UITableViewCell IBOutlet weak var header UILabel IBO
  • 如何使用libxml解析来解析xml数据

    这是一个我想使用libxml解析来解析的xml结构 我如何获取 campaign 标签的属性值 即ID对于 图像 标签 即url and size 如果我使用这些值 我可以提取 code 标签和 name 标签的值 static const
  • Dropbox API - 使用 Dropbox 作为服务器

    我想使用文件共享服务器来使某些文件在多台计算机上的应用程序的多个实例中保持最新和恒定 例如 例如 编写多人游戏 它将所有玩家的位置存储在文本文件中 并使用 Dropbox 之类的工具在所有应用程序中保持文本文件不变 每个应用程序实例都可以根
  • 在 PDFView 表单字段中配置键盘设置

    我正在开发一个应用程序 它从服务器加载 PDF 文件并在 PDFView 中显示这些 PDF 文件 这些文件包含用户要在其中键入内容的表单字段 这很好用 PDF 文件将用于教育环境 其中拼写应not可以自动更正并且预测文本应该not能得到的

随机推荐

  • PHP 致命错误

    当 PHP 出现致命错误时 有没有办法让代码继续 而不是退出 例如 我遇到超时致命错误 并且我希望每当它发生时就跳过此任务并继续执行其他任务 在这种情况下 脚本退出 有一种使用输出缓冲的 hack 可以让您记录某些致命错误 但是在发生致命错
  • 在WP7中调用普通的Web服务

    我有普通的 NET Web 服务 不是 WCF 服务 我已使用服务参考将此服务添加到我的 WP7 项目中 因为我们没有 通常我们会使用 添加服务引用 选项添加 WCF 服务 但这里我使用 添加服务引用 选项添加普通的 Web 服务 例如我有
  • python 3.5 中的 json.loads 和 Redis

    我使用 json dumps 创建了一个 JSON 对象 并在 Redis 列表中将其 RPUSH ed 当使用 LRANGE redis lrange 返回 JSON 时 我收到一个二进制字符串 b si 00 ff 所以 json lo
  • 如何将 ISO 8601 格式的日期值转换为 JavaScript 中的日期对象?

    我一直在尝试将日期值转换为更易读的格式 为此 我尝试使用 JavaScript 解析日期Date parse 方法 然而 这不适用于输入 例如 2007 09 21T14 15 34 058 07 00 我有 最终目标是输出一个日期字符串
  • Eclipse IDE Java 构建路径已更改。我选择哪个?

    我正在尝试遵循一些有关 Selenium 的教程 但此时遇到了困难 右键单击 项目 并选择属性 在 属性 对话框中 单击 Java 构建路径 单击库选项卡 然后 单击 添加外部 JAR 添加外部 JARS 按钮呈灰色且禁用 该对话框显示模块
  • pyside-rcc“dyld:库未加载:...”

    我是一个 python 和 Qt 新手 我在运行 pyside rcc 和 Pyrcc4 时遇到一些问题 问题不在于可执行文件的链接 而在于库问题 我不是 Unix 向导 可能也没有帮助 当我跑步时 pyside rcc我收到以下错误 dy
  • 在 LINQ 中查找相似记录

    我有以下 LINQ 查询 它将用于查找任何 相似 的货物 from c in cons group c by new c TripDate Value c DeliveryPostcode c DeliveryName into cg le
  • Firefox 在 SVG“使用”具有遮罩的元素上出现不透明度问题

    我最近注意到我的一张 SVG 图像在 Firefox 中查看时似乎失去了半透明性 我一直在追踪这个问题 它让我发现opacity不被服从时use元素 具体来说 有一个mask随附的 我能够使用fill opacity解决这个问题 但这并不理
  • 如何使用 Swift 更改 iOS 中 UIButton 的状态?

    我有六个按钮的 Objective C 工作代码 但我似乎没有找到如何使用 Swift 更改按钮的状态 那么如何让下面的代码在 Swift 中工作呢 self button2 setBackgroundImage UIImage image
  • 甲骨文对谷歌的诉讼对 Android 开发者意味着什么? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 什么是甲骨文对谷歌提起诉讼 http mashable com 2010 08 14 google rebuts oracle lawsuit inv
  • ConcurrentQueue .Net:多线程消费者

    我有一个非常基本的问题 更多地围绕以下概念ConcurrentQueue 队列是先进先出的 当多个线程开始访问时 我们如何保证先进先出呢 假设我添加了Apple Oranges Lemon Peach and Apricot 以该顺序 首先
  • Java 导出为 Jar 有错误 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 两个问题 1 当将java项目导出为JAR文件时 应用程序如何知道首先运行包中的哪个Class 我的应用程序特别要求 userInterfa
  • “建立安全 TLS 连接之前客户端网络套接字已断开”,节点 10

    当我向 google api 发送请求时 使用 axios 或仅使用 https 例如https www googleapis com blogger v3 blogs 2399953 key 我总是点击 在建立安全 TLS 连接之前 客户
  • 有没有一种方法可以在传统的代码调试意义上调试 Velocity 模板?

    我们在 Web 应用程序中大量使用 Velocity 虽然调试 Java 方面并确保正确填充 Velocity Context 很容易 但能够在合并步骤中逐步解析 VTL 设置断点等将非常有价值 是否有任何工具或者 IDE IDE 插件可以
  • 使用 ArCore 时是否可以捕获高分辨率图像?

    在我的应用程序中 我尝试在自定义相机视图中使用 ArCore 作为 相机助手 需要明确的是 我想在用户的相机中显示图像并让他捕获以下图像don t包含 AR 模型 据我了解 为了使用 ArCore 捕获图像 我必须使用 Camera2 AP
  • 使用pjax时,页面初始化javascript应该放在哪里?

    大多数时候 我会放入一些 javascript 代码 document ready在页面上做一些初始化工作 例如事件绑定等 但现在我想用pjax https github com defunkt jquery pjax https gith
  • 如何启动 mongodb shell?

    我使用的是MAC 我已经成功登录到服务器并使用以下命令启动服务器 mongod 然后它说 Thu Jul 14 01 50 41 db version v1 6 5 pdfile version 4 5 Thu Jul 14 01 50 4
  • 有没有办法阻止 avplayer 发送范围 http 标头字段

    如果您使用 AVPlayer 加载远程文件 它会发送一个 http 请求 请求头中包含一个范围字段 例如 Range bytes 0 8148096 我喜欢使用 SevenDigital 商业 API 来播放歌曲 但它们无法处理此 Rang
  • 在容易出现异常的代码中使用 va_list 是否安全?

    典型例子 void foo const char fmt va list args va start args fmt might throw might not who knows bar fmt args uh oh va end ar
  • SpriteKit 奇怪的“PKPhysicsBody”崩溃

    我正在尝试实现一个简单的类别SKPhysicsBody这将使我能够将 完美弹跳 应用于物理体 这将简单地做的是当perfectBouncing YES将会发生以下情况 restitution 1 0 linearDamping 0 0 fr