如何更改 didbegincontact 函数以允许精灵与地面交互。 (精灵套件)
how to change the didbegincontact function to allow sprite to interact with ground. (sprite kit)
嗨,我需要我的玩家(精灵)与我的地面互动。如果没有 didbegincontact 函数覆盖并导致游戏结束,我只想在玩家与帖子发生碰撞时游戏结束。请在下面找到代码。
class GameScene: SKScene, SKPhysicsContactDelegate {
override func didMoveToView(view: SKView) {
self.physicsWorld.contactDelegate = self
let playerGroup: UInt32 = 1
let PostGroup: UInt32 = 2
let groundGroup: UInt32 = 3
var gameOver = "1"
//player
player.physicsBody?.categoryBitMask = playerGroup
player.physicsBody?.collisionBitMask = PostGroup
player.physicsBody?.contactTestBitMask = postGroup
//ground.
ground.physicsBody?.categoryBitMask = groundGroup
//post.
post.physicsBody?.categoryBitMask = PostGroup
post.physicsBody?.contactTestBitMask = playerGroup
func didBeginContact(contact: SKPhysicsContact!) {
println("contact")
println("gameOver")
gameOver = "1"
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
if (gameOver == "0") {
player.physicsBody?.velocity = CGVectorMake (0, 0)
player.physicsBody?.applyImpulse(CGVectorMake(0, 25))
在 didBeginContact
内部,您需要处理冲突(这是位掩码的用途)
SKPhysicsContact
有两个属性:bodyA
和bodyB
,这是碰撞中使用的两个物体。这些主体中的每一个都有您之前设置为 属性 的位掩码。然后,您可以使用位掩码来判断 bodyA
/bodyB
是接地的还是 post,然后您可以以不同的方式处理它们。
有详细说明here需要的话
嗨,我需要我的玩家(精灵)与我的地面互动。如果没有 didbegincontact 函数覆盖并导致游戏结束,我只想在玩家与帖子发生碰撞时游戏结束。请在下面找到代码。
class GameScene: SKScene, SKPhysicsContactDelegate {
override func didMoveToView(view: SKView) {
self.physicsWorld.contactDelegate = self
let playerGroup: UInt32 = 1
let PostGroup: UInt32 = 2
let groundGroup: UInt32 = 3
var gameOver = "1"
//player
player.physicsBody?.categoryBitMask = playerGroup
player.physicsBody?.collisionBitMask = PostGroup
player.physicsBody?.contactTestBitMask = postGroup
//ground.
ground.physicsBody?.categoryBitMask = groundGroup
//post.
post.physicsBody?.categoryBitMask = PostGroup
post.physicsBody?.contactTestBitMask = playerGroup
func didBeginContact(contact: SKPhysicsContact!) {
println("contact")
println("gameOver")
gameOver = "1"
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
if (gameOver == "0") {
player.physicsBody?.velocity = CGVectorMake (0, 0)
player.physicsBody?.applyImpulse(CGVectorMake(0, 25))
在 didBeginContact
内部,您需要处理冲突(这是位掩码的用途)
SKPhysicsContact
有两个属性:bodyA
和bodyB
,这是碰撞中使用的两个物体。这些主体中的每一个都有您之前设置为 属性 的位掩码。然后,您可以使用位掩码来判断 bodyA
/bodyB
是接地的还是 post,然后您可以以不同的方式处理它们。
有详细说明here需要的话