Сделайте отскок мяча при нажатии - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь создать игру, в которой вы можете нажать на шар, используя SpriteKit.В данный момент я могу щелкнуть в любом месте экрана, и мяч поднимется вверх.

Я хочу, чтобы он двигался или отскакивал только тогда, когда я нажимаю на шар.Что я делаю не так?

import SpriteKit
import GameplayKit


class GameScene: SKScene {

    var ball = SKSpriteNode()
    var grass = SKSpriteNode()


    override func didMove(to view: SKView) {
        ball = (self.childNode(withName: "ball") as? SKSpriteNode)!

        let border = SKPhysicsBody(edgeLoopFrom: self.frame)
        border.friction = 0
        border.restitution = 1
        self.physicsBody = border
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        for t in touches { self.touchDown(atPoint: t.location(in: self)) }
    }
    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        for t in touches { self.touchUp(atPoint: t.location(in: self)) }
    }

    func touchDown(atPoint pos: CGPoint) {
        jump()
    }
    func touchUp(atPoint pos: CGPoint) {
        ball.texture = SKTexture(imageNamed: "football-161132_640")
    }


    func jump() {
        ball.texture = SKTexture(imageNamed: "football-161132_640")
        ball.physicsBody?.applyImpulse(CGVector(dx: Int.random(in: -5...5), dy: 80))
    }
}

1 Ответ

0 голосов
/ 17 февраля 2019

Несколько касаний:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in touches {
        let location = touch.location(in: self)
        if ball.contains(location) {
            jump()
        }
    }
}

Одно касание:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    if let touch = touches.first {
        let location = touch.location(in: self)
        if ball.contains(location) {
            jump()
        }
    }
}
...