在三角形精灵上创建SKPhysicsBody

时间:2015-07-11 23:08:45

标签: objective-c sprite-kit polygon skphysicsbody

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

enter image description here

我如何为这个精灵创建一个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值总是在变化。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

您也可以执行此操作来验证物理设置是否正确。

self.scene.view.showsPhysics = YES;

修改

适用于iOS 7

未经测试,但我认为bodyWithEdgeFromPoint:需要在sprite坐标系中。您可以尝试使用“应该”从精灵的左下角到右上角画一条线。

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

希望这有帮助。

答案 2 :(得分:1)

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

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度的正对三角形。