Я пытаюсь выполнить следующее на SKSpriteNode: Сделать это крупнее, Переместить его в новое место, Сделать его маленьким снова.Вложение SKActions, не использующее длительность ожидания
Однако код, кажется, все сразу запускает его, делая его небольшим, отменяя друг друга.
Вот код, созданный в Playground:
import PlaygroundSupport
import UIKit
import SpriteKit
var theirCard:SKSpriteNode
let CARDSHRINK_TIME = 5.0
let AICARDMOVE_SPEED = 2.5
let droppoint:CGPoint = CGPoint(x: 100,y: 100)
let sceneView = SKView(frame: CGRect(x:0 , y:0, width: 480, height: 320))
let scene = SKScene(size: CGSize(width: 480, height: 320))
sceneView.showsFPS = true
sceneView.presentScene(scene)
PlaygroundSupport.PlaygroundPage.current.liveView = sceneView
theirCard = SKSpriteNode(imageNamed: "card")
theirCard.name = "theircard"
theirCard.position = CGPoint(x: scene.size.width * 0.50, y: scene.size.height * 0.5)
scene.addChild(theirCard)
func getwait(makeBig big:Bool) -> SKAction {
let ret = SKAction.wait(forDuration: CARDSHRINK_TIME)
var action:SKAction
if big {
action = SKAction.scale(to: 1.9, duration: CARDSHRINK_TIME)
}
else {
action = SKAction.scale(to: 1.0, duration: CARDSHRINK_TIME)
}
theirCard.run(action, completion: { print("getwait \(big) done!") })
return ret
}
// We want to MAKE the node BIG, move it to the location, then make it SMALL again
let action1:SKAction = getwait(makeBig: true)
let action2:SKAction = SKAction.move(to: droppoint, duration: AICARDMOVE_SPEED)
let action3:SKAction = getwait(makeBig: false)
let seq:SKAction = SKAction.sequence([action1, action2, action3])
theirCard.run(seq, completion: {
print("animation complete!!!!")
})
мне нужно держать getwait, как это происходит потому, что в самом коде его метод класса карты (который является то, что theirCard на самом деле). Я упростил для тестирования в Playground
Обновление:
let action1 = SKAction.scale(to: 1.9, duration: CARDSHRINK_TIME)
let action2:SKAction = SKAction.move(to: droppoint, duration: AICARDMOVE_SPEED)
let action3 = SKAction.scale(to: 1.0, duration: CARDSHRINK_TIME)
Работы, как хотелось бы, но означало бы, что я не могу использовать метод из класса карты.
Спасибо, я дам ему выстрелили. Причина моего кода в том, что я бы назвал getwait(), который бы масштабировал карту сразу, как вы сказали. getwait() вернет действие ожидания, используемое последовательностью, чтобы дождаться завершения фактического масштабирования. – Johnne