我在main_screen上添加了一个对象/图像,这个对象称为cancer_cell。我在这里要做的是,我希望物体能平稳地移动。我必须重复按箭头键才能保持移动。如何使其移动while箭头键按下?
下面是代码:
exitgame = False
cellpos_x = 0
cellpos_y = cancer_cell.get_rect().height*2
while not exitgame:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exitgame = True
quitgame()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
cellpos_x -= 10
if event.key == pygame.K_RIGHT:
cellpos_x += 10
gameplay_bg = pygame.image.load("/Users/wolf/Desktop/python/img/gameplay_bg.png").convert()
main_screen.fill(white)
main_screen.blit(gameplay_bg, [0,0])
main_screen.blit(cancer_cell, [cellpos_x, cellpos_y])
pygame.display.flip()
clock.tick(20)有人告诉我在How to use pygame.KEYDOWN尝试这个解决方案:但这也不起作用。或者我做错了
if event.type == pygame.KEYDOWN:
key_pressed = pygame.key.get_pressed()
if key_pressed[pygame.K_LEFT]:
cellpos_x -= 10
if key_pressed[pygame.K_RIGHT]:
cellpos_x += 10发布于 2016-08-29 08:35:48
问题求解
我解决了这个问题,只从FOR循环中去掉了这个部分,而不是退出游戏:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exitgame = True
quitgame()
key_pressed = pygame.key.get_pressed()
if key_pressed[pygame.K_LEFT]:
cellpos_x -= 10
if key_pressed[pygame.K_RIGHT]:
cellpos_x += 10发布于 2016-08-29 09:15:56
我看到您已经解决了缩进问题,下面是您示例的另一个版本:
import pygame
class Player(object):
def __init__(self, img_path):
self.image = pygame.image.load(img_path)
self.x = 0
self.y = self.image.get_rect().height*2
def handle_keys(self):
key = pygame.key.get_pressed()
dist = 1
if key[pygame.K_RIGHT]:
self.x += dist
elif key[pygame.K_LEFT]:
self.x -= dist
def draw(self, surface):
surface.blit(self.image, (self.x, self.y))
pygame.init()
clock = pygame.time.Clock()
size = width, height = 1024, 768
speed = [2, 2]
white = 1, 1, 1
main_screen = pygame.display.set_mode(size)
gameplay_bg = pygame.image.load("background.jpg")
cancer_cell = Player("player.jpg")
running = False
while not running:
event = pygame.event.poll()
if event.type == pygame.QUIT:
running = True
main_screen.fill(white)
main_screen.blit(gameplay_bg, [0, 0])
cancer_cell.handle_keys()
cancer_cell.draw(main_screen)
pygame.display.flip()
clock.tick(50)
pygame.display.set_caption("fps: " + str(clock.get_fps()))您需要调整图像的路径("background.jpg","player.jpg"),使用此版本,您不会在游戏事件循环中反复加载sprite,玩家的移动将是平稳的。
https://stackoverflow.com/questions/39201171
复制相似问题