Я пытаюсь строить уровни в Pygame, и пока я возился с элементами управления, я понял, что не знаю, как добавить прыгающий элемент управления / функцию. Я также не знаю, как построить платформу для моей игры.
Мне было интересно, кто-нибудь может помочь объяснить, как нарисовать платформу на экране и как реализовать прыжки. Я посмотрел на код других людей и не мог понять, как они сделали это, используя физику. Как можно использовать физику для осуществления прыжков?
import pygame, sys, random
from pygame.locals import *
#objects
class Player(pygame.sprite.Sprite):
#spawning the player
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.movex = 0
self.movey = 0
self.frame = 0 #counts frames
self.images = []
for i in range(1, 5): # cycles through each right and left picture
walkRight = pygame.image.load('right' + str(i) + '.png')
walkLeft = pygame.image.load('left' + str(i) + '.png')
char = pygame.image.load('faceforward.png')
#adds each movement and front facing image to a list
self.images.append(char)
self.images.append(walkRight)
self.images.append(walkLeft)
self.image = self.images[0]
self.rect = self.image.get_rect()
def control(self, x, y):
#player movement
self.movex += x
self.movey += y
def update(self):
self.rect.x = self.rect.x + self.movex
self.rect.y = self.rect.y + self.movey
#moving left
if self.movex < 0:
self.frame += 1
if self.frame > 3 * animation_cycles:
self.frame = 0
self.image = self.images[self.frame//animation_cycles]
#moving right
if self.movex > 0:
self.frame += 1
if self.frame > 3 * animation_cycles:
self.frame = 0
self.image = self.images[self.frame//animation_cycles + 4]
#setup
x = 720
y = 480
fps = 60
animation_cycles = 4
clock = pygame.time.Clock()
pygame.init()
screen = pygame.display.set_mode((x,y))
pygame.display.set_caption("Level test")
black = [0, 0, 0]
white = [255, 255, 255]
screen.fill(black)
player = Player()
player.rect.x = 0
player.rect.y = 0
player_list = pygame.sprite.Group() # puts players in a group
player_list.add(player)
steps = 10 #speed of movement
pygame.display.update()
#main loop
main = True
while main == True:
for event in pygame.event.get():
if event.type == pygame.locals.QUIT:
pygame.quit()
main = False
sys.exit() # makes sure that nothing gets updated after quitting
if event.type == pygame.KEYDOWN:
if event.key == K_ESCAPE:
pygame.quit()
main = False
sys.exit()
if event.key == K_LEFT:
player.control(-steps, 0)
if event.key == K_RIGHT:
player.control(steps, 0)
if event.key == K_SPACE:
if event.type == pygamre.KEYUP:
if event.key == K_LEFT:
player.control(steps, 0)
if event.key == K_RIGHT:
player.control(-steps, 0)
player_list.draw(screen) #draws sprite
pygame.display.update()
clock.tick(fps)
pygame.quit()
quit()