Ios Swift/SpriteKit与自定义类冲突

Ios Swift/SpriteKit与自定义类冲突,ios,swift,sprite-kit,collision,Ios,Swift,Sprite Kit,Collision,我有一个类为多个spritenod创建变量,如下所示: class Enemy { var speed:Float = 0.0 var guy:SKSpriteNode var currentFrame = 0 var randomFrame = 0 var moving = false var rotationSpeed:CGFloat = 1.0 var angle = 0.0 var range = 1.2 var yPos = CGFloat() var rotationDirecti

我有一个类为多个spritenod创建变量,如下所示:

class Enemy {

var speed:Float = 0.0
var guy:SKSpriteNode
var currentFrame = 0
var randomFrame = 0
var moving = false
var rotationSpeed:CGFloat = 1.0
var angle = 0.0
var range = 1.2
var yPos = CGFloat()
var rotationDirection:Int = 0
var preLocation:CGFloat = 0
var health:Int = 0

init(speed:Float, guy:SKSpriteNode, rotationSpeed:CGFloat, rotationDirection:Int, preLocation:CGFloat, health:Int) {

    self.speed = speed
    self.guy = guy
    self.rotationSpeed = rotationSpeed
    self.rotationDirection = rotationDirection
    self.preLocation = preLocation
    self.health = health


}
func addEnemy(#named: String, speed:Float, yPos: CGFloat, rotationSpeed:CGFloat, rotationDirection:Int, preLocation:CGFloat, health:Int) {

    var enemyNode = SKSpriteNode(imageNamed: named)

    enemyNode.physicsBody = SKPhysicsBody(texture: enemyNode.texture, alphaThreshold: 0, size: enemyNode.size)
    enemyNode.physicsBody!.affectedByGravity = false
    enemyNode.physicsBody!.categoryBitMask = ColliderType.Enemy.rawValue
    enemyNode.physicsBody!.contactTestBitMask = ColliderType.Hero.rawValue | ColliderType.Enemy.rawValue
    enemyNode.physicsBody!.collisionBitMask = ColliderType.Hero.rawValue | ColliderType.Enemy.rawValue
    enemyNode.physicsBody?.allowsRotation = false

    var enemy = Enemy(speed: speed, guy: enemyNode, rotationSpeed: rotationSpeed, rotationDirection: rotationDirection, preLocation: preLocation, health: health)
    enemys.append(enemy)
    enemy.guy.name = named
    resetEnemy(enemyNode, yPos: yPos)
    enemy.yPos = enemyNode.position.y
    addChild(enemyNode)

}
if let myEnemy = contact.bodyA.node as? Enemy {
     myEnemy.speed = 99
}
然后对敌人使用一个SpriteNode,如下所示:

class Enemy {

var speed:Float = 0.0
var guy:SKSpriteNode
var currentFrame = 0
var randomFrame = 0
var moving = false
var rotationSpeed:CGFloat = 1.0
var angle = 0.0
var range = 1.2
var yPos = CGFloat()
var rotationDirection:Int = 0
var preLocation:CGFloat = 0
var health:Int = 0

init(speed:Float, guy:SKSpriteNode, rotationSpeed:CGFloat, rotationDirection:Int, preLocation:CGFloat, health:Int) {

    self.speed = speed
    self.guy = guy
    self.rotationSpeed = rotationSpeed
    self.rotationDirection = rotationDirection
    self.preLocation = preLocation
    self.health = health


}
func addEnemy(#named: String, speed:Float, yPos: CGFloat, rotationSpeed:CGFloat, rotationDirection:Int, preLocation:CGFloat, health:Int) {

    var enemyNode = SKSpriteNode(imageNamed: named)

    enemyNode.physicsBody = SKPhysicsBody(texture: enemyNode.texture, alphaThreshold: 0, size: enemyNode.size)
    enemyNode.physicsBody!.affectedByGravity = false
    enemyNode.physicsBody!.categoryBitMask = ColliderType.Enemy.rawValue
    enemyNode.physicsBody!.contactTestBitMask = ColliderType.Hero.rawValue | ColliderType.Enemy.rawValue
    enemyNode.physicsBody!.collisionBitMask = ColliderType.Hero.rawValue | ColliderType.Enemy.rawValue
    enemyNode.physicsBody?.allowsRotation = false

    var enemy = Enemy(speed: speed, guy: enemyNode, rotationSpeed: rotationSpeed, rotationDirection: rotationDirection, preLocation: preLocation, health: health)
    enemys.append(enemy)
    enemy.guy.name = named
    resetEnemy(enemyNode, yPos: yPos)
    enemy.yPos = enemyNode.position.y
    addChild(enemyNode)

}
if let myEnemy = contact.bodyA.node as? Enemy {
     myEnemy.speed = 99
}
现在我有一个问题,在didBeginContact函数中,我只得到SpriteNodes,所以我不能得到特定于敌人的变量,比如health

所以我想知道如何将敌方类引用到spritenode,以便在didBeginContact函数中使用它


我希望有人能帮助我。谢谢。

我正好遇到了这个问题。您需要将节点强制转换为要查找的对象。在didBeginContact中,可能是这样的:

class Enemy {

var speed:Float = 0.0
var guy:SKSpriteNode
var currentFrame = 0
var randomFrame = 0
var moving = false
var rotationSpeed:CGFloat = 1.0
var angle = 0.0
var range = 1.2
var yPos = CGFloat()
var rotationDirection:Int = 0
var preLocation:CGFloat = 0
var health:Int = 0

init(speed:Float, guy:SKSpriteNode, rotationSpeed:CGFloat, rotationDirection:Int, preLocation:CGFloat, health:Int) {

    self.speed = speed
    self.guy = guy
    self.rotationSpeed = rotationSpeed
    self.rotationDirection = rotationDirection
    self.preLocation = preLocation
    self.health = health


}
func addEnemy(#named: String, speed:Float, yPos: CGFloat, rotationSpeed:CGFloat, rotationDirection:Int, preLocation:CGFloat, health:Int) {

    var enemyNode = SKSpriteNode(imageNamed: named)

    enemyNode.physicsBody = SKPhysicsBody(texture: enemyNode.texture, alphaThreshold: 0, size: enemyNode.size)
    enemyNode.physicsBody!.affectedByGravity = false
    enemyNode.physicsBody!.categoryBitMask = ColliderType.Enemy.rawValue
    enemyNode.physicsBody!.contactTestBitMask = ColliderType.Hero.rawValue | ColliderType.Enemy.rawValue
    enemyNode.physicsBody!.collisionBitMask = ColliderType.Hero.rawValue | ColliderType.Enemy.rawValue
    enemyNode.physicsBody?.allowsRotation = false

    var enemy = Enemy(speed: speed, guy: enemyNode, rotationSpeed: rotationSpeed, rotationDirection: rotationDirection, preLocation: preLocation, health: health)
    enemys.append(enemy)
    enemy.guy.name = named
    resetEnemy(enemyNode, yPos: yPos)
    enemy.yPos = enemyNode.position.y
    addChild(enemyNode)

}
if let myEnemy = contact.bodyA.node as? Enemy {
     myEnemy.speed = 99
}

是否有理由不通过
敌人
类继承
SKSpriteNode