2016-06-30 15 views
1

Я создаю Side Scroller Мариоподобную игру в Swift и SpriteKit. В настоящее время я перемещаю плеер, но вы должны продолжать нажимать, а затем двигаться. Я желаю, если вы держите его, он будет двигаться, и вам не придется быстро щелкнуть по экрану. Заранее спасибо !!!!Непрерывное касание/перемещение 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 есть значение bool, называемое ** mouseIsPressed **, что в основном то, что мне нужно. – ScarletStreak

ответ

0

Лично я хотел бы создать класс контроллера, который имеет функцию обновления, вам опрос на вашем обновлении сцены, чтобы определить, находится ли состояние кнопки вверх или вниз, и уйти от этого (Touch начинает ставит кнопку в состояние «вниз», touch end помещает его в состояние «вверх». Состояние опроса состояния и выполняет действия, основанные на состоянии). в вашем случае, чтобы все было просто, не меняя большого количества кода, я бы просто использовал 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

Обратите внимание: вам нужно обрабатывать несколько касаний, так что вы можете также удалить действия в сенсорной панели – 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)) 
     } 
    }