如果使用physicsBody声明2个对象(例如Rectangle和Triangle),可以拖放它们,我们如何设置,当我们拖动一个接近另一个时,2个对象将在任何合适的点连接?
答案 0 :(得分:0)
在你的touchesEnded(放置事件)中,检查两个对象的位置,如果它们足够接近,则添加一个关节。
答案 1 :(得分:0)
你可以创建一个比你的精灵更大的physicsBody,并测试它是否与didBeginContact中的另一个身体接触。使用SKPhysicsContact对象,您可以使用SKPhysicsJointFixed或SKPhysicsJointLimit在接触点处连接两个物理实体。
编辑:以下是如何加入两个精灵的示例:
为所选节点声明一个实例变量。
{
SKSpriteNode *selectedNode;
}
如果检测到联系人,请加入两个物理机构。节点与SKPhysicsJoint连接。
- (void) didBeginContact:(SKPhysicsContact *)contact
{
if ((contact.bodyA.categoryBitMask == category1
&& contact.bodyB.categoryBitMask == category2)
|| (contact.bodyB.categoryBitMask == category1
&& contact.bodyA.categoryBitMask == category2)) {
CGPoint point = contact.contactPoint;
SKPhysicsJoint *joint = [SKPhysicsJointFixed jointWithBodyA:contact.bodyA bodyB:contact.bodyB anchor:point];
[self.physicsWorld addJoint:joint];
}
}
根据触摸选择并移动精灵。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
/* Called when a touch begins */
for (UITouch *touch in touches) {
CGPoint location = [touch locationInNode:self];
SKNode *node = [self nodeAtPoint:location];
selectedNode = (SKSpriteNode *)node;
}
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
/* Called when a touch moves */
for (UITouch *touch in touches) {
CGPoint location = [touch locationInNode:self];
selectedNode.position = location;
}
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
/* Called when a touch ends */
selectedNode = nil;
}