首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >平缓运动

平缓运动
EN

Stack Overflow用户
提问于 2016-08-29 07:55:10
回答 2查看 1.1K关注 0票数 1

我在main_screen上添加了一个对象/图像,这个对象称为cancer_cell。我在这里要做的是,我希望物体能平稳地移动。我必须重复按箭头键才能保持移动。如何使其移动while箭头键按下?

下面是代码:

代码语言:javascript
复制
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尝试这个解决方案:但这也不起作用。或者我做错了

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-29 08:35:48

问题求解

我解决了这个问题,只从FOR循环中去掉了这个部分,而不是退出游戏:

代码语言:javascript
复制
    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
票数 0
EN

Stack Overflow用户

发布于 2016-08-29 09:15:56

我看到您已经解决了缩进问题,下面是您示例的另一个版本:

代码语言:javascript
复制
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,玩家的移动将是平稳的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39201171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档