Столкновение изменилось в Киви из -за использования ScreenManagerPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Столкновение изменилось в Киви из -за использования ScreenManager

Сообщение Anonymous »

Я пытаюсь использовать Kivy, чтобы изменить пример Pong Game, чтобы иметь главное меню. Мне потребовалось возраст, но я наконец -то получил систему меню для работы и запустил сам игровой объект на новом экране. Тем не менее, это сломало графику, и я не могу на всю жизнь понять, как их восстановить. Столкновение между мячом и лопастями все еще работает, но оно сильно смещено. Я понимаю, что это как -то связано с тем фактом, что ScreenManager использует относительный макет, где виджет по умолчанию, который я использовал до введения экранов, был абсолютным. Тем не менее, на этой странице описывается точная проблема, с которой я сталкиваюсь, где лопатки и мяч смещены от их предполагаемого центра, но предлагаемое решение настройки POS: 0,0 или просто удаление POS вообще не помогает, оно просто помещает все в нижний левый угол экрана, и теперь ничто не движется. Приведенный ниже код является моим первоначальным начальным кодом, который по -прежнему является наиболее функциональным из всего, что я пробовал.from kivy.app import App
from kivy.properties import NumericProperty, ReferenceListProperty, ObjectProperty
from kivy.uix.screenmanager import Screen, ScreenManager, NoTransition
from kivy.uix.widget import Widget
from kivy.vector import Vector
from kivy.clock import Clock

class PongPaddle(Widget):
score = NumericProperty(0)

def bounce_ball(self, ball):
if self.collide_widget(ball):
vx, vy = ball.velocity
offset = (ball.center_y - self.center_y) / (self.height / 2)
bounced = Vector(-1 * vx, vy)
vel = bounced * 1.1
ball.velocity = vel.x, vel.y + offset

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 PongGame(Widget):
ball = ObjectProperty(None)
player1 = ObjectProperty(None)
player2 = ObjectProperty(None)

def serve_ball(self, vel=(4, 0)):
self.ball.center = self.center
self.ball.velocity = vel

def update(self, dt):
self.ball.move()

self.player1.bounce_ball(self.ball)
self.player2.bounce_ball(self.ball)

if (self.ball.y < 0) or (self.ball.top > self.height):
self.ball.velocity_y *= -1

if self.ball.x < self.x:
self.player2.score += 1
self.serve_ball(vel=(4,0))
if self.ball.x > self.width:
self.player1.score += 1
self.serve_ball(vel=(-4,0))

def on_touch_move(self, touch):
if touch.x < self.width / 3:
self.player1.center_y = touch.y
if touch.x > self.width - self.width / 3:
self.player2.center_y = touch.y

class PongScreen(Screen):
def on_enter(self, *args):
game = PongGame()
self.add_widget(game)
game.serve_ball()
Clock.schedule_interval(game.update, 1 / 60)
return game

class PongMenu(Screen):
pass

class PongApp(App):
def build(self):
sm = ScreenManager(transition=NoTransition())
sm.add_widget(PongMenu(name="menu"))
sm.add_widget(PongScreen(name="game"))
return sm

if __name__ == "__main__":
PongApp().run()
< /code>
pong.kv
#:kivy 2.3.1

:
canvas:
Ellipse:
pos: self.pos
size: 50, 50

:
canvas:
Rectangle:
pos: self.pos
size: 25, 200

:
ball: pong_ball
player1: player_left
player2: player_right

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: str(root.player1.score)

Label:
font_size: 70
center_x: root.width * 3 / 4
top: root.top - 50
text: str(root.player2.score)

PongBall:
id: pong_ball
center: self.parent.center

PongPaddle:
id: player_left
x: self.parent.x
center_y: self.parent.center_y

PongPaddle:
id: player_right
x: self.parent.width - self.width
center_y: self.parent.center_y

:
start_btn: button_start

BoxLayout:
orientation: 'vertical'

Button:
id: button_start
text: "Start Game"
markup: True
width: 200
height: 200
on_press: root.manager.current = "game"


Подробнее здесь: https://stackoverflow.com/questions/797 ... eenmanager
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Kivy/md - Как изменить экраны с помощью ScreenManager, могу ли я сделать это таким образом...?
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Текущее свойство Kivy ScreenManager не находит экраны с указанным свойством имени
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Kivy с использованием ScreenManager из KV -файла
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Существует ли «отпечаток папки», позволяющий определить, изменилось ли содержимое папки между двумя моментами времени? Я
    Anonymous » » в форуме C#
    0 Ответы
    93 Просмотры
    Последнее сообщение Anonymous
  • Значение даты загрузки Java Spring изменилось после анализа
    Anonymous » » в форуме JAVA
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»