我已经有我的categorybitmasks设置,希望是正确的,但我下面的代码应该有我的子弹和敌人接触,然后删除对方。什么也没发生,它们只是碰撞,仍然停留在屏幕上
func didBeginContact(联系人:SKPhysicsContact!){
var firstBody: SKPhysicsBody!
var secondBody: SKPhysicsBody!
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
firstBody = contact.bodyA
secondBody = contact.bodyB
}
else {
firstBody = contact.bodyB
secondBody = contact.bodyA
}
if (firstBody.categoryBitMask & bulletCategory) != 0 &&
(secondBody.categoryBitMask & enemyCategory) != 0 {
destroyEnemy(bullet: firstBody.node as! SKSpriteNode, enemy: secondBody.node as! SKSpriteNode)
}
}
func destroyEnemy(bullet: SKSpriteNode, enemy: SKSpriteNode) {
bullet.removeFromParent()
enemy.removeFromParent()
}
enemy.physicsBody?.categoryBitMask = CollisionTypes.enemy.rawValue
enemy.physicsBody?.contactTestBitMask = CollisionTypes.bullet.rawValue
enemy.physicsBody?.collisionBitMask = CollisionTypes.bullet.rawValue
bullet.physicsBody?.categoryBitMask=CollisionTypes.bullet.rawValuebullet.physicsBody?.contactTestBitMask=CollisionTypes.enemy.rawValuebullet.physicsBody?.collisionBitMask=CollisionTypes.enemy.rawValue
这本身不是一个答案,但评论有点长:
在您的didBegin
中,您有:
if (firstBody.categoryBitMask & bulletCategory) != 0 &&
(secondBody.categoryBitMask & enemyCategory) != 0 {
destroyEnemy(bullet: firstBody.node as! SKSpriteNode, enemy: secondBody.node as! SKSpriteNode)
如果firstBody是敌人,第二个是子弹会发生什么?当接触发生时,要运行的代码似乎不会触发。如果看不到你的分类比特掩码定义,我们就不知道,因为你似乎是按照分类比特掩码值的升序分配第一个和第二个身体。
您可以确认这是否与if
块中的另一个print
一起工作。
我从来没有真正喜欢过这种形式的< code>didBegin,我个人觉得这种风格更具可读性:
func didBegin(_ contact: SKPhysicsContact) {
print("didBeginContact entered for \(String(describing: contact.bodyA.node!.name)) and \(String(describing: contact.bodyB.node!.name))")
let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
switch contactMask {
case bulletCategory | enemyCategory:
print("bullet and enemy have contacted.")
let bulletNode = contact.bodyA.categoryBitMask == bulletCategory ? contact.bodyA.node : contact.bodyB.node
let enemyNode = contact.bodyA.categoryBitMask == enemyCategory ? contact.bodyA.node : contact.bodyB.node
destroyEnemy(bullet: bulletNode, enemy: enemyNode)
case playerCategory | enemyCategory:
// Handle player/Enemy collisions
default:
print("Some other contact occurred")
}
在本地MacOS应用程序的触摸栏中创建一个Popover弹出框 进程: 主进程 new TouchBarPopover(options) 实验功能 用途:创建新Popover弹出框 options Object label String (可选) - Popover按钮文本 icon NativeImage (可选) - Popover按钮图标 items TouchBar (可选) - 在Po
启用触摸保护 把 Yubikey-manager 安装在一个绝对路径:【译者注:homebrew 是 macOS 平台的包管理软件】 ❯ brew install libu2f-host libusb swig ykpers ❯ git clone git@github.com:Yubico/Yubikey-manager.git ❯ git submodule update --init --r
为本机macOS应用程序创建TouchBar布局 进程: 主进程 new TouchBar(options) 实验功能 用途:使用指定项目创建新的触摸条,使用 BrowserWindow.setTouchBar将 TouchBar加到窗口中 options - Object items (TouchBarButton | TouchBarColorPicker | TouchBarGroup |
触摸操作概述 浏览器的触摸 API 由三个部分组成。 Touch:一个触摸点 TouchList:多个触摸点的集合 TouchEvent:触摸引发的事件实例 Touch接口的实例对象用来表示触摸点(一根手指或者一根触摸笔),包括位置、大小、形状、压力、目标元素等属性。有时,触摸动作由多个触摸点(多根手指)组成,多个触摸点的集合由TouchList接口的实例对象表示。TouchEvent接口的实例对
触摸开关可以连接导电的物品,将它变成触摸开关。通过检测四色鳄鱼夹和地线的导通状态,能实现简单有趣的人机交互。 净重量:28.8g 体积:24×48×14mm 参数 触发电阻范围:<24MΩ 夹子大小:35mm 工作电压:DC 5V 抗跌落能力:1.5m 工作温度:-10℃~55℃ 工作湿度:<95% 特点 16种的输入组合 与其他模块丰富的离线互动效果 多样化的触发方式 定制化平口鳄鱼夹,大幅度减
多路触摸上包含多个触摸传感器,可以检测对应触点被触摸的状态. 当检测到对应触点被触摸时,触点对应的指示灯会亮起。同时你可以通过鳄鱼夹或导线,将触摸传感器上的触点引出,比如通过导线将触点与水果相连,这将大大扩宽该模块的应用场景。 该模块能够智能地调节阈值,每一次断电重启后,该模块都会重置阈值,确保触点连接各种导电材质后,依旧能够灵敏的检测触摸事件。你还可以使用软件中的编程积木进一步调节触摸传感器的灵