mover los botones junto con la cámara en rápida

votos
0

Estoy trabajando en un juego donde mi jugador se mueve al presionar los botones, así que hice los botones hijos de la cámara. Sin embargo, cuando mis movimientos de cámara, los botones aparecen en la que debería, pero cuando pulso otra vez no pasa nada. Aquí hay un código sobre la cámara y los botones.

    override func didMove(to view: SKView) {

    physicsWorld.contactDelegate = self

    enumerateChildNodes(withName: //*, using: { node, _ in
        if let eventListenerNode = node as? EventListenerNode {
            eventListenerNode.didMoveToScene()
        }
    })


    world = childNode(withName: World)!
    player = (world.childNode(withName: player) as! Player)


    spikes = world.childNode(withName: spikes) as! SKSpriteNode
    spikes.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: spikes.size.width/2, height: spikes.size.height/2))
    spikes.physicsBody?.categoryBitMask = PhysicsCategory.Spikes
    spikes.physicsBody?.isDynamic = false

    self.addChild(cameraNode)
    camera = cameraNode
    cameraNode.position = CGPoint(x: 0 , y: 0)
    cameraToMove = cameraNode.position.y - player.position.y
    setupCamera()




    left = SKSpriteNode(imageNamed: leftButton)
    right = SKSpriteNode(imageNamed: rightButton)
    jump = SKSpriteNode(imageNamed: upButton)


    jump.size.width /= 2
    jump.size.height /= 2
    left.position = CGPoint(x: -self.size.width/2 + left.size.width, y: -self.size.height/2 + left.size.height)
    right.position = CGPoint(x: left.position.x + 2 * right.size.width, y:(camera?.position.y)! - self.size.height/2 + left.size.height)
    jump.position = CGPoint(x: self.frame.width/2 - jump.size.width, y:(camera?.position.y)! - self.size.height/2 + left.size.height)

    cameraNode.addChild(left)
    cameraNode.addChild(right)
    cameraNode.addChild(jump)


}

  override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch = touches.first
    let location:CGPoint = (touch?.location(in: self))!
    if left.contains(location){
        move(forTheKey: left)
        print(left)
    }
    else if right.contains(location){
        move(forTheKey: right)
        print(right)
    }
    else if jump.contains(location){
        player.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 240))

    }else{
        print(location)
    }


}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch = touches.first
    let location:CGPoint = (touch?.location(in: self))!
    if left.contains(location){
        player.physicsBody?.velocity = CGVector(dx: 0, dy: 0)
        print(left removed)
    }
    else if right.contains(location){
        player.physicsBody?.velocity = CGVector(dx: 0, dy: 0)
        print(right removed)
    }
    else if jump.contains(location){
        print(jump removed)
    }else{
        print(else)
        print(location)
        print(left.position)
        print(convert(left.position, from: cameraNode))
        print(convert(left.position, to: cameraNode))
        print(camera?.position.y)

        player.physicsBody?.velocity.dx = 0
    }
}

Como se puede ver que tengo una gran cantidad de impresiones y comprobar la posición del botón izquierdo. En el principio la posición Y está en -577. después de que los movimientos de cámara, el botón aparece donde debería en -450. pero no puede presionarla porque su posición se encuentra todavía en -577. También traté de actualizar su posición mediante la conversión de la posición de la cámara, pero no funcionó. Realmente agradecería si alguien puede ayudar.

Publicado el 27/11/2018 a las 16:51
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Desea utilizar el tacto, ya que es en relación con la cámara, no en relación con la escena, ya que los botones están en el sistema de coordenadas de la cámara.

cambiar let location:CGPoint = (touch?.location(in: self))!alet location:CGPoint = (touch?.location(in: self.camera))!

a continuación, los botones deben funcionar correctamente.

Respondida el 27/11/2018 a las 19:28
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more