Witam, wczoraj zacząłem uczyć się pygame i przy próbie zrobienia funkcji na skakanie okazuje się, że działa, ale gdy trzymam cały czas spację. Gdy puszczam to obiekt pozostaje w miejscu, w którym skończył, a jak wiadomo wolałbym aby dokończył skok.. Oto kod:
import pygame
class Player:
x = 20
y = 500
vel = 5
radius = 10
jump_vel = 5
m = 8
isJumping = False
def move_left(self):
self.x -= self.vel
def move_right(self):
self.x += self.vel
def jump(self):
self.isJumping = True
def update(self):
if self.isJumping:
if self.jump_vel > 0:
f = (self.jump_vel ** 2 * 0.5 * self.m)
else:
f = -(self.jump_vel ** 2 * 0.5 * self.m)
self.y -= f
self.jump_vel -= 0.5
if self.y >= 500:
self.y = 500
self.isJumping = False
self.jump_vel = 5
class App:
windowWidth = 500
windowHeight = 600
def __init__(self):
pygame.init()
self.win = pygame.display.set_mode((self.windowWidth, self.windowHeight))
pygame.display.set_caption("My first game")
self.isRunning = True
self.player = Player()
self.run()
def draw_player(self):
self.win.fill((0, 0, 0))
pygame.draw.circle(self.win, (250, 0, 0), (int(self.player.x), int(self.player.y)), int(self.player.radius))
def run(self):
while self.isRunning:
pygame.time.delay(10)
keys = pygame.key.get_pressed()
for event in pygame.event.get():
if event.type == pygame.QUIT or keys[pygame.K_ESCAPE]:
self.isRunning = False
if keys[pygame.K_LEFT]:
if self.player.x > self.player.vel:
self.player.move_left()
if keys[pygame.K_RIGHT]:
if self.player.x < (self.windowWidth - self.player.radius - self.player.vel):
self.player.move_right()
if keys[pygame.K_SPACE] or keys[pygame.K_UP]:
self.player.jump()
self.player.update()
self.draw_player()
pygame.display.update()
app = App()
pygame.quit()