Попытка узнать, как использовать Kivy (ранее не программировал ничего, кроме школьной работы), и я столкнулся с небольшими проблемами.Классы не инициализируются должным образом в python
Мой код показан ниже.
Проблема заключается в моем классе Ball, когда приложение начинается BubblePop.SetupLevel()
, и шары должны заполняться экземплярами класса Ball. Но почему-то это не работает. Поэтому, когда BobblePop.update()
называется я получаю сообщение об ошибке на ball.draw()
линии
AttributeError: 'NoneType' object has no attribute 'draw'
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import NumericProperty, ReferenceListProperty,\
ObjectProperty
from kivy.vector import Vector
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.graphics import Color, Ellipse
from random import random, randint
from kivy.core import window
#balls are what bounce around the screen. They turn into bubbles upon
#colliding with a bubble.
def Ball(width,height):
def __init__(self,width,height):
self.x = randint(0,width)
self.y = randint(0,height)
self.colorRGB = [0,0,0]
self.velX = 0
self.velY = 0
self.ball_size = 20
def draw(self):
Ellipse(pos=(self.x,self.y), size = (self.ball_size,self.ball_size))
class Bubble(Widget):
pass
class BubblePop(Widget):
balls = []
bubbles = []
def SetupLevel(self,numballs):
for x in xrange(numballs):
ball = Ball(self.height,self.width)
self.balls.append(ball)
def on_touch_down(self,touch):
with self.canvas:
r = random()
g = random()
b = random()
Color(r,g,b)
d = 80.
self.bubbles.append([touch.x - d/2,touch.y - d/2,[r,g,b]])
Ellipse(pos=(self.bubbles[-1][0], self.bubbles[-1][1]), size=(d, d))
def update(self,dt):
with self.canvas:
self.canvas.clear()
for ball in self.balls:
ball.draw()
class BubbleApp(App):
def build(self):
game = BubblePop()
game.SetupLevel(10)
Clock.schedule_interval(game.update, 1.0/60.0)
return game
if __name__ == '__main__':
BubbleApp().run()
Какая ошибка возникает из-за ошибки? Может быть, потому что ball.draw() не имеет холста? – Hyperboreus