Я следовал этому руководству: 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()
понг.кв
#: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
Спасибо, что прочитали это.
РЕДАКТИРОВАТЬ: я только что понял, что причина того, что мяч не отскакивает справа и сверху правильно, вероятно, заключается в том, что он постоянно искажается. Я все еще не уверен, что вызывает искажения, хотя.