首页 文章

SK Physics Body不会与Edge Physics Body碰撞

提问于
浏览
0

我是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 回答

  • 1

    您的路径轮廓定义了concave shape但多边形的主体must use convex shapes .

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

相关问题