我是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 回答
您的路径轮廓定义了concave shape但多边形的主体must use convex shapes .
您可以将路径更改为凸面,也可以将其拆分为多个与关节连接的实体,以形成由单个凸体构成的更大的凹形 .