首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Pygame -在pygame窗口周围移动一个方块,但在改变方向时无法停止当前的移动,导致方块沿对角线移动。

Pygame是一个用于开发2D游戏和多媒体应用程序的Python库。它提供了丰富的功能和工具,使开发者能够轻松创建交互式的游戏体验。

针对你提到的问题,方块沿对角线移动的原因是在改变方向时无法停止当前的移动。这是因为在每次循环中,方块都会根据当前的速度进行移动,而无论是否改变了方向。为了解决这个问题,我们可以使用一个变量来跟踪方块的当前速度,并在改变方向时将其设置为零。

下面是一个示例代码,展示了如何在pygame窗口周围移动一个方块,并在改变方向时停止当前的移动:

代码语言:txt
复制
import pygame
import sys

# 初始化pygame
pygame.init()

# 设置窗口尺寸
size = width, height = 800, 600
screen = pygame.display.set_mode(size)

# 设置方块的初始位置和速度
block_pos = [width // 2, height // 2]
block_speed = [0, 0]

# 游戏主循环
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

        # 检测按键事件
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                block_speed[0] = -1  # 向左移动
                block_speed[1] = 0   # 停止垂直移动
            elif event.key == pygame.K_RIGHT:
                block_speed[0] = 1   # 向右移动
                block_speed[1] = 0   # 停止垂直移动
            elif event.key == pygame.K_UP:
                block_speed[0] = 0   # 停止水平移动
                block_speed[1] = -1  # 向上移动
            elif event.key == pygame.K_DOWN:
                block_speed[0] = 0   # 停止水平移动
                block_speed[1] = 1   # 向下移动

    # 更新方块的位置
    block_pos[0] += block_speed[0]
    block_pos[1] += block_speed[1]

    # 绘制方块
    screen.fill((0, 0, 0))
    pygame.draw.rect(screen, (255, 255, 255), pygame.Rect(block_pos[0], block_pos[1], 50, 50))

    # 更新屏幕
    pygame.display.flip()

在这个示例中,我们使用了一个名为block_speed的列表来存储方块的速度。在按下方向键时,我们将相应的速度分量设置为非零值,以控制方块的移动方向。当方向键释放时,我们将速度分量设置为零,从而停止方块的移动。

这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。希望这能帮助到你!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

A*寻路初探(转载)

译者序:很久以前就知道了A*算法,但是从未认真读过相关的文章,也没有看过代码,只是脑子里有个模糊的概念。这次决定从头开始,研究一下这个被人推崇备至的简单方法,作为学习人工智能的开始。 这篇文章非常知名,国内应该有不少人翻译过它,我没有查找,觉得翻译本身也是对自身英文水平的锻炼。经过努力,终于完成了文档,也明白的A*算法的原理。毫无疑问,作者用形象的描述,简洁诙谐的语言由浅入深的讲述了这一神奇的算法,相信每个读过的人都会对此有所认识(如果没有,那就是偶的翻译太差了--b)。 原文链接:http://www.gamedev.net/reference/articles/article2003.asp以下是翻译的正文。(由于本人使用ultraedit编辑,所以没有对原文中的各种链接加以处理(除了图表),也是为了避免未经许可链接的嫌疑,有兴趣的读者可以参考原文。

01
  • 领券