2014-09-02 39 views

回答

0

在您的touchesEnded(放置事件)中,檢查兩個對象的位置,如果它們足夠接近,請添加關節。

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; 
} 
+0

對不起,我沒有足夠的解釋,例如,如果2對象可以旋轉,它變得非常複雜? – 2014-09-03 18:16:02

+0

這種方法仍然可以工作,因爲physicBody與精靈一起旋轉。 – Epsilon 2014-09-04 19:31:49

+0

謝謝你,我會盡力在完成後發佈代碼。 – 2014-09-05 08:04:27