#ios #swift #sprite-kit #xcode8
#iOS #swift #sprite-kit #xcode8
Вопрос:
Попытка заставить масштаб спрайта «PlayButton» продолжать масштабироваться вверх и вниз, чтобы подсказать пользователю прикоснуться к нему. Похоже, это не работает.
Это класс Menu:
import SpriteKit
class MenuScene: SKScene {
let ScalePBup = SKAction.scaleX(to: 300, y: 300, duration: 10)
let ScalePBdown = SKAction.scaleX(to: -300, y: -300, duration: 10)
//MARK: - Private Instance Variables
private let logo = GameLogo()
private let title = GameTitle()
private let playButton = PlayButton()
private let background = Background()
private let foreground = Foreground()
private let background2 = Background2()
//MARK: - Init
required init ?(coder aDecoder: NSCoder){
super.init(coder:aDecoder)
}
override init(size: CGSize){
super.init(size: size)
}
override func didMove(to view: SKView){
self.setup()
}
//MARK: - Setup
private func setup() {
self.backgroundColor = Colors.colorFromRGB(rgbvalue: Colors.background)
self.addChild(logo)
self.addChild(title)
self.addChild(playButton)
self.addChild(background)
self.addChild(foreground)
self.addChild(background2)
}
// MARK: - Update
override func update(_ currentTime: TimeInterval) {}
// MARK: - Touch Handling
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch:UITouch = touches.first! as UITouch
let touchLocation = touch.location(in: self)
if playButton.contains(touchLocation){
loadScene()
}
}
// MARK: - Load Scene
private func loadScene() {
let scene = GameScene(size: kViewSize)
let transition = SKTransition.fade(with: SKColor.black, duration: 0.5)
self.view?.presentScene(scene, transition: transition)
run(SKAction.repeatForever(SKAction.sequence([
SKAction.run(ScalePBup, onChildWithName: "playButton"),
SKAction.run(ScalePBdown, onChildWithName: "playButton")
])
))
}
}
Вот спрайт
import SpriteKit
class PlayButton: SKSpriteNode {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(texture: SKTexture?, color: UIColor, size: CGSize) {
super.init(texture: texture, color: color, size: size)
}
convenience init() {
let texture = GameTextures.sharedInstance.texture(name: SpriteName.playButton)
self.init(texture: texture, color: SKColor.white, size: texture.size())
setup()
}
private func setup() {
self.position = CGPoint(x: kViewSize.width / 2, y: kViewSize.height * 0.2)
}
}
Пожалуйста, дайте мне знать, если у вас есть какие-либо предложения! Спасибо!
Ответ №1:
В MenuScene удалите код:
run(SKAction.repeatForever(SKAction.sequence([
SKAction.run(ScalePBup, onChildWithName: "playButton"),
SKAction.run(ScalePBdown, onChildWithName: "playButton")
])
))
в кнопке воспроизведения класса добавить:
let ScalePBup = SKAction.scaleX(to: 300, y: 300, duration: 10)
let ScalePBdown = SKAction.scaleX(to: -300, y: -300, duration: 10)
func startPulse() {
run(SKAction.repeatForever(SKAction.sequence([ScalePBup,ScalePBdown])))
}
func removePulse () {
removeAllAction()
}
в MenuScene
override func didMove(to view: SKView){
self.setup()
playButton.startPulse()
}