2016-06-30 8 views
1

Swift와 SpriteKit에서 Side Scroller Mario 같은 게임을 만들고 있습니다. 나는 현재 플레이어를 움직이고 있는데, 계속 클릭하고 나서 움직여야한다. 내가 바라는 것은 당신이 그것을 잡고 있으면 그것이 움직일 것이고 당신은 화면을 빠르게 클릭 할 필요가 없을 것입니다. 미리 감사드립니다 !!!!Continuous Touch/Moving Swift & SpriteKit

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 


    for touch: AnyObject in touches { 
     let location = touch.locationInNode(self) 

        if location.y > 400{ 

      move = true 

     }else{ 


      if location.x < CGRectGetMidX(self.frame){ 
       player.physicsBody?.applyImpulse(CGVector(dx: -30, dy: 0)) 

       //tap somewhere above this to make character jump 
       if(location.y > 250) { 
        player.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 200)) 
       } 

      } else if location.x > CGRectGetMidX(self.frame){ 
       player.physicsBody?.applyImpulse(CGVector(dx: 30, dy: 0)) 

       //tap somewhere above this to make character jump 

      } 
     } 

    } 

    } 



override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 


    move = false 

} 
정말 잘 당신이 원하는 않는 것을 이해하지 않지만, 나는 몇 가지 코드를 작성하려고
+0

한 번 움직이는 것처럼 보이지만 한 번만 움직입니다. 사용자가 손가락을 떼지 않는 한 계속해서 실행하고 싶습니까? – Shripada

+0

예, javascript처럼 ** 기본적으로 ** mouseIsPressed **라는 bool 값이 있습니다. – ScarletStreak

답변

0

을 당신을 장면 업데이트에 대한 폴링을 수행하여 버튼 상태가 위 또는 아래인지 확인하고 그 상태를 해제합니다 (터치 시작 버튼을 아래 상태로, 터치 엔드를 위로 상태로 설정, 폴링 상태 업데이트, 상태에 따라 작업 수행). 귀하의 경우, 많은 코드를 변경하지 않고 간단하게 유지하려면 그냥 사용하십시오 SKAction.moveBy

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 


    for touch: AnyObject in touches { 
     let location = touch.locationInNode(self) 

     if location.y > 400{ 

      move = true 

     }else{ 
      //tap somewhere above this to make character jump 
      if(location.y > 250) { 
       player.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 200)) 
      } 
      else 
      { 
       let direction = (location.x > CGRectGetMidX(self.frame)) ? 30 : -30 
       let move = SKAction.moveBy(x:direction,y:0,duration:0) 
       let rep = SKAction.repeatActionForever(move) 
       player.runAction(rep,forKey:"Moving") 
      } 
     } 
    } 
} 



override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    player.removeActionForKey("Moving") 
    move = false 

} 
+0

참고로 터치를 여러 번 처리해야하므로 touchbegin에서도 작업을 제거 할 수 있습니다 – Knight0fDragon

0

: 나는 업데이트 기능이있는 컨트롤러 클래스를 만드는 것, 개인적으로

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     for touch: AnyObject in touches { 
      let location = touch.locationInNode(self) 
      if location.y > 400{ 
       move = true 
      }else{ 
       if location.x < CGRectGetMidX(self.frame){ 
        movePlayer(-30,dy:0) 

        //tap somewhere above this to make character jump 
        if(location.y > 250) { 
         player.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 200)) 
        } 
       } else if location.x > CGRectGetMidX(self.frame){ 
        movePlayer(30,dy:0) 
        //tap somewhere above this to make character jump 
       } 
      } 
     } 
    } 
    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     for touch: AnyObject in touches { 
      let location = touch.locationInNode(self) 
      if location.y > 400{ 
       move = false 
      }else { 
       if location.x < CGRectGetMidX(self.frame) || if location.x > CGRectGetMidX(self.frame) { 
        movePlayer(0,dy:0) 
       } 
      } 
     } 
    } 

    func movePlayer(dx:CGFloat,dy:CGFloat) { 
     if (player.physicsBody.resting) { 
      player.physicsBody?.applyImpulse(CGVector(dx, dy: dy)) 
     } 
    }