#python #kivy
Вопрос:
Я хотел бы сделать головоломку, в которой кто-то должен пройти лабиринт и собрать буквы, которые нужно будет ввести позже в качестве ответа. (Не собирается программой, а просто запоминает, какие буквы передаются, и вводит их позже при выходе из лабиринта.)
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.config import Config
Config.set('graphics', 'width', '806')
Config.set('graphics', 'height', '706')
class Touch(Widget):
def __init__(self, **kwargs):
super(Touch, self).__init__(**kwargs)
def on_touch_down(self, touch):
pass
def on_touch_down(self, touch):
pass
def on_touch_down(self, touch):
pass
class MyGrid(GridLayout):
pass
class DrawingWindow(App):
def build(self):
return MyGrid()
if __name__ == "__main__":
DrawingWindow().run()
<MyGrid>:
GridLayout:
cols:1
size:1000,706
canvas:
Rectangle:
size: 808,706
source: 'Puzzle.png'
Я узнал, как нарисовать круг там, где находится ваша мышь (не добавленный в код, так как я думаю, что, вероятно, будет использоваться другой метод), но как сделать все вокруг определенного радиуса черным, чтобы он показывал только небольшой круг в пределах этого радиуса. Возможно, использование непрозрачности в радиусе-это решение проблемы. Если бы кто-нибудь мог подтолкнуть меня в правильном направлении, это было бы действительно полезно.
Это не обязательно должно оставаться раскрытым, скорее, не на самом деле. Надеюсь, это также несколько упростит задачу.
Надеюсь, я ясно изложил, в чем проблема. Заранее благодарю вас за потраченное время и усилия.
Комментарии:
1. Я думаю, что проще всего было бы использовать затемненный фон лабиринта, который всегда является первой обновленной частью представления, а затем нарисуйте освещенную мышь (с видимым фоном) в ее круге.
Ответ №1:
Для этого вы можете использовать инструкции по трафарету. Вот простой пример:
from kivy.app import App
from kivy.core.window import Window
from kivy.lang import Builder
from kivy.properties import NumericProperty, ListProperty
from kivy.uix.widget import Widget
kv = '''
RelativeLayout:
ImageWithHole:
id: hole
canvas:
StencilPush
Ellipse: # draw the hole
pos: self.hole_pos[0] - self.radius, self.hole_pos[1] - self.radius
size: self.radius*2, self.radius*2
StencilUse
Color:
rgba: 1,1,1,1
Rectangle:
source: 'Puzzle.png' # draw the maze
pos: 0,0
size: self.size
StencilUnUse
Ellipse: # erase the hole (must be identical to original draw above)
pos: self.hole_pos[0] - self.radius, self.hole_pos[1] - self.radius
size: self.radius*2, self.radius*2
StencilPop
'''
class ImageWithHole(Widget):
radius = NumericProperty(50)
hole_pos = ListProperty([400, 300])
class TestApp(App):
def build(self):
Window.bind(mouse_pos=self.on_motion)
return Builder.load_string(kv)
def on_motion(self, src, mouse_pos):
hole = self.root.ids.hole
hole.hole_pos = mouse_pos
TestApp().run()
Комментарии:
1. Чувак. Огромное спасибо. Ты потрясающая. Я делаю какую-то головоломку/комнату для побега для своей девушки, чтобы она получила свой подарок в веселой форме. Спасибо, брат.