我在尝试创建平台和中间的无形线时遇到了麻烦,我希望它有一个SKPhysicsBody,这样当英雄角色通过时,它会增加分数,但我似乎无法想象一下可以使用的代码,特别是如何在平台中间创建线,特别是当平台决定移动时。任何提示都会有很大帮助。
|
|
________|_________
| | |
| | |
|________|_________|
答案 0 :(得分:1)
这是实现您所描述内容的一种方式。
- (void) didMoveToView:(SKView *)view
{
// Show outline of physics bodies for debugging purposes.
self.view.showsPhysics = YES;
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0];
SKSpriteNode *platform = [SKSpriteNode spriteNodeWithColor:[SKColor blueColor] size:CGSizeMake(128, 64)];
platform.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:platform.size];
platform.position = CGPointMake(CGRectGetMidX(self.frame),
CGRectGetMidY(self.frame));
[self addChild:platform];
SKSpriteNode *line = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(2, 128)];
// Line is invisible
line.hidden = YES;
// physicsBody of line
line.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:line.size];
// Position line...adjust this accordingly
line.position = CGPointMake(platform.position.x, platform.position.y+line.size.height/4);
[self addChild:line];
// Connect nodes with physics joint
[self connectNode1:platform toNode2:line];
[platform.physicsBody applyImpulse:CGVectorMake(100.0, 0)];
}
此方法将两个精灵节点在其中点连接到物理关节。
- (void) connectNode1:(SKSpriteNode *)node1 toNode2:(SKSpriteNode *)node2
{
CGPoint midPoint = CGPointMake((node1.position.x + node2.position.x)/2,
(node1.position.y + node2.position.y)/2);
SKPhysicsJointFixed *joint = [SKPhysicsJointFixed jointWithBodyA:node1.physicsBody
bodyB:node2.physicsBody
anchor:midPoint];
[self.physicsWorld addJoint:joint];
}
答案 1 :(得分:0)
使用SKNode Class Reference中引用的- (void)addChild:(SKNode *)node
将该行设为对象的子项。
如果您不想要子/父关系,可以将该行绑定到对象:
line.position = CGPointMake(object.position.x+10, object.position.y+10)
其中+10是您需要的任何值。如果'对象'移动时,您必须在update:
方法中更新线的位置,以跟踪对象的位置。