Как заставить круговой объект прыгать с помощью pygame? - PullRequest
2 голосов
/ 09 июля 2020

Я только начал использовать , и я застрял.

У меня нет синтаксических ошибок, но я уверен, что есть проблема с приведенным ниже кодом .

import pygame
import sys

pygame.init()
pygame.display.set_caption('Jumper Game')

display_width = 500
display_height = 500
the_game_is_on = True

ball_pos_x = 200
ball_pos_y = 500
ball_radius = 20
ball_color = [0,0,255]
speed = 1

is_jump = False
m = 1
v = 5

dis = pygame.display.set_mode((display_width,display_height)) #screen

while the_game_is_on:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and ball_pos_x > 20:
        ball_pos_x-= speed
    if keys[pygame.K_RIGHT] and ball_pos_x < (display_width - (ball_radius)):
        ball_pos_x+= speed
    if not (is_jump):
        if keys[pygame.K_UP] and ball_pos_y > 20:
            ball_pos_y-= speed
        if keys[pygame.K_DOWN] and ball_pos_y < (display_height - (ball_radius)):
            ball_pos_y+= speed
        if keys[pygame.K_SPACE]:
            is_jump = True
    else:
        f = (1/2)*m*(v**2)
        ball_pos_y-=f
        v-=1
        if v < 0:
            m = -1
        if v >= ((v+1)*-1): #to check the initial position
            is_jump = False
    pygame.time.delay(10)
    dis.fill((0,0,0))
    pygame.draw.circle(dis,ball_color,(ball_pos_x,int(ball_pos_y)),ball_radius)
    pygame.display.update()
pygame.display.quit()

Для написания кода для перехода я сослался на этот веб-сайт , исходный код на этом веб-сайте работает отлично.

Ответы [ 2 ]

2 голосов
/ 09 июля 2020

Вы должны вычислить m зависимость dnet от v < 0:

m = -1 if v < 0 else 1

Переход должен закончиться, если v < -5 и когда завершится переход, тогда v должен быть сбросить (v = 5):

jump_h = 5 # try 10 for higher jumps
v = jump_h

while the_game_is_on:
    # [...]

    if not is_jump:
        # [...]

    else:
        if v >= -jump_h:
            m = -1 if v < 0 else 1
            f = (1/2)*m*(v**2)
            v -=1
            ball_pos_y -= f
        else:
            is_jump = False
            v = jump_h

0 голосов
/ 09 июля 2020

Я думаю, вы набираете Python2 против Python3 разница:

$ python3
Python 3.7.7 (default, Mar 13 2020, 21:39:43) 
[GCC 9.2.1 20190827 (Red Hat 9.2.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> m = 1
>>> v = 5
>>> (1/2)*m*(v**2)
12.5

В Python2, 1 / 2 равно 0, но когда вы используете float: 1.0 / 2 is 0.5:

$ python2
Python 2.7.18 (default, Apr 21 2020, 18:49:31) 
[GCC 9.3.1 20200408 (Red Hat 9.3.1-2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> m = 1
>>> v = 5
>>> (1/2)*m*(v**2)
0
>>> (float(1)/2)*m*(v**2)
12.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...