swift - 单击触摸开始时,我的对象的物理主体不会跳跃

标签 swift sprite-kit flappy-bird-clone

我正在尝试让一只飞翔的小鸟看起来像 YouTube 视频中的( https://www.youtube.com/watch?v=D7ntzPFvMf0 )并且它是在 swift 2 中制作的。我正在尝试在 swift 3 中执行此操作。一切都很顺利,直到我达到触摸开始功能。

所有先前的物理行为都像受重力影响一样起作用。当点击开始触摸时,什么也没有发生。我测试了一下它是否可以通过打印工作,确实如此。所以我试图让我的 datBoi 在点击时跳跃。作为注释,视频让我放了

datBoi.physicsBody?.applyImpulse(CGVectorMake( 0, 100)) 

但我用我所知道的替换了它

CGVector(dx: 0,dy: 100)

因为这似乎在 swift 3 中已过期。

任何帮助都是我关于 datBoi 对象的代码。

struct PhysicsCategory
    {
        static let datBoi : UInt32 = 0x1 << 1
        static let Ground : UInt32 = 0x1 << 2
        static let Wall : UInt32 = 0x1 << 3
    }

  class GameScene: SKScene 
  {

    var Ground = SKSpriteNode()
    var datBoi = SKSpriteNode()

    override func didMove(to view: SKView)
    {
        datBoi = SKSpriteNode(imageNamed: "datboi")
        datBoi.size = CGSize(width: 150, height: 240)
        datBoi.position = CGPoint(x: -85, y: 0)

        datBoi.physicsBody = SKPhysicsBody(rectangleOf: datBoi.size)
        datBoi.physicsBody?.categoryBitMask = PhysicsCategory.datBoi
        datBoi.physicsBody?.collisionBitMask = PhysicsCategory.Ground | PhysicsCategory.Wall
        datBoi.physicsBody?.contactTestBitMask = PhysicsCategory.Ground | PhysicsCategory.Wall
        datBoi.physicsBody?.affectedByGravity = true
        datBoi.physicsBody?.isDynamic = true
        datBoi.zPosition = 2
        self.addChild(datBoi)
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
    {
        datBoi.physicsBody?.velocity = CGVector(dx: 0, dy: 0)
        datBoi.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 100))
        print("hi")
    }
  }

最佳答案

    Circle.physicsBody?.velocity = CGVector(dx: 0, dy: 0)
    Circle.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 74))  //Also  try affected by gravity to false

关于swift - 单击触摸开始时,我的对象的物理主体不会跳跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40697712/

相关文章:

java - LibGDX,flappy bird 克隆,创建 BUTTON

ios - 从 csv 文件动态分配值给 swift 字典

sprite-kit - 触摸检测在 iOS 9 模拟器上不起作用

swift - 另一个类中的委托(delegate)

ios - Cocos2d,使用大于和小于整数值的限制来显示 Sprite

ios - 尝试创建委托(delegate)时获取 nil

swift - 允许 inout 参数使用默认值

xcode - 在 Swift 项目中发布测试和使用 Cocoapods

ios - 生成无限数量的节点并通过点击它们来销毁