Pong - Ball изменяет размеры и добавляется без какого-либо кода для него
Я следовал этому руководству: http://kivy.org/docs/tutorials/pong.html.
Когда я копирую и запускаю код в разделе "Добавить анимацию мяча", шар движется и отскакивает, но это действительно странно. Мяч периодически меняет размер, при этом кажется, что он вращается горизонтально, а затем вертикально. Мяч обычно перемещается довольно далеко от экрана, когда он движется вверх и вправо, прежде чем отскочить назад, мне нужен способ, чтобы он отскакивал от боков, а не слегка отскакивал после того, как достигнет их. Я почти уверен, что знаю, какую часть кода мне нужно изменить (), чтобы это произошло, но я понятия не имею, почему шар искажается. Код ниже.
main.py
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 random import randint
class PongGame(Widget):
ball = ObjectProperty(None)
def serve_ball(self):
self.ball.center = self.center
self.ball.velocity = Vector(4, 0).rotate(randint(0, 360))
def update(self, dt):
self.ball.move()
# Bounce off top and bottom
if (self.ball.y < 0) or (self.ball.top >= self.height):
self.ball.velocity_y *= -1
# Bounce off left and right
if (self.ball.x < 0) or (self.ball.right >= self.width):
self.ball.velocity_x *= -1
class PongBall(Widget):
velocity_x = NumericProperty(0)
velocity_y = NumericProperty(0)
velocity = ReferenceListProperty(velocity_x, velocity_y)
def move(self):
self.pos = Vector(*self.velocity) + self.pos
class PongApp(App):
def build(self):
game = PongGame()
game.serve_ball()
Clock.schedule_interval(game.update, 1.0/60.0)
return game
if __name__ == '__main__':
PongApp().run()
pong.kv
#:kivy 1.0.9
<PongBall>:
size: 50, 50
canvas:
Ellipse:
pos: self.pos
size: self.pos
<PongGame>:
ball: pong_ball
canvas:
Rectangle:
pos: self.center_x - 5, 0
size: 10, self.height
Label:
font_size: 70
center_x: root.width / 4
top: root.top - 50
text: "0"
Label:
font_size: 70
center_x: root.width * 3 / 4
top: root.top - 50
text: "0"
PongBall:
id: pong_ball
center: self.parent.center
Спасибо, что прочитали это.
РЕДАКТИРОВАТЬ: Я только что понял, что причина того, что мяч не отскакивает от правильного и верхнего правильно, вероятно, потому что он постоянно искажается. Я все еще не уверен, что вызывает искажения все же.
1 ответ
Вы устанавливаете размер шара, чтобы быть его позицией. В понг.кв
<PongBall>:
size: 50, 50
canvas:
Ellipse:
pos: self.pos
size: self.pos
должно быть
<PongBall>:
size: 50, 50
canvas:
Ellipse:
pos: self.pos
size: self.size