我有一个看起来像这样的精灵。
我如何为这个精灵创建一个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值总是在变化。
答案 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度的正对三角形。