У меня проблема с моим платформером, на данный момент я просто делаю игровой движок, а не игру. Однако, когда я нажимаю на шпору, чтобы идти вверх или вниз, чтобы спуститься, я поднимаюсь один раз и когда я выпущу ключ, я вернусь в свое первоначальное местоположение. пожалуйста, помогите, у меня нет сообщения об ошибке. Я хотел бы непрерывное движение, пока я не отпустите клавишуПроблема с вертикальным перемещением Pygame platformer
import pygame
white = (255, 255, 255)
black = ( 0, 0, 0)
gray = ( 90, 90, 90)
silver = (200, 200, 200)
red = (255, 0, 0)
green = ( 0, 255, 0)
blue = ( 0, 0, 255)
class Block (pygame.sprite.Sprite):
def __init__(self, colour = blue, width = 64, height = 64):
super (Block, self).__init__()
self.image = pygame.Surface((width, height))
self.image.fill(colour)
self.set_properties()
self.sound = pygame.mixer.Sound("Rain_Inside_House-Mark_DiAngelo-323934112.wav")
self.hspeed = 0
self.vspeed = 0
def set_properties(self):
self.rect = self.image.get_rect()
self.origin_x = self.rect.centerx
self.origin_y = self.rect.centery
def change_speed(self, hspeed, vspeed):
self.hspeed += hspeed
self.vspeed += vspeed
def set_position(self, x, y):
self.rect.x = x - self.origin_x
self.rect.y = y - self.origin_y
def set_image(self, filename = None):
if (filename != None):
self.image = pygame.image.load (filename)
self.set_properties()
def play_sound(self):
self.sound.play
def update(self):
self.rect.x += self.hspeed
self.rect.y =+ self.vspeed
if (__name__ == "__main__"):
pygame.init()
window_size = window_width, window_height = 640, 480
window = pygame.display.set_mode(window_size, pygame.RESIZABLE)
pygame.display.set_caption("The Legend of Tetsuo")
window.fill(white)
clock = pygame.time.Clock()
frames_per_second = 40
block_group = pygame.sprite.Group()
a_block = Block()
a_block.set_image("beaten_brick_tiled.png")
a_block.set_position(window_width/2, window_height/2)
block_group.add(a_block)
another_block = Block(red)
another_block.set_position(window_width/2, window_height/2)
block_group.add(a_block, another_block)
font = pygame.font.SysFont("Times New Roman, Arial", 30)
message = previous_message = None
message = ("")
running = True
while (running) :
for event in pygame.event.get():
if (event.type == pygame.QUIT)or \
(event.type == pygame.KEYDOWN and \
(event.key == pygame.K_ESCAPE or event.key == pygame.K_q)):
running = False
if (event.type == pygame.KEYDOWN):
if (event.key == pygame.K_LEFT):
a_block.change_speed(-5, 0)
if (event.key == pygame.K_RIGHT):
a_block.change_speed(5, 0)
if (event.key == pygame.K_SPACE):
a_block.change_speed(0, -5)
if (event.key == pygame.K_DOWN):
a_block.change_speed(0, 5)
if (event.type == pygame.KEYUP):
if (event.key == pygame.K_LEFT):
a_block.change_speed(5, 0)
if (event.key == pygame.K_RIGHT):
a_block.change_speed(-5, 0)
if (event.key == pygame.K_SPACE):
a_block.change_speed(0, 5)
if (event.key == pygame.K_DOWN):
a_block.change_speed(0, -5)
print a_block.hspeed, a_block.vspeed
clock.tick(frames_per_second)
window.fill(white)
a_block.update()
block_group.draw(window)
pygame.display.update()
pygame.quit()
Ваш код делает именно то, что вы объяснили: он называет 'a_block.change_speed (0, -5)' двигаться вверх, когда пробел нажата, и 'a_block.change_speed (0, 5) ', чтобы вернуться назад при освобождении пробела. Что ты пытаешься сделать? – Celeo
он не перемещает спрайт непрерывно. он заставляет спрайт перемещаться вверх или вниз на пять пикселей, а затем останавливается, и когда он отпускается, он возвращается в исходное положение – user3921501
. Я использовал тот же самый код для горизонтального перемещения, и он перемещается непрерывно (кроме как с vspeed, а не hspeed). – user3921501