将 SKSpriteNode 移动 Y - Swift 2 + SpriteKit
Posted
技术标签:
【中文标题】将 SKSpriteNode 移动 Y - Swift 2 + SpriteKit【英文标题】:Move SKSpriteNode by Y - Swift 2 + SpriteKit 【发布时间】:2015-12-25 01:59:50 【问题描述】:我正在开发一款 2D 游戏,我正在使用 Swift 和 SpriteKit。首先,我开始创建动画对象并向下移动。为了创建这些“对象”,我使用了 Spaceship(Xcode 的资产图像)。
查看我的代码:
import SpriteKit
class GameScene: SKScene
var spaceship = SKSpriteNode()
var screenSize:CGSize!
var gameStarted:Bool = false
var moveAndRemove = SKAction()
override func didMoveToView(view: SKView)
/* Setup your scene here */
screenSize = self.frame.size
self.createSpaceship()
func createSpaceship() -> Void
spaceship = SKSpriteNode()
spaceship.texture = SKTexture(imageNamed: "Spaceship")
spaceship.size = CGSize(width: 70, height: 100)
spaceship.setScale(1.0)
spaceship.position = CGPoint(x: screenSize.width / 3, y: screenSize.height - 75)
spaceship.zPosition = 1
self.addChild(spaceship)
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
if gameStarted == false
gameStarted = true
let spawn = SKAction.runBlock () in
self.createSpaceship()
let delay = SKAction.waitForDuration(1.5)
let spawnDelay = SKAction.sequence([spawn, delay])
let spanDelayForever = SKAction.repeatActionForever(spawnDelay)
self.runAction(spanDelayForever)
let distance = CGFloat(screenSize.height + spaceship.frame.height)
let moveTargets = SKAction.moveToY(spaceship.frame.origin.y - distance, duration: 8.0)
let removeTargets = SKAction.removeFromParent()
moveAndRemove = SKAction.sequence([moveTargets,removeTargets])
override func update(currentTime: CFTimeInterval)
/* Called before each frame is rendered */
但是当我运行游戏时,Spaceship 仍然在展示中。找不到能解决的。
有人可以帮我吗?
宇宙飞船必须向下 (Y),创建副本,然后在 Y 方向向下移动。
【问题讨论】:
尝试使用 moveBy 而不是 moveTo 它没有工作,它仍然停止。 您需要在每艘飞船上运行moveAndRemove
操作。我建议您将动作定义移至 createSpaceship
方法并在您创建的每艘飞船上运行 moveAndRemove
动作。
@0x141E 成功了!非常感谢!把答案发给我标记为正确。
【参考方案1】:
您需要在每艘飞船上运行moveAndRemove
操作。我建议您将动作定义移至 createSpaceship
方法并在您创建的每艘飞船上运行 moveAndRemove
动作。例如,
func createSpaceship()
// This can be a local variable and combined into a single statement
let spaceship = SKSpriteNode(imageNamed: "Spaceship")
spaceship.size = CGSize(width: 70, height: 100)
spaceship.setScale(1.0)
spaceship.position = CGPoint(x: screenSize.width / 3, y: screenSize.height - 75)
spaceship.zPosition = 1
let distance = CGFloat(screenSize.height + spaceship.frame.height)
let moveTargets = SKAction.moveToY(spaceship.frame.origin.y - distance, duration: 8.0)
let removeTargets = SKAction.removeFromParent()
let moveAndRemove = SKAction.sequence([moveTargets,removeTargets])
// Add the action to the list of actions executed by the spaceship
spaceship.runAction(moveAndRemove)
self.addChild(spaceship)
【讨论】:
moveAndRemove 实现了什么?我了解 moveToY,但为什么需要删除目标? @Confused 这就是 OP 在目标移动到新位置后想要发生的事情。查看问题。 对不起,我可能问错人了。我只是不明白为什么需要删除“目标”。以上是关于将 SKSpriteNode 移动 Y - Swift 2 + SpriteKit的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中围绕其起始值上下移动 SKSpriteNode?
将 SKSpriteNode 移动到 SKTileMapNode 上的特定图块
仅当 SKSpriteNode 是 Fruit 类型时才用手指移动 SKSpriteNode(SKSpriteNode 的子类)