如何在 Swift 中的图像之间切换?
How would I switch between images in Swift?
我的屏幕中间有一张汽车图片。因此,当我按下屏幕时,我希望它从汽车变为平面图像,而当我放开屏幕时,我希望它返回汽车图像。我现在拥有的代码一遍又一遍地生成图像,并且它们不会在两个图像之间切换。这是我的代码:
func addCar() {
let redCar = SKSpriteNode(imageNamed: "redC")
redCar.position = CGPointMake(self.size.width / 2, self.size.height / 7)
redCar.zPosition = 42
addChild(redCar)
redCar.physicsBody = SKPhysicsBody(circleOfRadius: 20)
redCar.physicsBody?.allowsRotation = false
redCar.physicsBody?.affectedByGravity = false
redCar.physicsBody?.contactTestBitMask = RedCategory | RedCarCategory
redCar.physicsBody?.categoryBitMask = RedCarCategory
redCar.physicsBody?.collisionBitMask = RedCarCategory
}
func addBluePlane() {
let bluePlane = SKSpriteNode(imageNamed: "blueC")
bluePlane.position = CGPointMake(self.size.width / 2, self.size.height / 7)
bluePlane.zPosition = 43
addChild(bluePlane)
bluePlane.physicsBody = SKPhysicsBody(circleOfRadius: 20)
bluePlane.physicsBody?.allowsRotation = false
bluePlane.physicsBody?.affectedByGravity = false
bluePlane.physicsBody?.contactTestBitMask = GreenCategory | BluePlaneCategory
bluePlane.physicsBody?.categoryBitMask = BluePlaneCategory
bluePlane.physicsBody?.collisionBitMask = BluePlaneCategory
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* Called when a touch begins */
for touch in touches {
if let touch = touches.first {
let location = touch.locationInNode(self)
let node = self.nodeAtPoint(location)
addCar()
}
}
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?)
{
addBluePlane()
}
我没有任何 SpriteKit 的具体经验,但看起来您正在一次又一次地创建和添加节点。您应该将 redCar
声明为实例变量,而不是 class 中的局部变量。 bluePlane
.
也是如此
class YourClass {
let redCar = SKSpriteNode(imageNamed: "redC")
let bluePlane = SKSpriteNode(imageNamed: "blueC")
func addCar() {
bluePlane.removeFromParent()
addChild(redCar)
//rest goes here. dont create another redCar object
//.......
}
func addBluePlane() {
redCar.removeFromParent()
addChild(bluePlane)
//rest goes here. dont create another bluePlane object
//.......
}
}
成功了!我是这样做的:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* Called when a touch begins */
if let touch = touches.first {
let location = touch.locationInNode(self)
let node = self.nodeAtPoint(location)
addCar()
bluePlane.removeFromParent()
}
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
addBluePlane()
redCar.removeFromParent()
}
我的屏幕中间有一张汽车图片。因此,当我按下屏幕时,我希望它从汽车变为平面图像,而当我放开屏幕时,我希望它返回汽车图像。我现在拥有的代码一遍又一遍地生成图像,并且它们不会在两个图像之间切换。这是我的代码:
func addCar() {
let redCar = SKSpriteNode(imageNamed: "redC")
redCar.position = CGPointMake(self.size.width / 2, self.size.height / 7)
redCar.zPosition = 42
addChild(redCar)
redCar.physicsBody = SKPhysicsBody(circleOfRadius: 20)
redCar.physicsBody?.allowsRotation = false
redCar.physicsBody?.affectedByGravity = false
redCar.physicsBody?.contactTestBitMask = RedCategory | RedCarCategory
redCar.physicsBody?.categoryBitMask = RedCarCategory
redCar.physicsBody?.collisionBitMask = RedCarCategory
}
func addBluePlane() {
let bluePlane = SKSpriteNode(imageNamed: "blueC")
bluePlane.position = CGPointMake(self.size.width / 2, self.size.height / 7)
bluePlane.zPosition = 43
addChild(bluePlane)
bluePlane.physicsBody = SKPhysicsBody(circleOfRadius: 20)
bluePlane.physicsBody?.allowsRotation = false
bluePlane.physicsBody?.affectedByGravity = false
bluePlane.physicsBody?.contactTestBitMask = GreenCategory | BluePlaneCategory
bluePlane.physicsBody?.categoryBitMask = BluePlaneCategory
bluePlane.physicsBody?.collisionBitMask = BluePlaneCategory
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* Called when a touch begins */
for touch in touches {
if let touch = touches.first {
let location = touch.locationInNode(self)
let node = self.nodeAtPoint(location)
addCar()
}
}
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?)
{
addBluePlane()
}
我没有任何 SpriteKit 的具体经验,但看起来您正在一次又一次地创建和添加节点。您应该将 redCar
声明为实例变量,而不是 class 中的局部变量。 bluePlane
.
class YourClass {
let redCar = SKSpriteNode(imageNamed: "redC")
let bluePlane = SKSpriteNode(imageNamed: "blueC")
func addCar() {
bluePlane.removeFromParent()
addChild(redCar)
//rest goes here. dont create another redCar object
//.......
}
func addBluePlane() {
redCar.removeFromParent()
addChild(bluePlane)
//rest goes here. dont create another bluePlane object
//.......
}
}
成功了!我是这样做的:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* Called when a touch begins */
if let touch = touches.first {
let location = touch.locationInNode(self)
let node = self.nodeAtPoint(location)
addCar()
bluePlane.removeFromParent()
}
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
addBluePlane()
redCar.removeFromParent()
}