on_touch_widget kivy所有其他小部件都被激活

时间:2015-09-13 01:08:16

标签: python 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()

`

1 个答案:

答案 0 :(得分:1)

Kivy默认情况下不执行触摸碰撞,因此小部件可以与不与它们发生碰撞的触摸进行交互(因为小部件排列不一定与gui触摸排列相同)。

您可以自己执行碰撞检查:

def on_touch_down(self, touch):
    if self.collide_point(*touch.pos):
        do_stuff()