SK Physics Body不会与Edge Physics Body碰撞

时间:2014-05-28 17:27:59

标签: sprite-kit skphysicsbody

我是Sprite Kit的新手,我试图建立一个简单的游戏,其中一个被丢弃的对象停留在屏幕的范围内。但是,当我放下物体时,它不会像屏幕上的边缘那样碰撞,它就会掉下来。

我设置我的场景并围绕它进行边缘循环。

// Create and configure the scene.
SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;
scene.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:scene.frame];
scene.physicsWorld.gravity = CGVectorMake(0.0, -9.8);

这就是我绘制物理体的地方,无论我触摸到哪里都会掉落精灵。

for (UITouch *touch in touches) {
    CGPoint location = [touch locationInNode:self];

    SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"SObstacle.png"];

    sprite.position = location;

    CGFloat offsetX = sprite.frame.size.width * sprite.anchorPoint.x;
    CGFloat offsetY = sprite.frame.size.height * sprite.anchorPoint.y;

    CGMutablePathRef path = CGPathCreateMutable();

    CGPathMoveToPoint(path, NULL, 50 - offsetX, 58 - offsetY);
    CGPathAddLineToPoint(path, NULL, 0 - offsetX, 58 - offsetY);
    CGPathAddLineToPoint(path, NULL, 0 - offsetX, 32 - offsetY);
    CGPathAddLineToPoint(path, NULL, 24 - offsetX, 32 - offsetY);
    CGPathAddLineToPoint(path, NULL, 24 - offsetX, -2 - offsetY);
    CGPathAddLineToPoint(path, NULL, 80 - offsetX, -2 - offsetY);
    CGPathAddLineToPoint(path, NULL, 80 - offsetX, 24 - offsetY);
    CGPathAddLineToPoint(path, NULL, 50 - offsetX, 24 - offsetY);
    CGPathAddLineToPoint(path, NULL, 50 - offsetX, 56 - offsetY);

    CGPathCloseSubpath(path);

    sprite.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];

    [self addChild:sprite];

我用SKSpriteNode尝试了这个,它只是一个正方形(我只使用坐标而不是图像),它完美地工作。这可能只是一个新手的错误,但任何帮助都表示赞赏。

1 个答案:

答案 0 :(得分:1)

您的路径大纲定义了concave shape但多边形的实体must use convex shapes

您可以将路径更改为凸面,或者您必须将其拆分为多个与关节连接的实体,以便形成由单个凸体构成的更大的凹形。