【问题标题】:Creating a SKPhysicsBody on a triangular sprite在三角形精灵上创建 SKPhysicsBody
【发布时间】:2015-07-11 23:08:45
【问题描述】:

我有一个看起来像这样的精灵。

如何为这个精灵创建一个 SKPhysicsBody?我想要它,以便 SKPhysicsBody 要么是三角形,要么只是精灵长边上的一条边。这是我到目前为止所拥有的。名为 rightEnemy 的精灵有一个锚点

CGPointMake(0.5, 0.5);
rightEnemy.physicsBody = [SKPhysicsBody bodyWithEdgeFromPoint:CGPointMake(rightEnemy.position.x + width, rightEnemy.position.y) toPoint:CGPointMake(rightEnemy.position.x, rightEnemy.position.y + height)];

这会创建一个物理实体,但由于某种原因它没有附加到精灵。

物理主体所附着的精灵通过更新方法不断移动。 y 值一直在变化。

【问题讨论】:

    标签: objective-c sprite-kit polygon skphysicsbody


    【解决方案1】:

    这是答案的 Swift 版本。

        var trianglePath:CGMutablePathRef = CGPathCreateMutable()
        CGPathMoveToPoint(trianglePath, nil, -self.size.width/2, self.size.height/2)
        CGPathAddLineToPoint(trianglePath, nil, self.size.width/2, -self.size.height/2)
        CGPathAddLineToPoint(trianglePath, nil, -self.size.width/2, -self.size.height/2)
        CGPathAddLineToPoint(trianglePath, nil, -self.size.width/2, self.size.height/2)
    
        self.physicsBody? = SKPhysicsBody( polygonFromPath: trianglePath)
    

    【讨论】:

      【解决方案2】:

      您可能想尝试从纹理创建物理身体。

      rightEnemy.physicsBody = [SKPhysicsBody bodyWithTexture:rightEnemy.texture size:rightEnemy.size];
      

      您也可以这样做来验证物理设置是否正确。

      self.scene.view.showsPhysics = YES;
      

      编辑

      对于 iOS 7

      未经测试,但我想 bodyWithEdgeFromPoint: 需要在精灵坐标系中。你可以试试这个“应该”从你的精灵的左下角到右上角画一条线。

      rightEnemy.physicsBody = [SKPhysicsBody bodyWithEdgeFromPoint:CGPointMake(-rightEnemy.size.width/2, -rightEnemy.size.height/2) toPoint:CGPointMake(rightEnemy.size.width/2, rightEnemy.size.height/3)];
      

      希望对您有所帮助。

      【讨论】:

      • 有 iOS 7 的替代品吗??
      • @PoKoBros 我更新了我的答案我认为问题是你最初不在精灵坐标系中。你也可以试试 bodyWithPolygonFromPath: 希望有帮助。
      【解决方案3】:

      你可以像这样创建一个三角形的物理体:

      CGMutablePathRef trianglePath = CGPathCreateMutable();
      CGPathMoveToPoint(trianglePath, nil, -myNode.size.width/2, myNode.size.height/2);
      CGPathAddLineToPoint(trianglePath, nil, myNode.size.width/2, -myNode.size.height/2);
      CGPathAddLineToPoint(trianglePath, nil, -myNode.size.width/2, -myNode.size.height/2);
      CGPathAddLineToPoint(trianglePath, nil, -myNode.size.width/2, myNode.size.height/2);
      myNode.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:trianglePath];
      
      CGPathRelease(trianglePath);
      

      以上创建了一个 45 度直角三角形。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-17
        • 2020-01-10
        相关资源
        最近更新 更多