Я недавно начал играть с Kivy и хотел бы сделать простую стреляющую игру.Kivy - удалить объекты на touch_down
Это мой код:
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 раз в секунду. Тем не менее, у меня есть несколько проблем здесь:
- можно удалить только недавно добавили виджет
- недавно добавленный виджет удаляется независимо где я нажимаю.
Может кто-нибудь, пожалуйста, помогите мне исправить это? Благодаря!
Работает как шарм, спасибо! Я немного играл с кодом и узнал, что, не создавая __init__ в BattleField и добавляя Clock в приложение, как и раньше, он тоже работает. Есть ли какая-то особая причина, по которой вы это сделали? Я обязательно прочитаю ссылку, которую вы предоставили. Еще раз спасибо! – Rezney
Главным образом для удобства чтения. Рад, что это помогло! –