on_touch_widget kivy 所有其他小部件都被激活
on_touch_widget kivy all other widgets gets activated
每次激活最后一个小部件时执行以下代码
然后每个小部件都被激活
请解决这个问题
每次激活最后一个小部件时执行以下代码
然后每个小部件都被激活
请解决这个
每次激活最后一个小部件时执行以下代码
然后每个小部件都被激活
请解决这个问题
每次激活最后一个小部件时执行以下代码
然后每个小部件都被激活
请解决这个问题
每次激活最后一个小部件时执行以下代码
然后每个小部件都被激活
请解决这个
`
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()
`
Kivy默认不执行触摸碰撞,这样widgets可以与不碰撞的触摸进行交互(因为widget的排列不一定和gui touch排列相同)。
您可以自己执行碰撞检查:
def on_touch_down(self, touch):
if self.collide_point(*touch.pos):
do_stuff()
每次激活最后一个小部件时执行以下代码 然后每个小部件都被激活 请解决这个问题
每次激活最后一个小部件时执行以下代码 然后每个小部件都被激活 请解决这个 每次激活最后一个小部件时执行以下代码 然后每个小部件都被激活 请解决这个问题
每次激活最后一个小部件时执行以下代码 然后每个小部件都被激活 请解决这个问题
每次激活最后一个小部件时执行以下代码 然后每个小部件都被激活 请解决这个 `
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()
`
Kivy默认不执行触摸碰撞,这样widgets可以与不碰撞的触摸进行交互(因为widget的排列不一定和gui touch排列相同)。
您可以自己执行碰撞检查:
def on_touch_down(self, touch):
if self.collide_point(*touch.pos):
do_stuff()