Swift 中如何知道哪个 SKSpriteNode 受到碰撞检测的影响?

2023-12-02

情况:我的 iOS 屏幕上有两艘或更多艘飞船。两者都有不同的属性,如名称、大小、生命值和得分。它们显示为SKSpriteNodes并且每个都添加了一个physicsBody.

目前,这些额外的属性是扩展的变量SKSpriteNode class.

import SpriteKit    
class ship: SKSpriteNode {
            var hitpoints: Int = nil?
            var score: Int = nil?

        func createPhysicsBody(){
            self.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width / 2)
            self.physicsBody?.dynamic = true
            ...
        }
    }

在这个“游戏”中,你可以向这些船只射击,一旦子弹击中船只,你就会获得积分。通过碰撞检测到“撞船”。

func didBeginContact(contact: SKPhysicsContact){    
    switch(contact.bodyA.categoryBitMask + contact.bodyB.categoryBitMask){
        case shipCategory + bulletCategory:
            contactShipBullet(contact.bodyA, bodyB: contact.bodyB)
            break;
        default:
            break;
    }
}

Problem:碰撞检测仅返回一个物理主体,我不知道如何获得扩展SKSpriteNode类就通过这个PhysicsBody。

想法:这是正确的扩展方式吗SKSpriteNode让我的物品像一艘船一样栩栩如生?当我将一艘船添加到屏幕上时,它看起来像:

var ship = Ship(ship(hitpoints: 1, score: 100), position: <CGPosition>)
self.addChild(ship)

或者这只是一种错误的方法,有更好的方法可以通过碰撞检测找出哪个具有统计数据的对象被子弹击中?

这个问题和我的另一个问题类似question- 我只是想从更广泛的意义上问这个问题。


The SKPhysicsBody有财产node哪一个是SKNode与身体有关。你只需要执行一个conditional cast给你的Ship class.

    if let ship = contact.bodyA.node as? Ship {
        // here you have your ship object of type Ship
        print("Score of this ship is: \(ship.score)!!!")
    }

请注意,Ship节点可能是与bodyB so.

    if let ship = contact.bodyA.node as? Ship {
        // here you have your ship...
    } else if let ship = contact.bodyB.node as? Ship {
        // here you have your ship...
    }

希望这可以帮助。

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

