Swift - вызов SKAction (в классе) с кнопки IBAction

Я новичок в Swift - после долгих поисков мне нужна помощь профессионалов:D

Планируя небольшое приложение IOS со Swift, это структура:

  • GameViewcontroller
  • GameScene

В GameScene я поместил небольшое изображение:

class GameScene: SKScene {
private var tanzschuhR: SKSpriteNode!
override func didMove(to view: SKView) {

    self.size = CGSize(width: 1024, height: 1024)
    self.backgroundColor = .gray
    self.scaleMode = .aspectFill

    let startPt = CGPoint(x: 500, y: 400)
    tanzschuhR = SKSpriteNode(imageNamed: `SchuhR`)
    tanzschuhR.position = startPt
    tanzschuhR.zPosition = 1

    self.addChild(tanzschuhR)

    func swingPattern1() {
        // move it
        let negDelta = CGVector(dx: -50, dy: -50)
        let action = SKAction.move(by: negDelta, duration: 4)
        tanzschuhR.run(action)
    }
}
}

Сейчас я просто хочу запустить функцию swingPattern1() с кнопки IBAction в GameViewController, чтобы начать движение изображения, синхронизированного с воспроизводимым звуком.

Это часть кнопки:

@IBAction func playIt(_ sender: UIButton) {
    playMultipleSound()
// no idea to call the function swingPattern1()
// always get an error
}

Итак, кто-нибудь может мне помочь?

Как вызвать эту функцию, если кнопка нажата?

Или есть другой, лучший способ запустить аудио и движение, нажав кнопку?

Большое спасибо за вашу помощь...


ОБНОВИТЬ:

Я поместил вар в IBAction:

@IBAction func playIt(_ sender: UIButton) {
    playMultipleSound()
    let gameScene = GameScene()
    gameScene.swingPattern1()

}

Не знаю, правильный ли это синтаксис - извините...:D

После BUILD&RUN я получаю эту ошибку:

введите описание изображения здесь

Приложение останавливается...

1 ответ

Во-первых, двигаться swingPattern1 вне didMove(to view: SKView)

class GameScene: SKScene {
    private var tanzschuhR: SKSpriteNode!
    override func didMove(to view: SKView) {

        self.size = CGSize(width: 1024, height: 1024)
        self.backgroundColor = .gray
        self.scaleMode = .aspectFill

        let startPt = CGPoint(x: 500, y: 400)
        tanzschuhR = SKSpriteNode(imageNamed: `SchuhR`)
        tanzschuhR.position = startPt
        tanzschuhR.zPosition = 1

        self.addChild(tanzschuhR)
    }

    func swingPattern1() {
        // move it
        let negDelta = CGVector(dx: -50, dy: -50)
        let action = SKAction.move(by: negDelta, duration: 4)
        tanzschuhR.run(action)
    }
}

Тогда, по вашему мнению, контроллер...

@IBAction func playIt(_ sender: UIButton) {
    playMultipleSound()

    // Assuming you already have a var gameScene: GameScene
    gameScene.swingPattern1()
}
Другие вопросы по тегам