使用 SKSpritenodes/碰撞检测在 Swift 中自定义类

Posted

技术标签:

【中文标题】使用 SKSpritenodes/碰撞检测在 Swift 中自定义类【英文标题】:Custom Class in Swift using SKSpritenodes/Collision Detection 【发布时间】:2016-01-03 23:12:25 【问题描述】:

我目前正在开发一款敌人从屏幕左侧生成并向右移动的游戏。我想赋予这些敌人自己的属性(健康、力量等)。所以我正在创建一个 Basic_fighter 类。我还有一个用户狙击镜,用户可以用来击中敌人。我遇到的问题是如何访问 DidBeginContact 函数中的敌人属性,因为该函数只返回两个节点,而不是类信息。我会把我的代码放在下面

Basic_Fighter_Class

import Foundation
import SpriteKit

class Basic_Fighter  

var health = Int()
var type = SKSpriteNode()

init(sk:SKSpriteNode)

    self.type = sk
    self.health = 3

  
 

func spawn_enemies()

    let enemynode = SKSpriteNode(imageNamed: "Shooter")
    enemynode.size = CGSize(width: 100, height: 40)
    enemynode.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
    enemynode.physicsBody = SKPhysicsBody(rectangleOfSize: enemynode.size)
    enemynode.physicsBody?.affectedByGravity = false
    enemynode.physicsBody?.categoryBitMask = BodyType.enemy
    enemynode.physicsBody?.contactTestBitMask = BodyType.bullet

    let enemy = Basic_Fighter(sk: enemynode)
    addChild(enemynode)

我可以在 DidBeginContact 函数中检测到用户范围和敌人之间的接触,但我不知道如何访问敌人的信息,例如它的健康状况。

【问题讨论】:

只在 didbegincontact 中访问 body 的节点特征,这在多个教程中都有,然后你只需将其转换为它所属的类 你有想过这个吗? 【参考方案1】:

我认为您可以使用enemynode.health 访问它,不过我不确定。

【讨论】:

以上是关于使用 SKSpritenodes/碰撞检测在 Swift 中自定义类的主要内容,如果未能解决你的问题,请参考以下文章

基于 SpriteKit 中的碰撞检测更新分数的问题

SKPhysicsContact未检测到categoryBitMask碰撞

检测 SKSpriteNodes 上的触摸事件

添加 SKPhysicsBody 会导致 SKSpriteNode 抖动

如何检测其他 SKSpriteNodes 的子节点的相交节点

如何禁用两个 SKSpriteNodes 之间的联系?