Переместите SKSpriteNode на Touch, чтобы создать эффект кнопки - PullRequest
1 голос
/ 12 апреля 2019

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

class MainMenuScene: SKScene{
    let startGame = SKSpriteNode(imageNamed: "StartButton")
    override func didMove(to view: SKView) {


        let background = SKSpriteNode(imageNamed: "Menu") 
        background.size = self.size
        background.position = CGPoint(x: self.size.width/2, y:self.size.height/2)
        background.zPosition = 0
        self.addChild(background)


        startGame.position = CGPoint(x: self.size.width/2, y: self.size.height*0.6)
        startGame.zPosition = 1
        startGame.name = "startButton"
        self.addChild(startGame)


}

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

    for touch: AnyObject in touches{

        let pointOfTouch = touch.location(in: self)
        let nodeITapped = atPoint(pointOfTouch)


        if nodeITapped.name == "startButton" {

            let sceneToMoveTo = GameScene(size: self.size)
            sceneToMoveTo.scaleMode = self.scaleMode
            let myTransition = SKTransition.fade(withDuration: 0.5)
            self.view!.presentScene(sceneToMoveTo, transition: myTransition)
        }

    }
}








}

1 Ответ

0 голосов
/ 12 апреля 2019

Вы можете сделать свою логику в функции touchesEnded , а затем вы вызываете SKAction в своей кнопке, передавая логику moveToScene как завершение.Что-то вроде:

var shouldMoveToNewScene: Bool = False

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

for touch: AnyObject in touches{

    let pointOfTouch = touch.location(in: self)
    let nodeITapped = atPoint(pointOfTouch)

    shouldMoveToNewScene = nodeITapped.name == "startButton" ? True : False

}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    guard shouldMoveToNewScene, touces.count == 1 else { return }

    startButton.run(myAnimation, completion: {
        moveToScene()
    })
}

private func moveToScene() {
    //do your transition scene logic here
{

Я еще не пробовал, но, надеюсь, вы могли бы получить идею.

Если вы не знакомы с SKAction , вам следуетрассмотрите следуйте этому руководству .

...