-1

ボールとパドルがあります。ボールはパドルの上にあり、パドルに触れる必要がありますが、ボールはパドルに触れることはなく、パドルに到達する前に停止します。誰か助けてもらえますか?

ここに画像の説明を入力

import SpriteKit

class GameScene: SKScene ,SKPhysicsContactDelegate {

    let ballCategory:UInt32 = 0x1 << 0
    let bottomCategory:UInt32 = 0x1 << 1
    let paddleCategory:UInt32 = 0x1 << 2

    override init(size: CGSize){
        super.init(size: size)

        physicsWorld.contactDelegate = self


        let ball = SKSpriteNode(imageNamed: "ball")
        ball.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
        addChild(ball)

        ball.physicsBody = SKPhysicsBody(circleOfRadius: self.frame.size.width / 2)
        ball.physicsBody?.dynamic = true
        ball.physicsBody?.allowsRotation = false
        ball.physicsBody?.friction = 0
       // ball.physicsBody?.applyImpulse(CGVectorMake(2,-2))
        ball.physicsBody?.categoryBitMask = ballCategory
        ball.physicsBody?.contactTestBitMask = paddleCategory
        ball.physicsBody?.collisionBitMask = paddleCategory
        ball.physicsBody?.affectedByGravity = true

        let paddle = SKSpriteNode(imageNamed: "paddle")
        paddle.position = CGPointMake(CGRectGetMidX(self.frame), paddle.frame.size.height * 2)
        addChild(paddle)

        paddle.physicsBody = SKPhysicsBody(rectangleOfSize: paddle.frame.size)
        paddle.physicsBody?.affectedByGravity = false
        paddle.physicsBody?.dynamic = false
        paddle.physicsBody?.categoryBitMask = paddleCategory

    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }


    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    }

    func didBeginContact(contact: SKPhysicsContact) {
            print("touched")

    }

    override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
    }
}
4

2 に答える 2

0

ノードが接触している場所を特定する最善の方法は、物理演算をオンにすることです。

GameViewController.swiftを開き、次のコードを入力します。

skView.showsPhysics =  true
于 2016-03-01T14:45:37.060 に答える