Swift 中如何知道哪个 SKSpriteNode 受到碰撞检测的影响? 的相关文章

  • 将数据从子模态 VC 传递到父视图控制器的最佳方法?

    将数据从子模式视图传递到父视图控制器的最佳方法是什么 我的 iPad 应用程序上有一个子模式登录屏幕 我想将用户信息传回父级分割视图控制器 我正在考虑使用 NSNotification 但我不确定这是否是将数据传递回父级的最简单 最有效的方
  • 动态更新 UIAlertView 消息和换行符问题

    我需要在 UIAlertView 的消息中显示多行文本 我尝试过添加 n 但没有效果 它仍然显示 这是一个示例 但是 如果我将 iPhone 切换为横向模式 它会按照我的预期显示该消息 然后 如果我切换回纵向模式 它也会正确显示 更新 经过
  • 滚动高图图表

    这是我的问题 我正在使用phonegap框架来开发一个混合应用程序 并且我需要这个应用程序具有我决定使用highcharts库的图表 问题是 我似乎无法在触摸图表后滚动 至少在触摸图像的选定部分内部时 我想要做的是防止图表发生任何事件 并显
  • 苹果的外部配件(蓝牙)仅适用于 MFI 设备? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的学士论文的目标是通过蓝牙适配器将光串行设备连接到 iPad 目前我正在努力应对苹果的限制 我经常在网上看到我可以使用支持的配置文件 h
  • 自定义 UIPopoverController 视图背景和边框颜色

    是否可以更改弹出视图的边框颜色 导航栏样式 颜色和箭头样式 颜色 如果是这样 怎么办 如果有一些示例代码可用 那就太好了 iOS 7以上 可以更改backgroundColor of UIPopoverController这会影响导航背景颜
  • Alamofire 仅在 GET 请求上出现请求错误

    我正在努力将我的项目从 AFNetworking 转移到 Alamofire 真的很喜欢这个项目 POST 请求工作得很好 但是 我在尝试发出 GET 请求时收到此错误 这是一些示例代码 class func listCloudCrednt
  • 新的 iTunes 连接界面错误“您必须选择一个版本”

    当尝试将我的新应用程序提交到应用程序商店时 我注意到苹果已经更改了其网站界面 更新元数据和关键字并点击 提交审核 后 我收到错误 您必须选择一个版本 通过谷歌搜索 我没有找到答案 但是 我注意到 构建 标题旁边有一个加号按钮 您必须在其中选
  • 了解 malloc_history 转储

    如果您曾经问 过如何调试 Objective C 中的释放 分配问题 您将遇到这些可以帮助跟踪问题的环境设置 NSZombieEnabled 释放后保留对象 以便您可以获得指针等 MallocStackLogging 保留对象历史记录以供以
  • 有没有办法以编程方式选择 Segue 锚点?

    假设我有一个 Storyboard 其中包含一个包含按钮的视图 当用户按下此按钮时 会出现一个弹出窗口 因此 我需要使用 Xcode 将 Segue 拖动到按钮来设置锚点 然后执行使用标识符执行Segue 所以 我的问题是 有没有办法以编程
  • iOS:接收“304 Not Modified”响应时 AVPlayerItem 中的错误

    这是一个非常奇怪的错误 我有一个 tableView 每个单元格都使用AVPlayer从远程服务器流式传输视频 想象一下类似 Vine 的时间线 因此 当我滚动时 重复使用的单元格会使用新视频重新配置播放器 问题是 如果我非常快地来回滚动
  • 更改 UIAlertController 的标题字体大小

    我正在尝试更改标题fontSize in an UIAlertController 但我无法管理如何设置我的NSMutableAttributedString to the title 财产 所以我一直在创造NSMutableAttribu
  • 到底什么是哈希冲突

    HashMap 中的哈希冲突或哈希冲突并不是一个新主题 我遇到过几个博客和讨论板 以模糊且详细的方式解释如何产生哈希冲突或如何避免它 我最近在一次采访中遇到了这个问题 我有很多事情要解释 但我认为很难准确地给出正确的解释 抱歉 如果我的问题
  • 为什么使用 UIImageJPEGRepresentation 方法通过 writetofile 保存的 .jpeg 文件大小比 ios 中的 UIImageWriteToSavedPhotosAlbum 大

    我正在尝试拯救一个UIImage设备中 jpeg 文件的对象 我正在使用这段代码 void saveImageToDocumentsDirectory UIImage mimage withFileName NSString fileNam
  • 核心数据在没有明显原因的情况下恢复到之前的状态

    基于 Core Data 的 iOS 应用程序的一些客户报告称 他们偶尔会丢失数据 这些报告非常奇怪 这就是我想询问您对此的看法的原因 客户报告说 当他们在一段时间 几分钟 几小时或第二天 后重新打开应用程序时 他们的一些数据会丢失就像底层
  • 如何为 App Store 添加关联域? - App Store Connect 的 app-ads.txt 文件

    如您所知 Admob 向发布商发送了有关 app ads txt 文件的电子邮件 Admob 在电子邮件中表示 因此 我们邀请您仔细检查您的 app ads txt 文件 如果 您已经在发布日期之前发布了一份 文件 应发布在列出的网站的根目
  • 可以转换为 Swift 5

    我在 Xcode 10 2 中收到此警告 可以转换为 Swift 5 当我单击此错误时 它会打开此窗口 当我们点击Next会发生什么 swift 的当前版本是 swift5 仅在 Xcode 10 2 中受支持 而您在 Xcode 10 2
  • 以编程方式进行排序时检索 ViewController 堆栈

    static func showMenuView parentVC UIViewController let storyboard UIStoryboard name Main bundle nil let resultController
  • UIView 子类中使用的 CAShapeLayer 不起作用

    我尝试了几个小时 用 CAShapeLayer 在 UIView 周围获得虚线边框 但我没有显示它 ScaleOverlay h import
  • 如何使用 UISlider 以及如何将滑块设置为特定值?

    我是第一次使用 UIslider 首先我想知道如果值的范围是 0 到 10 如何获取滑块位置的值 其次 我希望我的滑块设置为 5 个不同的值 如 1 2 3 4 5 slider should not set between the lab
  • 播放声音无延迟 iOS

    我找不到如何以低延迟播放真实声音的方法 我尝试使用 AVFoundation 音频播放器 巨大的延迟大约 500 毫秒 所以我尝试创建系统声音 如果运气不好 延迟大约为 200 毫秒 虽然不多 但对我来说没有用 我最多需要 50 毫秒 确保

