title: Kivy on_touch_move and DragBehaviour not moving Image Widget
body: <p>I am attempting to get my Player Image to move when triggered by an on_touch_move event. I have attempted use of DragBehaviour, which did not work. Similarly, updating the Player Image's x co-ordinate has no effect.</p>
  
  <p><strong>code</strong></p>
  
  <pre><code>from kivy.lang import Builder
  from kivy.app import App
  from kivy.uix.image import Image
  from kivy import Config
  from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
  from kivy.uix.widget import Widget
  from kivy.properties import NumericProperty, ReferenceListProperty,\
  StringProperty
  from kivy.clock import Clock
  from kivy.vector import Vector
  from random import randint
  
  Builder.load_string('''
  &lt;Ball&gt;:
      size_hint: None, None
      source: '58-Breakout-Tiles.png'
      pos: self.pos
      size: 15, 15
  
  &lt;Player&gt;:
      size_hint: None, None
      source: '49-Breakout-Tiles.png'
      pos: self.pos
      size: 60, 30
  
  
  
  &lt;SettingsScreen&gt;:
      close: close
      AnchorLayout:
          anchor_x: 'left'
          anchor_y: 'top'
          Image:
              id: close
              size_hint: .03, .03
              source: 'grey_crossGrey.png'
      GridLayout:
          cols: 2
          Label:
              font_name: "vgafix.fon"
              text: 'Music: '
          Switch:
              active: True
          Label:
              font_name: "vgafix.fon"
              text: 'Sounds: '
          Switch:
              active: True
  
  &lt;MenuScreen&gt;:
      cog: cog
      AnchorLayout:
          anchor_x: 'right'
          anchor_y: 'top'
          Image:
              id: cog
              size_hint: .03, .03
              source: 'settings-cog.png'
      BoxLayout:
          orientation: 'vertical'
          Image:
              source: "brickbreaker log.png"
          Label:
              font_name: "vgafix.fon"
              text: 'Tap to start'
  
  &lt;GameScreen&gt;:
      ball: ball
      player: player
      cog: cog
      AnchorLayout:
          anchor_x: 'right'
          anchor_y: 'top'
          Image:
              id: cog
              size_hint: .03, .03
              source: 'settings-cog.png'
  
      Ball:
          id: ball
          size_hint: None, None
          center: self.parent.center
      Player:
          id: player
          size_hint: None, None
  ''')
  
  Config.set('graphics', 'multisamples', '0')
  
  
  class Ball(Image):
      velocityX, velocityY = NumericProperty(0), NumericProperty(0)
      velocity = ReferenceListProperty(velocityX, velocityY)
  
      def move(self):
          self.pos = Vector(*self.velocity) + self.pos
  
  
  class Player(Image):
      def __init__(self, **kwargs):
          super(Player, self).__init__(**kwargs)
  
      def on_touch_move(self, touch):
          if self.collide_point(*touch.pos):
              if (self.x &gt;= 0) and (self.x &lt;= self.width - 15):
                  self.x += (abs(self.x - touch.x))
  
  class Brick(Image):
      pass
  
  
  
  class SettingsScreen(Screen):
  
      def __init__(self, **kwargs):
          super(SettingsScreen, self).__init__(**kwargs)
          self.previous = StringProperty('')
  
      def on_touch_down(self, touch):
          if self.close.collide_point(*touch.pos):
              self.manager.current = self.previous
  
  
  class MenuScreen(Screen):
  
      def on_touch_down(self, touch):
          if self.cog.collide_point(*touch.pos):
              self.manager.get_screen('settings').previous = self.manager.current
              self.manager.current = 'settings'
          else:
              self.manager.transition = FadeTransition()
              self.manager.current = 'game'
  
  
  class GameScreen(Screen):
  
      def __init__(self, **kwargs):
          super(GameScreen, self).__init__(**kwargs)
          self.initWidgets()
  
      def on_pre_enter(self, *args):
          self.interval = Clock.schedule_interval(self.update, 1.0 / 60.0)
  
      def on_touch_down(self, touch):
          if self.cog.collide_point(*touch.pos):
              self.manager.get_screen('settings').previous = self.manager.current
              self.manager.current = 'settings'
  
      def initWidgets(self):
          self.ball.center = self.center
          self.ball.velocity = Vector(0, 4).rotate(randint(0, 360))
          self.player.pos_hint = {'top': 0.1, 'right': 0.6}
  
      def update(self, dt):
          self.ball.move()
          if (self.ball.y &lt; 0) or (self.ball.y &gt; self.height - 15):
              self.ball.velocityY *= -1
          # bounce off left and right
          if (self.ball.x &lt; 0) or (self.ball.x &gt; self.width - 15):
              self.ball.velocityX *= -1
  
      def on_pre_leave(self, *args):
          self.interval.cancel()
  
  
  sm = ScreenManager(transition=FadeTransition())
  sm.add_widget(MenuScreen(name='menu'))
  sm.add_widget(GameScreen(name='game'))
  sm.add_widget(SettingsScreen(name='settings'))
  
  
  class BrickBreakerInsanityApp(App):
      def build(self):
          return sm
  
  
  if __name__ == '__main__':
      BrickBreakerInsanityApp().run
  </code></pre>
  
  <p><strong>Code assets (required):</strong></p>
  
  <p><a href="https://drive.google.com/open?id=1GAnv5DfjNUuAXTybmsan90Dm0OuSVOfb" rel="nofollow noreferrer">https://drive.google.com/open?id=1GAnv5DfjNUuAXTybmsan90Dm0OuSVOfb</a></p>
  
  <p><a href="https://i.stack.imgur.com/rR799.png" rel="nofollow noreferrer">https://i.stack.imgur.com/rR799.png</a></p>
  
  <p><a href="https://i.stack.imgur.com/ngYvL.png" rel="nofollow noreferrer">https://i.stack.imgur.com/ngYvL.png</a></p>
  
  <p><a href="https://i.stack.imgur.com/AuxI3.png" rel="nofollow noreferrer">https://i.stack.imgur.com/AuxI3.png</a></p>
  
  <p><a href="https://i.stack.imgur.com/ypd7C.png" rel="nofollow noreferrer">https://i.stack.imgur.com/ypd7C.png</a></p>
  
  <p><a href="https://i.stack.imgur.com/rNvLz.png" rel="nofollow noreferrer">https://i.stack.imgur.com/rNvLz.png</a></p>