2016-06-21 4 views
-2

나는 작은 SKNodes로 만들어진 게임을 가지고있다. 그것들은 중첩 될 수 없으므로 물리 구조체를 사용하여 서로 움직입니다. 그러나 하나의 sknode가 다른 하나의 sknode를 따라 움직이면 sknode가 앞으로 밀려납니다. 충돌 비트 마스크를 0으로 설정하면 겹치기 때문에 옵션이 아닙니다. 하지만 그렇지 않으면, 그들은 원하는 속도를 넘어서 서로를 밀어냅니다. 나는 skypysics 시체를 사용하여 중첩하지 않고 '밀기'를 제거 할 수있는 방법이 필요합니다. 이 문제를 해결할 수있는 속성이 있습니까?물리 기관을 서로 밀지 않고 충돌시킬 수 있습니까?

참고 : 내 주변 노드를 이동하려면 skanimations를 사용합니다. 관련 코드가 필요하다면 어디서부터 시작해야할지 모르겠습니다. Swift 3.0을 사용하고 있지만 2.2/2.3 구문의 대답을 수락합니다.

편집 : 실제 해결책은 SK 동작으로 애니메이션을 움직이는 대신 노드의 속도를 변경하는 것이 었습니다.

+0

거의 충분하지 않은 정보를 정말 높은 이동하지 않으려는 물체의 무게를 설정합니다. 4 개의 답변이 게시되고 아무 것도 허용되지 않습니까? –

+0

여기에 더 많은 정보가 필요한 사람들과 채팅 중입니다. 제안 된 방법을 완벽하게 할 시간이 없었지만 아직 시도 중입니다. 컴퓨터에 연결하면 샘플 코드를 추가 할 수 있습니다. 적용 가능한 특정 정보가있는 경우 @DanielKanaan –

답변

0

변경 0으로 움직이는 물체의 당신의 물리학 몸에 손해 배상 접촉이 발생, 당신은

+0

이것은 거의 필요한 것이지만, 다음과 같은 노드는 실제로 이상하게 보이고, 위치를 물었다. –

+0

정말로 이상한 것이 무엇인지 확실하지 않다 – Knight0fDragon

+0

나는 게시하고 싶다. 비디오. 다음 노드는 리더 노드에 밀접하게 연결되어 있지만 리더 노드가 감속하면 팔로어는 리더의 물리 본 체에서 빠르게 물리기 시작합니다. 리더가 다시 속도를 올릴 때까지 두 번 보는 것과 거의 같습니다. –

0

푸시되는 본문에서 동적 속성을 false로 설정해 보았습니까? 당신이 설정 한 후

+0

에게 문의하십시오. 시도한 결과 원하는 속도가 나타납니다. 그것은 역동적이지 않을 때를 제외하고는 벽을 통해 자유롭게 떠 다닙니다. –

0

contactTestBitMask이 설정할 수 :

myHero.physicsBody!.collisionBitMask = 0 

충돌을 방지하지만 접촉을 허용 할 수 있습니다.

+0

이렇게하고 중복을 방지하는 방법이 있습니까? –

+0

@Michael Austin func didBeginContact (contact : SKPhysicsContact) {}에서 항상 연락을 받고, 초과 또는 중첩하려는 경우 여기에서 결정합니다. –

0

SKAction을 사용하여 동적 물리 본문을 업데이트하는 위치가 제대로 작동하지 않습니다. 그것은 말하고 싶은 것입니다. - 안녕하세요, 물리 규칙에 상관없이 내가 원하는대로 노드를 움직여야한다고 말하면됩니다.

첫 번째 해결책 - 한 노드가 특정 거리를두고 다른 노드를 따르게하려면 먼저 SKConstraint를 사용하십시오.

import SpriteKit 

class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 
     let nodeA = SKSpriteNode(color: SKColor.greenColor(), size: CGSize(width: 50, height: 50)) 
     nodeA.name = "nodeA" 
     addChild(nodeA) 

     let nodeB = SKSpriteNode(color: SKColor.redColor(), size: nodeA.size) 
     nodeB.name = "nodeB" 
     addChild(nodeB) 

     let followConstraint = SKConstraint.distance(SKRange.init(lowerLimit: nodeB.size.width * 1.5, upperLimit: nodeB.size.width * 1.5), toNode: nodeA) 
     nodeB.constraints = [followConstraint] 
    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     guard let touch = touches.first else { 
      return 
     } 


     childNodeWithName("nodeA")!.runAction(SKAction.moveTo(touch.locationInNode(self), duration: 2)) 
    } 
} 

여전히 물리학 몸과 SKActions를 원하는 경우

... false로 모든 물리학 본체의

  1. 설정 "동적"속성.
  2. 중복 된 경우 didBeginContact (SKPhysicsContactDelegate 프로토콜)을 체크인하십시오. 위치가 바뀌는 모든 행동을 제거하는 것이 사실이라면 팁 - 피직스 바디를 노드보다 약간 크게 만듭니다.
+0

고맙지 만 제약 조건을 설정 한 후에는 노드 b가 결코 제약 조건을 업데이트하지 않습니다. 노드 a가 계속 작동하는 동안 중지됩니다. –

+0

제약 조건을 업데이트 할 수 없습니다. 특정 제약 조건을 활성화/비활성화 할 수 있습니다. 그것을 제거하고 새로운 것을 추가 할 수도 있습니다. – mikem

+0

좋아요,하지만 당신의 예를 따르고, 노드 B는 더 이상 노드 A를 따르지 않습니다. 대신 노드 B는 스폰 후에 움직이지 않습니다. –