精灵套件:联系不工作

时间:2015-06-16 12:50:48

标签: ios sprite-kit

我正在尝试制作一个简单的游戏,这个问题首先发生,我的球拍可以触球,但现在它无法做到这一点, 这段代码也应该给我消息或在模拟器中,但它没有显示任何想法?

import SpriteKit

class GameScene: SKScene , SKPhysicsContactDelegate{

var istouchingpaddle = false

let ballcatagery:UInt32 = 0 * 1 << 0
let paddlecategary :UInt32 = 0 * 1 << 1


override func didMoveToView(view: SKView) {
    /* Setup your scene here */

    let border = SKPhysicsBody(edgeLoopFromRect: self.frame)

    border.friction = 0
    self.physicsBody = border
    self.physicsWorld.gravity = CGVectorMake(0,-9.8)
    self.physicsWorld.contactDelegate = self
    let ball = childNodeWithName ("ball") as SKSpriteNode
    ball.physicsBody?.applyImpulse(CGVectorMake(30, -30))
    ball.physicsBody?.allowsRotation = false
    ball.physicsBody?.restitution = 1

    ball.physicsBody?.linearDamping = 0
    ball.physicsBody?.angularDamping = 0



    ball.physicsBody!.categoryBitMask = ballcatagery
    let paddle = childNodeWithName("paddle") as SKSpriteNode
    paddle.physicsBody!.categoryBitMask = paddlecategary
    ball.physicsBody?.contactTestBitMask = paddlecategary




}

func didBeginContact(contact: SKPhysicsContact) {

    if contact.bodyA.categoryBitMask == ballcatagery && contact.bodyB.categoryBitMask == paddlecategary{

            println("working ")
    }

}

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    /* Called when a touch begins */
    var touch = touches.anyObject() as UITouch
    var location  = touch.locationInNode(self)
    if let body = self.physicsWorld.bodyAtPoint(location){
    if body.node!.name == "paddle" {

        istouchingpaddle = true
    }
    }


}

override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {

    if istouchingpaddle{
    var touch = touches.anyObject() as UITouch
    var location  = touch.locationInNode(self)
    var prevlocation = touch.previousLocationInNode(self)
    var paddle = childNodeWithName("paddle") as SKSpriteNode
    var position = paddle.position.x + (location.x - prevlocation.x)
    position = max(position,paddle.size.width/2)
    position = min(position, size.width - paddle.size.width/2)



    paddle.position = CGPoint(x: position, y: paddle.position.y)


            }
}


override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
    istouchingpaddle = false
}
override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */
} }

1 个答案:

答案 0 :(得分:0)

如果我改变定义类别的方式,我可以用你的代码产生好的结果。尝试设置如下类别:

{{1}}

我可以发给你整个代码,但你应该对此很好。