2015-09-13 2 views
-2

на реализации ниже кода каждый раз, когда последний виджет получает активированную и после этого каждый виджет активируется пожалуйста, решить этуon_touch_widget kivy все другие виджеты активируется

по реализации ниже кода каждый раз, когда последний виджет активируется и после того, что каждый виджет активируется пожалуйста, решить эту проблему по реализации ниже коды каждый раз, когда последний виджет получает активированный и после этого каждый виджет активируется пожалуйста, решить эту

по реализации ниже коды каждый раз, когда последний виджет активируется и после того, что каждый виджет активируется пожалуйста, решить эту

по реализации ниже коды каждый раз, когда последний виджет получает активированный и после этого каждый виджет активируется пожалуйста, решить эту проблема `

from pieces import matrix 
from kivy.app import App 
from kivy.graphics import Color,Rectangle 
from kivy.core.window import Window 
from kivy.uix.widget import Widget 
from kivy.uix.image import Image 
from kivy.clock import Clock 
class Sprite(Image): 
    def __init__(self,size=None,**kwargs): 
     super(Sprite, self).__init__(**kwargs) 
     if size==None: 
      self.size = self.texture_size 
     else:self.size=size 
class Basket(Widget): 
    def __init__(self,source,pos,name,**kwargs): 
     super(Basket,self).__init__(**kwargs) 
     self.speed=4 
     self.name=name 
     self.image=Sprite(source=source,pos=pos,size=[100,100]) 
     self.add_widget(self.image) 
     self.size=self.image.size 
     print self.size 
    def update_y(self,a): 
     final=a*100+50 
     if self.image.center_y==final:return True 
     elif self.image.center_y<final:self.image.center_y+=self.speed 
     else:self.image.center_y-=self.speed 
     return False 
    def update_x(self,a): 
     final=a*100+50 
     if self.image.center_x==final:return True 
     elif self.image.center_x<final:self.image.center_x+=self.speed 
     else:self.image.center_x-=self.speed 
     return False 
    def on_touch_down(self,touch): 
     if touch.grab_current is self: 
      print self.name 
class Game(Widget): 
    def __init__(self,**kwargs): 
     super(Game,self).__init__(**kwargs) 
     self.matrix=matrix() 
     self.add_widget(Sprite(source='images/gray.jpg')) 
     for i in range(2): 
      self.ids[str(i)]=Basket(source='images/basket.jpg',name=str(i),pos=(i*100,i*100)) 
      self.add_widget(self.ids[str(i)]) 
      print i 
     # Clock.schedule_interval(self.update, 1.0/60.0) 
     # self.matrix.shuffle() 
    def update(self,ab): 
     if self.matrix.up: 
      if reduce(lambda a,i:self.ids[str(i)].update_y(self.matrix.y[i]) and a ,range(4),True): 
       self.matrix.shuffle() 
     else: 
      if reduce(lambda a,i:self.ids[str(i)].update_x(self.matrix.x[i]) and a,range(4),True): 
       self.matrix.shuffle() 
    def on_touch_down(self,touch): 
     print touch.grab(self) 
class GameApp(App): 
    def build(self): 
     g=Game(size=(400,400)) 
     Window.size=g.size 
     return g 
GameApp().run() 

`

+2

Пожалуйста, объясните, что вы пытаетесь сделать, и уточнить свой вопрос, чтобы удалить дубликат текста. – neverendingqs

ответ

1

Kivy не выполняют сенсорные столкновений по умолчанию, так что виджеты могут взаимодействовать с прикосновениями т шляпа не сталкивается с ними (так как расположение виджета не обязательно совпадает с расположением gui touch).

Вы можете просто выполнить столкновение проверить себя:

def on_touch_down(self, touch): 
    if self.collide_point(*touch.pos): 
     do_stuff() 
Смежные вопросы