我的 SKSprite 节点显示为一个黑框
My SKSprite node is showing up as just a black box
我想在我的场景中添加一个敌人,但是当我这样做时,精灵只是显示为一个黑框。我知道我在项目和所有内容中都有正确的图像,因为它在 GameScene class 中工作。但是,我想将它移到另一个 class 以便我可以添加多个敌人。
这是 Enemy class 中的代码:
import Foundation
import SpriteKit
class Enemy: SKSpriteNode {
override init(texture: SKTexture?, color: UIColor, size: CGSize) {
super.init(texture: nil, color: UIColor.blackColor(), size: size)
}
convenience init(pos: CGPoint) {
let monster = SKSpriteNode(imageNamed: "monster")
self.init(texture: monster.texture, color: monster.color, size: monster.size)
self.position = pos
self.physicsBody = SKPhysicsBody(rectangleOfSize: size)
self.physicsBody!.dynamic = true
self.physicsBody!.affectedByGravity = false
self.physicsBody!.categoryBitMask = PhysicsCategory.Monster
self.physicsBody!.contactTestBitMask = PhysicsCategory.Projectile
self.physicsBody!.collisionBitMask = PhysicsCategory.None
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
下面是我在 GameScene 中的调用方式 class:
let monster = Enemy(pos: CGPoint(x: size.width * 0.7, y: size.height * 0.7))
addChild(monster)
改变这个:
override init(texture: SKTexture?, color: UIColor, size: CGSize) {
super.init(texture: nil, color: UIColor.blackColor(), size: size)
}
至:
override init(texture: SKTexture?, color: UIColor, size: CGSize) {
super.init(texture: texture, color: UIColor.blackColor(), size: size)
}
您正在使用图像创建新的 SKSpriteNode:
let monster = SKSpriteNode(imageNamed: "monster")
紧接着,您将使用自己的数据重新初始化它(但正如 Basher_CAD 指出的那样,您忽略了纹理和颜色):
self.init(texture: monster.texture, color: monster.color, size: monster.size)
删除 self.init
调用(以及方法)应该可以解决问题。
我想在我的场景中添加一个敌人,但是当我这样做时,精灵只是显示为一个黑框。我知道我在项目和所有内容中都有正确的图像,因为它在 GameScene class 中工作。但是,我想将它移到另一个 class 以便我可以添加多个敌人。
这是 Enemy class 中的代码:
import Foundation
import SpriteKit
class Enemy: SKSpriteNode {
override init(texture: SKTexture?, color: UIColor, size: CGSize) {
super.init(texture: nil, color: UIColor.blackColor(), size: size)
}
convenience init(pos: CGPoint) {
let monster = SKSpriteNode(imageNamed: "monster")
self.init(texture: monster.texture, color: monster.color, size: monster.size)
self.position = pos
self.physicsBody = SKPhysicsBody(rectangleOfSize: size)
self.physicsBody!.dynamic = true
self.physicsBody!.affectedByGravity = false
self.physicsBody!.categoryBitMask = PhysicsCategory.Monster
self.physicsBody!.contactTestBitMask = PhysicsCategory.Projectile
self.physicsBody!.collisionBitMask = PhysicsCategory.None
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
下面是我在 GameScene 中的调用方式 class:
let monster = Enemy(pos: CGPoint(x: size.width * 0.7, y: size.height * 0.7))
addChild(monster)
改变这个:
override init(texture: SKTexture?, color: UIColor, size: CGSize) {
super.init(texture: nil, color: UIColor.blackColor(), size: size)
}
至:
override init(texture: SKTexture?, color: UIColor, size: CGSize) {
super.init(texture: texture, color: UIColor.blackColor(), size: size)
}
您正在使用图像创建新的 SKSpriteNode:
let monster = SKSpriteNode(imageNamed: "monster")
紧接着,您将使用自己的数据重新初始化它(但正如 Basher_CAD 指出的那样,您忽略了纹理和颜色):
self.init(texture: monster.texture, color: monster.color, size: monster.size)
删除 self.init
调用(以及方法)应该可以解决问题。