Создание уровней и добавление элементов управления - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь строить уровни в 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()
...