>

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

    다중 터치 :

    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()
            }
        }
    }
    
    

  • 이전 node.js - jest로 sequelizejs 단위 테스트에서 유효성 검사 오류를 확인하는 방법은 무엇입니까?
  • 다음 css - 높이를 지정하지 않고 두 요소를 서로의 위에 배치하는 방법은 무엇입니까?