是否可以将物理体仅定位到Sprite的一部分?

时间:2015-10-15 10:50:04

标签: ios swift sprite-kit skphysicsbody

是否可以将物理主体定位在精灵上?我只希望我的精灵节点的某个部分有碰撞检测,而不是整个图像。

继承我的物理身体

physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: CGFloat(54.0), height: CGFloat(100.0)))

但是我想把物理体放在节点的顶部,它通常放在节点的中间。

2 个答案:

答案 0 :(得分:4)

您可以尝试创建与SKSpriteNode大小相同的较小SKPhysicsBody,并将较小的SKSpriteNode作为子项添加到较小的override func didMoveToView(view: SKView) { let smallerSprite = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(30, 30)) smallerSprite.physicsBody = SKPhysicsBody(rectangleOfSize: smallerSprite.size) smallerSprite.position = CGPointMake(100, 400) self.addChild(smallerSprite) let largerSprite = SKSpriteNode(color: UIColor(white: 0.5, alpha: 0.5), size: CGSizeMake(100, 100)) largerSprite.position = CGPointMake(-10, -10) smallerSprite.addChild(largerSprite) self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame) } 。根据需要更改较大的位置。例如

N=100;
Lambda=2;
r=rand(N,1);
X=-log(1-r)/Lambda;
hist(X), colormap(bone);

t = 0:0.01:5;
pdf=Lambda*exp(-Lambda*t);
hold on, plot(t,pdf,'LineWidth',2)

答案 1 :(得分:3)

作为拉克什答案的补充......获得相同结果的另一种方法是使用 + bodyWithRectangleOfSize:center: method。像这样:

override func didMoveToView(view: SKView) {

let sprite = SKSpriteNode(color: SKColor.whiteColor(), size: CGSize(width: 100.0, height: 100.0))

//I assume that you have initialized view and scene properly. If  so, this will position a sprite in the middle of the screen.
sprite.position = CGPoint(x: CGRectGetMidX(frame), y: CGRectGetMidY(frame))
var physicsBodySize:CGSize = CGSize(width: sprite.size.width, height: 30.0) //Create a size here. You can play with height parameter.

sprite.physicsBody =
    SKPhysicsBody(rectangleOfSize: physicsBodySize, center: CGPoint(x: 0.0, y: sprite.size.height / 2.0 - physicsBodySize.height / 2.0))

//Not needed, just set to restrict that sprite can't off screen
sprite.physicsBody?.affectedByGravity = false
self .addChild(sprite)

}

结果:

enter image description here

如果您尝试将物理体的高度更改为10.0,您将得到如下内容:

enter image description here

相关问题