随机推荐

  • FFmpeg从帧OpenCV python将视频流传输到rtmp

    在工业项目的背景下 我开发了一个实时应用程序来使用人工智能算法检测人员 在本地 我使用使用帧操作的 OPENCV 获取并显示视频 目的是实现从Opencv的帧到rtmp服务器的流视频 FFmpeg 似乎是一个很好的视角 然而 通常流是从 m
  • 无法在 Mac OS X 10.7 Lion 上构建 PIL

    我正在 Mac OS X 10 7 上构建 PIL 1 1 7 但收到此错误 running build running build py running build ext using frameworks at System Libra
  • 动态搜索 TreeSet 中的记录

    我正在使用 swing 和 awt 库用 Java 编写通讯录应用程序 该应用程序由一个 JList 组成 该 JList 使用 TreeSet 作为抽象列表模型 TreeSet 用于名为 Contact 的类 该类具有私有比较器类 可根据
  • Android - 如何压缩或缩小图像?

    ImageButton avatarButton ImageButton findViewById R id ImageButton Avatar avatarButton setImageResource R drawable avata
  • 无法删除 Apple WWDRC 证书

    最近苹果发布公告 据此 中间证书已于 2 月 14 日过期 必须手动下载 并应替换系统钥匙串中较旧的过期证书 I am unable to delete the existing certificate from the Keychain
  • Google 地理编码 - 获取地址和坐标

    这就是我所追求的 有人告诉我这是不可能的 但我还不会放弃 假设用户在我的位置搜索框中输入 伦敦 并单击 地理编码 我可以获得该位置的坐标 类似于此示例 http gmaps samples v3 googlecode com svn tru
  • LINQ to Entities 仅支持无参数构造函数和初始值设定项

    parcelas from docuRec in Dados DOCUREC where docuRec CODALUNO codAluno docuRec CODESCOLA codEscola configBoleto DtVencim
  • Google Places API 相关

    我正在尝试从我的本地主机计算机执行获取请求 并且我的应用程序将保留在本地主机上 以获取有关某个地点的一些信息 但是 由于 CORS Google Places API 和 或我的 Chrome 不允许我执行此请求 XMLHttpReques
  • 如何使用ajax jquery asp.net mvc访问和显示数据库中的数据

    我正在尝试从数据库中获取数据并使用 ajax 和 jquery 将其显示在页面中 我是这个平台的新手 所以任何人都可以帮助我 模型 public class EmployeeModel public int EmpId get set pu
  • 如何从代码中获取PCRE(与PHP捆绑在一起)的版本?

    有什么方法可以获取版本 和发布日期 PCRE从 PHP 代码与 PHP 捆绑并将其存储到变量中 我可以使用它找到它phpinfo 但找不到任何其他方法来直接从代码获取该值 过去几个小时我试图找到解决方案 但毫无希望 到目前为止 我可以在变量
  • 使用 C++/Boost 通过代理执行简单的 HTTP 请求?

    我是 Boost 的新手 我唯一通过使用库的代理进行冲浪的经验是使用 NET 这对于此目的来说非常方便 我现在尝试通过 HTTP 代理执行简单的 HTTP 请求 有没有直接使用 boost 的简洁方法 我的代理使用 NTLM 身份验证 不
  • 占位符在 IE10 中不起作用

    html div class div input div
  • 如何在flutter中使用带有url编码主体的http.post下载文件?

    我想构建一个网络应用程序来使用 http post 方法在 flutter 中下载 pdf 文件 我已经在互联网上搜索了它 但我仍然无法下载该文件 我已经在邮递员中尝试过使用原始 json 然后发送和下载 它可以工作 但不能在颤振中做到这一
  • ASP.NET Web API 仅在某些服务器上为 PUT 返回 404

    我已经编写了一个使用 ASP NET MVC Web API 的网站 一切都运行良好 直到我将其放在临时服务器上 该网站在我的本地计算机和开发网络服务器上运行良好 开发服务器和登台服务器都是 Windows Server 2008 R2 问
  • Caliburn.Micro:如何将 Conductor.Collection.AllActive 的特定项目绑定到 ContentControl

    我的目标是在 ShellView 的网格中显示 4 个不同的活动 ViewModel 问题是我无法弄清楚如何将 ContentControl 连接到 Conductor 项目中的特定项目 他的事怎么办 这是我正在尝试做的事情的简化版本 解决
  • 按值组的连续日期范围对行进行分组

    考虑一些表T 订购Col1 Col2 Date1 Date2 Col1 Col2 Date1 Date2 rate ABC 123 11 4 2014 11 5 2014 90 ABC 123 11 4 2014 11 6 2014 55
  • 用C++制作一个倒计时器

    我有一个控制台应用程序 旨在只在 Windows 上运行 它写在C 有什么办法可以等待60秒 and 显示剩余时间在屏幕上 然后继续代码流 我尝试了互联网上的不同解决方案 但没有一个有效 它们要么不起作用 要么无法正确显示时间 Please
  • Windows 7上Android Studio安装失败,找不到JDK

    我下载了 Android Studio 并尝试启动该程序 它在 Windows 7 64 位和 Java 1 7 上运行 在安装过程中 检测到我的 Java 1 7 安装的其余部分顺利进行 但是 当尝试从桌面图标启动应用程序时 没有任何反应
  • 使用 DotNetZip 从 zip 中提取特定文件夹

    我已经搜索了示例 但似乎找不到涉及提取某个文件夹的 DotNetZip 场景 我正在尝试从 zip 文件中提取一个名为 CSS 的文件夹 它是 zip 文件内的顶级文件夹 这是我到目前为止的代码 using ZipFile zip1 Zip
  • Swift 中如何知道哪个 SKSpriteNode 受到碰撞检测的影响?

    情况 我的 iOS 屏幕上有两艘或更多艘飞船 两者都有不同的属性 如名称 大小 生命值和得分 它们显示为SKSpriteNodes并且每个都添加了一个physicsBody 目前 这些额外的属性是扩展的变量SKSpriteNode clas