【问题标题】:Spritekit - How to create a hole like billiard's pockets?Spritekit - 如何创建一个像台球口袋一样的洞?
【发布时间】:2015-04-30 13:56:35
【问题描述】:

我正在创建一个球在屏幕上移动的游戏,我想创建一个球可以进入的洞(就像在台球中发生的那样)

那可以是一个黑色背景的简单圆形 SKNode 吗?在这种情况下,当球越过洞口时我应该把球藏起来(这是一个非常糟糕的效果)

还有其他可用的功能/想法吗? 谢谢

【问题讨论】:

  • 如何使用带有口袋图像的 sknode,当球碰到它时,你改变比例,让它看起来像整个消失了
  • @Shaun07776 好主意实际上减少了规模..!我要看看它。谢谢!

标签: ios swift sprite-kit game-physics


【解决方案1】:

在这种情况下,我会为孔创建一个 SKSpriteNode,只有一个黑色图像作为圆圈。然后当两个节点碰撞时,你删除球节点。顺便说一句,我假设您正在 GameScene 中执行此操作

首先,为您的碰撞检测器创建一个枚举:

 enum ColliderType:UInt32 {
    case ball = 1
    case blackhole = 2
}

创建一个基本的黑洞节点

let blackHole:SKNode = SKSpriteNode(imageNamed: "NameOfImage")
    blackHole.physicsBody = SKPhysicsBody(circleOfRadius: side.size.width/2)
    blackHole.physicsBody!.dynamic = false
    //These 3 lines of code basically say to pay attention to collisions
    blackHole.physicsBody!.categoryBitMask = ColliderType.blackhole.rawValue
    blackHole.physicsBody!.contactTestBitMask = ColliderType.ball.rawValue
    blackHole.physicsBody!.collisionBitMask = ColliderType.ball.rawValue
    self.addChild(side)

另外,在您设置球的物理属性的地方,插入此代码

(Name of Sprite).physicsBody!.categoryBitMask = ColliderType.ball.rawValue
(Name of Sprite).physicsBody!.contactTestBitMask = ColliderType.blackhole.rawValue
(Name of Sprite).physicsBody!.collisionBitMask = ColliderType.blackhole.rawValue

然后,这是您检测碰撞的地方。

func didBeginContact(contact: SKPhysicsContact)
{
    //variable stores the two things contacting
    let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask

    switch(contactMask){

    case ColliderType.ball.rawValue | ColliderType.blackhole.rawValue:
        //deletes the ball as a Node
        contact.bodyB.node?.removeFromParent()


    default:
        return



    }
}

如果有任何令人困惑的地方或者我需要解释更多,请告诉我

【讨论】:

  • 感谢@Brennan 的解释!我将减小球的大小,然后在碰撞后将其从父级移除..!太棒了;-)
  • 开发者您好,需要您的帮助和支持。我是 SpriteKit 的新手,现在我正在从 0 开始学习 SpriteKit,我需要台球(台球桌)游戏的演示应用程序。我需要用于学习目的。我很困惑我要从哪里开始?如果你能快速给我台球演示应用程序源代码,那就太好了。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 2017-06-24
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
相关资源
最近更新 更多