SKPhysicsBody 不如预期
Posted
技术标签:
【中文标题】SKPhysicsBody 不如预期【英文标题】:SKPhysicsBody not as expected 【发布时间】:2013-10-16 06:03:05 【问题描述】:我有以下代码来创建一个矩形砖块和一个与之关联的物理体。我希望物理实体是一个与砖块大小和位置相同的实心矩形,但我得到一个我认为具有位置偏移并且可能还有大小差异的实体。我错过的坐标系有问题吗?解决这个问题的正确方法是什么?
- (void)addBrick
SKShapeNode *brick = [[SKShapeNode alloc] init];
CGRect brickBoundary = CGRectMake(0.0, 0.0, 100.0, 100.0);
brick.position = CGPointMake(100.0, 100.0);
brick.path = CGPathCreateWithRect(brickBoundary, nil);
brick.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(100.0,100.0)];
brick.physicsBody.restitution = 1.0;
brick.physicsBody.friction = 0.0;
brick.physicsBody.dynamic = NO;
[self addChild:brick];
【问题讨论】:
尺寸必须是 frame.size 的一半,因为主体矩形尺寸是从中心到两侧的宽度/高度,而不是总宽度 【参考方案1】:这是创建矩形并向其添加物理体的简单方法。
SKSpriteNode *n1 = [SKSpriteNode spriteNodeWithColor:[UIColor blueColor] size:objectSize];
n1.position = CGPointMake(self.size.width/2, 200);
n1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:n1.size];
n1.physicsBody.dynamic = NO;
[self addChild:n1];
这是来自RW 教程的修改版本,为您提供调试矩形
// RW Debug modified version
CGPathRef bodyPath = CGPathCreateWithRect( CGRectMake(-n1.size.width/2, -n1.size.height/2, n1.size.width, n1.size.height),nil);
SKShapeNode *shape = [SKShapeNode node];
shape.path = bodyPath;
shape.strokeColor = [SKColor colorWithRed:1.0 green:0 blue:0 alpha:0.5];
shape.lineWidth = 1.0;
[n1 addChild:shape];
CGPathRelease(bodyPath);
你的实现产生了这个(红色是物理框)。
【讨论】:
谢谢,它成功了:)。但是你知道我的实现问题出在哪里吗? 这修复了你的实现 CGRect brickBoundary = CGRectMake(-50, -50, 100.0, 100.0);我假设它是因为 spriteNodes 没有锚点,所以它设置为 0,0 ?我不太确定对不起。 是的,我认为问题出在锚点上...谢谢:) 谢谢,这是一个很好的解决方案。我已经更新了你的代码并实现了一个圆圈。任何有问题的人都可以查看我的博文:kubilayerdogan.net/…以上是关于SKPhysicsBody 不如预期的主要内容,如果未能解决你的问题,请参考以下文章
为啥 SKPhysicsBody -bodyWithEdgeLoopFromRect 不对碰撞做出反应?
带有 Gravity False 的 SpriteKit 节点倾斜到位
调整使用 SKPhysicsBody(circleOfRadius:) 创建的 SpriteKit SKPhysicsBody