2014-07-04 5 views
1

self.physicsWorld.gravity = CGVectorMake(0.0, -4.0);으로 인해 강제로 떨어지는 SKSpriteNode가 있습니다. 사용자가 화면을 두드려 잡고있을 때, 나는 SKSpriteNode가 날아 가기를 원하고, 사용자가 터치를 멈 추면 다시 땅으로 떨어집니다.SpriteKit 접촉 및 유지시 SKSpriteNode 속도

...

나는 속도를 변경하려 시도했지만, 그것은 단지 applyImpulse 방법 같은 작은 바운스를 만든다 :

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
     /* Called when a touch begins */ 

     for touch: AnyObject in touches { 

      let location = touch.locationInNode(self) 

      flyingObject.physicsBody.velocity = CGVectorMake(0, 100) 
     }   
    } 

편집 :

여기 내 장면 초기화 코드의

override func didMoveToView(view: SKView) { 
     /* Setup your scene here */ 

     // Physics 
     self.physicsWorld.gravity = CGVectorMake(0.0, -4.0); 

     // flyingObject 
     var flyingObjectTexture = SKTexture(imageNamed:"flyingObject") 
     flyingObject.filteringMode = SKTextureFilteringMode.Nearest 

     flyingObject = SKSpriteNode(texture: flyingObjectTexture) 
     flyingObject.setScale(1) 
     flyingObject.position = CGPoint(x: self.frame.size.width * 0.35, y: self.frame.size.height * 0.6) 

     flyingObject.physicsBody = SKPhysicsBody(circleOfRadius:flyingObject.size.height/2.0) 
     flyingObject.physicsBody.dynamic = true 
     flyingObject.physicsBody.allowsRotation = false 

     self.addChild(flyingObject) 

     // Ground 
     var groundTexture = SKTexture(imageNamed:"Ground") 

     var sprite = SKSpriteNode(texture:groundTexture) 
     sprite.setScale(0.5) 
     sprite.position = CGPointMake(self.size.width/2 - 100, sprite.size.height) 

     self.addChild(sprite) 

     var ground = SKNode() 

     ground.position = CGPointMake(0, groundTexture.size().height/2) 
     ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.frame.width, groundTexture.size().height * 0.5)) 

     ground.physicsBody.dynamic = false 
     self.addChild(ground) 

    } 
+0

당신은 대신 applyImpulse 방법을 사용한다 속도를 직접 설정합니다. Apple의 문서에서 "시체가 시뮬레이션 상태에있을 때 시체에 적용되는 힘을 기준으로 속도를 조정하는 것이 일반적입니다." – 0x141E

+0

이것은 여전히 ​​객체 수신 거부를 만듭니다. 사용자가 멈추지 않을 때까지 끊임없이 올라갈 필요가 있습니다. –

+0

이렇게하려면 다음 단계를 사용하여 applyForce 메소드를 사용할 수 있습니다. 1) touchesBegan에서 노드에 대한 포인터 식별 및 설정 2) 업데이트에서 : (NSTimeInterval) currentTime, 노드가 선택되면 (즉, 포인터가 nil이 아닌) 선택된 노드에 applyForce, 3) touchesEnded에서 포인터를 nil로 설정합니다. – 0x141E

답변

2

덕분에, 내가 생각했던 것보다 쉽게 ​​:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
     /* Called when a touch begins */ 
     isTouching = true 
    } 

    override func touchesEnded(touches: NSSet!, withEvent event: UIEvent!) { 
     /* Called when a touch begins */ 
     isTouching = false 
    } 

    override func update(currentTime: CFTimeInterval) { 
     /* Called before each frame is rendered */ 
     if isTouching { 
      flyingObject.physicsBody.applyImpulse(CGVectorMake(0, 5)) 
     } 
    } 
+0

웬일인지 나를 위해 일해. 내 부울은 초기에 '거짓'으로 설정되어 있습니다. 내 노드가 전혀 움직이지 않습니다. "applyImpulse"문제 일 수 있습니까? – TerranceW

1

터치 시작 :

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 

UITouch * touch = [touches anyObject]; 
CGPoint location = [touch locationInNode:self]; 

flyingObject.physicsBody.velocity = CGVectorMake(0, 100) 
} 

접촉이 종료 : 나는 해결책을 마련 할 수 있었다 코드 원숭이에

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 

UITouch * touch = [touches anyObject]; 
CGPoint location = [touch locationInNode:self]; 

flyingObject.physicsBody.velocity = CGVectorMake(0, 0) 

}

+0

나는 이것과 같은 결과를 가지고있다. - 여전히 튀는 것 –

+0

이상한 ... 중력을 제거하고 설정을 끝내면 (0, -100)의 속도가 만들어집니다. 중력을 복제하려면 처음에 속도를 (0, -100)으로 설정하십시오. – meisenman

+0

다시, 아직 수신 거부 ... 10 번 연속해서 클릭하면 스프라이트가 날아갑니다. 실제 '탭 앤 홀드'로 설정하는 데 문제가있을 수 있습니까? –