我正在使用bodyWithPolygonFromPath定义物理物体的体积,并使用
http://dazchong.com/spritekit/
获得所需的路径。但是该路径似乎并不正确,我希望查看物理体路径的边界以查看形状是否正确。
有什么方法可以查看物理体的体积轮廓吗?
我尝试了以下代码,但是它不起作用。
ship = [SKSpriteNode spriteNodeWithImageNamed:@“Spaceship”];
CGFloat offsetX = ship.frame.size.width * ship.anchorPoint.x;
CGFloat offsetY = ship.frame.size.height * ship.anchorPoint.y;
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 50 - offsetX, 110 - offsetY);
CGPathAddLineToPoint(path, NULL, 18 - offsetX, 16 - offsetY);
CGPathAddLineToPoint(path, NULL, 140 - offsetX, 15 - offsetY);
CGPathCloseSubpath(path);
SKShapeNode *yourline = [SKShapeNode node];
yourline.name = @"yourline";
yourline.path = path;
[yourline setStrokeColor:[UIColor redColor]];
[self addChild:yourline];
ship.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];
//[ship setScale:0.5];
ship.zRotation = - M_PI / 2;
最佳答案
对于Objective-C和iOS
在您的 ViewController.m 中找到此代码
SKView *skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES;
在最后一行之后添加
skView.showsPhysics = YES;
生成并运行,您应该看到所有物理 body 边界线
我注意到您将shapeNode添加到self而不是spriteNode,所以请尝试以下操作
SKSpriteNode *ship = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"];
CGFloat offsetX = ship.frame.size.width * ship.anchorPoint.x;
CGFloat offsetY = ship.frame.size.height * ship.anchorPoint.y;
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 50 - offsetX, 110 - offsetY);
CGPathAddLineToPoint(path, NULL, 18 - offsetX, 16 - offsetY);
CGPathAddLineToPoint(path, NULL, 140 - offsetX, 15 - offsetY);
CGPathCloseSubpath(path);
ship.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];
[self addChild:ship];
SKShapeNode *shape = [SKShapeNode node];
shape.path = path;
shape.strokeColor = [SKColor colorWithRed:1.0 green:0 blue:0 alpha:0.5];
shape.lineWidth = 1.0;
[ship addChild:shape];
对于Swift和iOS> = 8.0
let skView = self.view as! SKView
skView.showsFPS = true
skView.showsNodeCount = true
skView.showsPhysics = true
如果您想要自定义边界线
let ship = SKSpriteNode(imageNamed: "Spaceship")
let offsetX = ship.frame.size.width * ship.anchorPoint.x
let offsetY = ship.frame.size.height * ship.anchorPoint.y
let path = CGPathCreateMutable()
CGPathMoveToPoint(path, nil, 50 - offsetX, 110 - offsetY)
CGPathAddLineToPoint(path, nil, 18 - offsetX, 16 - offsetY)
CGPathAddLineToPoint(path, nil, 140 - offsetX, 15 - offsetY)
CGPathCloseSubpath(path)
ship.physicsBody = SKPhysicsBody(polygonFromPath: path)
addChild(ship)
let shape = SKShapeNode()
shape.path = path
shape.strokeColor = SKColor(red: 1.0, green: 0, blue: 0, alpha: 0.5)
shape.lineWidth = 1.0
addChild(shape)
已经测试过:]
祝好运!!
关于sprite - 有没有办法直观地查看子图形工具包的SKPhysicsbody边界线?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21213755/