swift 4 два dpads со спрайтекитом - PullRequest
       70

swift 4 два dpads со спрайтекитом

0 голосов
/ 10 сентября 2018

Скриншот моей игры Я хочу создать игру (со Spritekit), в которой вы можете использовать левый dpad для перемещения игрока по карте тайлов, которая уже работает.С правильным вы можете нацелиться на противников, что тоже работает.Хотя я включил множественное касание, одновременно работает только один контроллер.

Джойстик означает то же, что и dpad.

    import SpriteKit
    import GameplayKit

    class GameScene: SKScene {

//These are just the touch functions

    //touch functions

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        for _ in touches {
            if touches.first!.location(in: cam).x < 0 {
                moveStick.position = touches.first!.location(in: cam)
            }
            if touches.first!.location(in: cam).x > 0 {
                shootStick.position = touches.first!.location(in: cam)
            }
        }
    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {     
        for _ in touches {
            if touches.first!.location(in: cam).x < 0 {
                moveStick.moveJoystick(touch: touches.first!)
            }
            if touches.first!.location(in: cam).x > 0 {
                shootStick.waponRotate(touch: touches.first!)
            }
        }
    }

    open override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
        for _ in touches {
            resetMoveStick()
            resetShootStick()
        }
    }

    open override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        for _ in touches {
            resetMoveStick()
            resetShootStick()
        }
    }



    //  update function
    override func update(_ currentTime: TimeInterval) {
        // Called before each frame is rendered

        let jSForce = moveStick.velocityVector
        self.player.position = CGPoint(x: self.player.position.x + jSForce.dx,
                                       y: self.player.position.y + jSForce.dy)
        cam.position = player.position

    }
}

1 Ответ

0 голосов
/ 10 сентября 2018

Как указал KnightOfDragon, вы используете .first. Это означает, что ваш код ищет первое касание в вашей сцене, а затем идет оттуда. Ваша игра не позволит вам использовать оба джойстика одновременно, потому что вы не позволите им использовать их одновременно.

Эти операторы if, которые вы используете в своих различных сенсорных функциях:

for _ in touches {
    if touches.first!.location(in: cam).x < 0 {
    }
    if touches.first!.location(in: cam).x > 0 {
    }
}

Должно выглядеть так:

for touch in touches {
    let location = touch.location(in: self)
    if location.x < 0 {
        moveStick.moveJoystick(touch: location)
    }
    if if location.x > 0 {
        shootStick.waponRotate(touch: location)
    }
}

Это должно исправить все ваши ошибки.

...