在三角形精灵上创建 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)
我有一个看起来像这样的精灵。
我如何为这个精灵创建一个 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)