Kivy降落时移除物体

2024-06-11 13:01:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近开始玩Kivy,想做一个简单的射击游戏。在

这是我的代码:

import kivy
kivy.require('1.9.0')

from kivy.config import Config
Config.set('graphics', 'width', '800')
Config.set('graphics', 'height', '600')

from kivy.app import App
from kivy.clock import Clock
from kivy.core.text import LabelBase
from kivy.core.window import Window
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.graphics import Rectangle
from kivy.lang import Builder
from kivy.config import Config
import random, time

a = Builder.load_string('''
<BattleField>
    BoxLayout:
        orientation: 'vertical'

<Target>
    canvas:
        Rectangle:
            pos: self.pos
            size: self.size
            source: 'target.jpg'    

''')

class BattleField(Widget):

    #to destroy target
    def on_touch_down(self,touch):
        #if self.collide_point(*touch.pos):
        if self.collide_widget(self.target):
            self.remove_widget(self.target)

    def appear_target(self, *args):

        random_pos = tuple([random.randint(0, 600) for i in range(2)])
        self.target = Target()
        self.target.pos = (random_pos)
        self.add_widget(self.target)


class Target(Widget):

    pass

class ClockApp(App):

    def build(self):
        g = BattleField()
        Clock.schedule_interval(g.appear_target, 1)
        return g

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

所以现在它每1秒增加一个新目标。不过,我在这里有几个问题:

  1. 只能删除最近添加的小工具
  2. 不管我在哪里单击,最近添加的小部件都会被删除。在

有人能帮我修好这个吗?谢谢!在


Tags: fromposimportselfconfigtargetrandomwidget
2条回答

好了(对原来的帖子没有太多改动)。您应该看看官方文档上的this page

from kivy.config import Config
Config.set('graphics', 'width', '800')
Config.set('graphics', 'height', '600')
from kivy.app import App
from kivy.clock import Clock
from kivy.core.text import LabelBase
from kivy.core.window import Window
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.graphics import Rectangle
from kivy.lang import Builder
from kivy.config import Config
import random, time

a = Builder.load_string('''
<BattleField>
    BoxLayout:
        orientation: 'vertical'

<Target>
    canvas:
        Rectangle:
            pos: self.pos
            size: self.size
            source: 'target.jpg'    

''')

class BattleField(Widget):

    def __init__(self, **kwargs):
        super(BattleField, self).__init__(**kwargs)
        Clock.schedule_interval(self.appear_target, 1)


    def appear_target(self, *args):
        random_pos = tuple([random.randint(0, 600) for i in range(2)])
        target = Target()
        target.pos = random_pos
        self.add_widget(target)


class Target(Widget):

    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):
            self.parent.remove_widget(self)


class ClockApp(App):

    def build(self):
        return BattleField()

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

你试过吗self.parent.remove_小部件(自我目标)“而不是”self.remove_小工具(自我目标)"? 要删除一个widget,你的代码需要从widgets树的一个更高的位置开始操作(我想测试你的代码,但是我现在没有电脑)。在

相关问题 更多 >