gpt4 book ai didi

python - Kivy Canvas 在触摸事件后重绘

转载 作者:行者123 更新时间:2023-12-01 05:12:08 26 4
gpt4 key购买 nike



我想做一个小游戏,但我需要一些帮助...
我在 python 和 kivy 方面都是新手。我正在使用 python 3.4 和 kivy 1.8.0。

游戏将有一些可拖动和/或消失的绘制元素:
-如果你点击一个点,你可以拖动它
- 如果您点击任意位置,一个点就会消失

我试图让它消失的部分,但我卡住了。我在 Canvas 上制作了一个带有一些点的虚拟代码,您可以在其中看到我想如何解决问题:
--> 画一些点
--> 删除/重新定位其中一个点
--> 清除 Canvas
--> 重绘

不知怎的,我无法重画它。但我设法清除了 Canvas ...
你能帮我吗?
我也想获得帮助/想法如何使其可拖动......

谢谢,这是我的代码:

from kivy.app import App
from kivy.graphics import Ellipse
from kivy.uix.boxlayout import BoxLayout
import random

class CustomLayout(BoxLayout):

def __init__(self, **kwargs):
super(CustomLayout, self).__init__(**kwargs)
self.a = []
self.points_pos()
with self.canvas.after:
self.draw_points()

def points_pos(self):
i=0
x = random.sample(range(800), 10)
y = random.sample(range(640), 10)
for i in range(10):
pos = [0,0]
pos[0]=x[i]
pos[1]=y[i]
self.a.append(pos)
print(self.a)

def draw_points(self):
i = 0
for i in range(len(self.a)):
self.circle = Ellipse(
size = (25,25),
pos = (self.a[i][0],self.a[i][1])
)

def random_remove(self):
point = self.a[random.randint(0,len(self.a)-1)]
self.a.remove(point)


def update(self):
self.parent.canvas.clear()
with self.canvas:
self.draw_points()

def on_touch_down(self, touch):
self.random_remove()
self.update()

class MainApp(App):

def build(self):
root = CustomLayout()
return root

if __name__ == '__main__':
MainApp().run()

最佳答案

def update(self):
self.parent.canvas.clear()
with self.canvas:
self.draw_points()

您清除了父级 Canvas ,其中包括 BoxLayout 的 Canvas 。之后,无论您在 BoxLayout 上绘制多少内容,它们都不会显示。

要解决这个问题,您可能只想简单地执行 self.canvas.clear() ,但实际上这是非常低效的,并且不是使用 kivy Canvas 的好方法(尽管它会对于少量指令来说效果很好)。最好保留对所有 Canvas 指令的引用,并仅使用 self.canvas.remove(...) 删除不再需要的特定指令。

关于python - Kivy Canvas 在触摸事件后重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23968080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com