Так что мне нужно создать интерактивную игровую карту для других игроков. Они могут добавить некоторые маркеры на нем локально.
Я импортировал изображение карты и увидел объект переполнения стека с кем-то, имеющим ту же проблему. У меня есть решение, но оно масштабируется в центре изображения.
Это очень большое изображение, поэтому мне нужно сделать возможным масштабирование курсора мыши.
Вот код, который я уже сделали:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.scatterlayout import ScatterLayout
from kivy.uix.scatter import Scatter
from kivy.core.window import Window
from kivy.graphics.transformation import Matrix
from kivy.lang import Builder
Builder.load_file('map.kv')
class Zoom(ScatterLayout):
def on_touch_down(self, touch):
x, y = touch.x, touch.y
self.prev_x = touch.x
self.prev_y = touch.y
if touch.is_mouse_scrolling:
if touch.button == 'scrolldown':
print('down')
## zoom in
if self.scale < 10:
self.scale = self.scale * 1.1
elif touch.button == 'scrollup':
print('up') ## zoom out
if self.scale > 1:
self.scale = self.scale * 0.9
# if the touch isn't on the widget we do nothing
if not self.do_collide_after_children:
if not self.collide_point(x, y):
return False
if 'multitouch_sim' in touch.profile:
touch.multitouch_sim = True
# grab the touch so we get all it later move events for sure
self._bring_to_front(touch)
touch.grab(self)
self._touches.append(touch)
self._last_touch_pos[touch] = touch.pos
return True
class Main_app(BoxLayout):
pass
class Stacked(App):
def build(self):
Window.clearcolor = (1, 1, 1, 1)
Window.size = (1000, 700)