如何使Kivy小部件暂停。

3

我想制作一个带有两个小部件的小程序,以学习关于使用kivy进行游戏开发的一些知识。 一个部件应该随机在屏幕上移动,另一个部件保持静止。 现在我想找到一种实现“暂停按钮”的方法,它应该创建一个“暂停模式”,在此模式下,如果玩家想休息或其他事情,游戏的所有小部件都停止执行任何操作。 我试图搜索一下,但是没有找到任何可用的信息。 所以我想问问是否有人已经知道这样的功能? 以下是我的代码:

from kivy.base import runTouchApp
from kivy.lang import Builder

from random import random

from kivy.uix.widget import Widget

from kivy.clock import Clock
from kivy.animation import Animation

from kivy.properties import ListProperty
from kivy.core.window import Window
Builder.load_string('''
<Root>:
    ClockRect:
        pos: 300, 300
    AnimRect:
        pos: 500, 300

<ClockRect>:
    canvas:
        Color:
            rgba: 10, 0, 0, 1
        Rectangle:
            pos: self.pos
            size: self.size
<AnimRect>:
    canvas:
        Color:
            rgba:0, 20, 0, 1
        Rectangle:
            pos: self.pos
            size: self.size
''')

class Root(Widget):
    pass

class ClockRect(Widget):

    velocity = ListProperty([10, 15])
    def __init__(self, **kwargs):
        super(ClockRect, self).__init__(**kwargs)
        Clock.schedule_interval(self.Update, 1/60.)

    def Update(self, *args):
        self.x += self.velocity[0]
        self.y += self.velocity[1]

        if self.x < 0 or (self.x + self.width) > Window.width:
            self.velocity[0] *= -1
        if self.y < 0 or (self.y + self.height) > Window.height:
            self.velocity[1] *= -1
    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):
            print 'es geht'

class AnimRect(Widget):


    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):
            pass#if this funktion is executed, I want to pause the game

runTouchApp(Root())
1个回答

6

我很新手Kivy和图形编程,但我成功地让它停止了。希望你能进一步处理:

我替换了你的这行代码:

Clock.schedule_interval(self.Update, 1/60.)

通过这两行代码:
self.My_Clock = Clock
self.My_Clock.schedule_interval(self.Update, 1/60.)

然后我在你的“def on_touch_down”方法顶部添加了以下行:
self.My_Clock.unschedule(self.Update)

如果我在类外定义了我的时钟,该怎么办?self.My_Clock不能正常工作。 你能帮我解决这个问题吗? - Sandesh Goli
@SandeshGoli,有几种方法可用-您可以拥有一个指向另一个类(对象)的指针,并调用该对象上的切换方法。另一种方法(我更喜欢)是使用PyPubSub库(或任何Python消息传递库),让一个对象向另一个对象传递消息,表示时钟开/关。 - John C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接