- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我将 println()
放入我的 didBeginContact
时,没有任何打印。因此,我假设我的 didBeginContact 不起作用。为什么?我还有一个枚举(对撞机类型),其中列出了 Cup 和 Star 的原始值。
这是我的 GameScene 文件。
import Foundation
import SpriteKit
class PlayScene: SKScene, SKPhysicsContactDelegate {
let cup = SKSpriteNode(imageNamed: "cup")
override func didMoveToView(view: SKView) {
/* Setup your scene here */
self.physicsWorld.contactDelegate = self
self.backgroundColor = UIColor(red: 192, green: 192, blue: 192, alpha: 1)
cup.setScale(0.5)
cup.position = CGPointMake(self.size.width + cup.size.width / 2, self.size.height/2)
self.addChild(cup)
let actualDuration = 2.0
let actualY = size.height / 2
let actionMove = SKAction.moveByX(-550, y: 0, duration: actualDuration)
let reverseActionMove = actionMove.reversedAction()
let sequence = SKAction.sequence([actionMove, reverseActionMove])
let endlessAction = SKAction.repeatActionForever(sequence)
self.cup.physicsBody = SKPhysicsBody(rectangleOfSize: self.cup.size)
self.cup.physicsBody?.dynamic = false
self.cup.physicsBody?.categoryBitMask = ColliderType.Cup.rawValue
self.cup.physicsBody?.collisionBitMask = ColliderType.Star.rawValue
//Code to keep stars in screen
//let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
//borderBody.friction = 0
//self.physicsBody = borderBody
cup.runAction(endlessAction)
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
/* Called when a touch begins */
for touch: AnyObject in touches {
let star = StarNode.star(touch.locationInNode(self))
star.setScale(0.3)
self.addChild(star)
}
}
func didBeginContact(contact: SKPhysicsContact) {
println("test")
let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
switch contactMask {
case ColliderType.Star.rawValue | ColliderType.Cup.rawValue:
println("star with da cup")
default:
return
}
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
}
}
这是我的 StarNode 文件。
import Foundation
import UIKit
import SpriteKit
class StarNode: SKSpriteNode, SKPhysicsContactDelegate {
class func star(location: CGPoint) -> StarNode {
let sprite = StarNode(imageNamed:"star")
sprite.xScale = 0.075
sprite.yScale = 0.075
sprite.position = location
sprite.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "star"), size: sprite.size)
sprite.physicsBody?.dynamic = true
sprite.physicsBody?.categoryBitMask = ColliderType.Star.rawValue
sprite.physicsBody?.collisionBitMask = ColliderType.Cup.rawValue
if let physics = sprite.physicsBody {
physics.affectedByGravity = true
physics.friction = 0.12
physics.allowsRotation = true
physics.dynamic = true
physics.linearDamping = 0.75
physics.angularDamping = 0.75
sprite.name = "star"
}
return sprite
}
}
最佳答案
您需要将 contactTestBitMask
设置为您的 SKSpriteNodes。 collisionBitMask 仅说明哪些类别的物体可以与节点发生碰撞,但不调用 didBeginContact
方法。
self.cup.physicsBody?.contactTestBitMask = ColliderType.Star.rawValue
//Star
sprite.physicsBody?.contactTestBitMask = ColliderType.Cup.rawValue
A mask that defines which categories of bodies cause intersection notifications with this physics body.
关于Swift didBeginContact() 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28572175/
我有两个节点和一个 bool 值。很简单。当节点 A 联系节点 B 并且 bool 值为 0 时,什么也没有发生。但是,如果 bool 值为 1,则通过 didBeganContact 方法删除节点
这里是 swift(和编程)菜鸟。我正在 swift spriteKit 中制作一个简单的突破游戏。它正在工作,但现在我想为某些 block 添加“健康”,但遇到了一些问题。我搜索过谷歌,但什么也没找
所以我已经在这个游戏上工作了一段时间,所有的工作都按照我想要的方式进行,但是我已经在 didBeginContact 上停留了几天,我想我无法理解它它看起来不错,我检查了几个论坛并得到了几乎相同的结果
我已经浏览了所有我可以理解的示例,但没有任何内容与我的问题相关。我有 SKPhysicsContactDelegate 并且添加了 self.physicalsworld.contactDelegat
我的 didBeginContact 方法应该在球击中时移除我的砖 block Sprite 。但是,它没有发挥作用。当我运行它时,当我击中桨和击中砖 block 时,我会得到 NSLog“桨”。我已
知道为什么我的 didBeginContact 方法从不触发吗?球体和矩形实际上相互接触...... 这里我声明了两个类别 static const uint32_t rectangleCategor
当我将 println() 放入我的 didBeginContact 时,没有任何打印。因此,我假设我的 didBeginContact 不起作用。为什么?我还有一个枚举(对撞机类型),其中列出了 C
当我的两个 SKSpriteNode 接触时,didBeginContact 函数没有被调用: func didBegin(_ contact: SKPhysicsContact) { let
在我的游戏中,我有从一个点向前发射的激光。我使用此代码拉伸(stretch)激光 Sprite 并移动它以模拟更新函数中的运动: let height = size.height yScale +=
我正在尝试创建一个程序,无论我的宇宙飞船越过一个圆圈,它都会打印出一些东西,但是当我把宇宙飞船放在圆圈上时,它没有打印任何东西。我是否构建了错误的 didBeginContact 方法?我是否设置了错
我有 2 个 SKSpriteNode 需要检测其接触。我尝试了各种方法并查找了很多东西,但似乎无法得到答案。下面是我的代码。 controlCircle 是一个类级别的变量,因为它需要在其他方法中使
我有两个 sprite 节点,我已确保 self.size 和它们各自的物理体的大小相同,但我仍然遇到这样一个非常奇怪的行为: 这张照片是在检测到碰撞时拍摄的,我暂停了场景。为什么会这样? 这里是设置
我为每个想要相互交互的不同对象创建了一个 struct PhysicsCatagory struct PhysicsCatagory { static let Blade : UInt32 =
我正在制作一个需要我的 spriteNodes 发生碰撞的游戏。我遵循了一个教程,但它对我不起作用。 当我运行我的游戏并且两个对象发生碰撞时,输出监视器中没有 println("beginContac
在一款使用 Sprite Kit 以及 Sprite Kit 内置物理引擎中的接触检测功能的 iOS 游戏中,每当英雄与敌人接触时,我都会将英雄的生命值减一。这是通过 didBeginContact
假设两次接触同时发生。它们的 didBeginContact 函数调用会在完全相同的时间发生(我猜是在不同的线程中),还是一个会在另一个之后发生? 最佳答案 否 - 为场景中接触的每对节点调用 did
我是 swift 语言的新手,遇到了一些问题。我猜这是一个简单的错误,但无论如何我似乎找不到问题。我正在制作一个游戏。当你输了之后,我会在屏幕上创建一个重播按钮。单击后,我开始重置游戏。 我基本上重置
我正在解决 SpriteKit 的一些碰撞检测问题。我在 didBeginContact 中触发了正确的碰撞,这很棒。 现在我遇到了一个范围问题,我无法根据碰撞命中之一在场景中删除和添加子项。第一次检
func didBeginContact(contact: SKPhysicsContact) { if contact.bodyA.categoryBitMask == Physic
我一直在开发一款游戏,每次我的测试节点与我的检查节点接触时都必须执行测试。由于这两个节点是游戏中唯一检查碰撞的节点,因此我决定使用此方法来启动测试。 问题是当 2 个节点物理交叉时,我一直无法让碰撞发
我是一名优秀的程序员,十分优秀!