在三角形精灵上创建 SKPhysicsBody

Creating a SKPhysicsBody on a triangular sprite

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

我如何为这个精灵创建一个 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)];

这创建了一个物理体,但由于某种原因它没有附加到 sprite。

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

您可能想尝试从纹理创建物理 [​​=29=]。

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

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

self.scene.view.showsPhysics = YES;

编辑

对于iOS 7

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

rightEnemy.physicsBody = [SKPhysicsBody bodyWithEdgeFromPoint:CGPointMake(-rightEnemy.size.width/2, -rightEnemy.size.height/2) toPoint:CGPointMake(rightEnemy.size.width/2, rightEnemy.size.height/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 度直角三角形。

这是答案的 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)