我是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尝试了这个,它只是一个正方形(我只使用坐标而不是图像),它完美地工作。这可能只是一个新手的错误,但任何帮助都表示赞赏。
答案 0 :(得分:1)
您的路径大纲定义了concave shape但多边形的实体must use convex shapes。
您可以将路径更改为凸面,或者您必须将其拆分为多个与关节连接的实体,以便形成由单个凸体构成的更大的凹形。