我的 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 调用(以及方法)应该可以解决问题。