Я использую Kivy 1.9.1 и Python 3.5.2. Мое приложение ломается, когда перед первым завершается обработка более чем одного события касания. Я ищу способ ограничить количество событий касания в данный момент времени (что-то вроде атрибута max_pointers в движке HTML5 Phaser) или фильтровать события касания и обрабатывать только первый. Насколько мне известно, сенсорное событие не содержит эту информацию о себе.Kivy: Как ограничить одновременные привязки к одному?
Я не считаю, что специфика моего кода актуальны, но лучше перестраховаться, чем потом сожалеть:
def on_touch_down(self, touch):
x, y = touch.x, touch.y
x -= self.img_board.pos[0]
y -= self.img_board.pos[1]
if not (0 <= x <= self.img_board.size[0] and
0 <= y <= self.img_board.size[1]):
touch.ud['piece'] = None
return
file = int(x/self.square_size)
rank = int(y/self.square_size)
self.select((file, rank))
piece = Board.instance.at_square(self.selected)
touch.ud['piece'] = piece
if piece:
self.canvas.remove(piece.rect)
self.canvas.after.add(piece.rect)
def on_touch_move(self, touch):
piece = touch.ud['piece']
if piece:
if Board.instance.to_move == piece.color:
piece.rect.pos = (touch.x - piece.rect.size[0]/2,
touch.y - piece.rect.size[1]/2)
def on_touch_up(self, touch):
piece = touch.ud['piece']
if piece:
self.canvas.after.remove(piece.rect)
self.canvas.add(piece.rect)
if Board.instance.to_move != piece.color:
return
x, y = touch.x, touch.y
x -= self.img_board.pos[0]
y -= self.img_board.pos[1]
if not (0 <= x <= self.img_board.size[0] and
0 <= y <= self.img_board.size[1]):
self.update_geometry()
return
dest = Board.an_from_tup((int(x/self.square_size),
int(y/self.square_size)))
if dest in piece.get_valid_moves():
Board.instance.move(piece.position,dest)
self.select(dest)
self.update_geometry()