我的SKSprite节点只显示为黑盒子

时间:2015-12-08 23:43:17

标签: ios swift sprite-kit skspritenode

我正在尝试为我的场景添加敌人,但是当我这样做时,精灵只会显示为黑盒子。我知道我在项目中拥有正确的图像,因为它在GameScene类中工作。但是,我想把它移到另一个类,所以我可以添加多个敌人。

以下是Enemy类中的代码:

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课程中调用它的方式:

    let monster = Enemy(pos: CGPoint(x: size.width * 0.7, y: size.height * 0.7))
    addChild(monster)

2 个答案:

答案 0 :(得分:1)

改变这个:

 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)
    }

答案 1 :(得分:0)

您正在使用图片创建新的SKSpriteNode:

    let monster = SKSpriteNode(imageNamed: "monster")

在此之后,您正在使用自己的数据重新初始化它(但正如Basher_CAD指出的那样,您忽略了纹理以及颜色):

    self.init(texture: monster.texture, color: monster.color, size: monster.size)

删除self.init调用(以及方法)应解决此问题。