pygame中盒子的连续移动

2024-04-26

我编写了以下代码来创建一个简单的游戏,当您单击键盘上的箭头时,一个框会在游戏中移动一个单位。

我试图做到这一点,以便如果我按下任何箭头按钮,盒子将继续朝该方向移动,直到按下另一个箭头。因此,如果我按一次向右箭头而不是快速移动 +50 像素,它将在屏幕上连续移动,直到单击不同的箭头,然后它就会朝那个方向移动

import pygame #importing the pygame library

# some initializations
pygame.init()  # this line initializes pygame
window = pygame.display.set_mode( (800,600) ) # Create a window with   width=800 and height=600
pygame.display.set_caption( 'Rectangle move' ) # Change the window's name we create to "Rectangle move"
clock = pygame.time.Clock() # Clocks are used to track and control the frame-rate of a game (how fast and how slow the pace of the game)
                        # This line creates and initializes a clock.

# color definitions, using RBG color model.
black = (0,0,0)
white = (255,255,255)

# initial center position for the square (bob)
x,y = 0,0
lastKey=0
game_loop=True
while game_loop:
    for event in pygame.event.get():   # loop through all events
        if event.type == pygame.QUIT:
            game_loop = False # change the game_loop boolean to False to quit.
        if event.type == pygame.KEYDOWN: 
            lastKey = event.key
    #check last entered key
    #lastKey equals "LEFT", "RIGHT", "UP", "DOWN" --> do the required stuff!
    #set x coordinate minus 50 if left was pressed
    if lastKey == pygame.K_LEFT:
         x -= 50
    if lastKey == pygame.K_RIGHT:
         x += 50
    if lastKey == pygame.K_UP:
         y += 50
    if lastKey == pygame.K_DOWN:
         y -= 50
    if event.key == pygame.K_LEFT:
          x -= 50
    if event.key == pygame.K_RIGHT:
          x += 50
    if event.key == pygame.K_UP:
          y += 50
    if event.key == pygame.K_DOWN:
          y -= 50
 # draw and update screen
 window.fill( black ) # fill the screen with black overwriting even bob.
 pygame.draw.rect( window, white, (x, y, 50, 50) ) # draw bob on the screen with new coordinates after its movement.
                                                      # the parameters are as follows: window: is the window object you want to draw on. white: the object color used to fill the rectangle
                                                      # (x,y,50,50) x is the x position of the left side of the rectangle. y is the y position of the upper side of the rectangle. 
                                                      # In other words (x,y) is the coordinate of the top left point of the rectangle.
                                                      # 50 is the width, and 50 is the height
 pygame.display.update() #updates the screen with the new drawing of the rectangle.

#fps stuff:
 clock.tick(10) # this controls the speed of the game. low values makes the game slower, and large values makes the game faster.

 pygame.quit()

任何帮助将非常感激。


尝试将输入的密钥保存到变量中,并在事件循环后检查它。 像这样:

#...
lastKey = None
while game_loop:
    for event in pygame.event.get():   # loop through all events
        if event.type == pygame.QUIT:
            game_loop = False # change the game_loop boolean to False to quit.
        if event.type == pygame.KEYDOWN: 
            lastKey = event.key
    #check last entered key
    #lastKey equals "LEFT", "RIGHT", "UP", "DOWN" --> do the required stuff!
    #set x coordinate minus 50 if left was pressed
    if lastKey == pygame.K_LEFT
         x -= 50
    #<add the other statements here>
    #(...)

我建议不要使用那么多 if 语句。一段时间后可能会变得有点混乱。 检查以下问题以使您的代码保持简短:

Python 中 switch 语句的替代品? https://stackoverflow.com/questions/60208/replacements-for-switch-statement-in-python

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pygame中盒子的连续移动 的相关文章

  • Tkinter - 打开一个窗口并关闭另一个窗口

    我想要一个登录屏幕 当登录成功时 屏幕将关闭并创建一个新屏幕 问题是 当我执行以下代码时 两个屏幕同时打开 如果您有任何改进代码的建议 请提出 from Tkinter import import mysql connector impor
  • 多处理与 gevent

    目前我正在使用带有发布 订阅模式的 Zeromq 我有一个要发布的工作人员和许多 8 个订阅者 所有人都会订阅 相同的模式 现在我尝试使用多处理来生成订阅者 它可以工作 我错过了一些消息 我使用多重处理的原因是在每条消息到达时对其进行处理
  • 如何检查有效的电子邮件地址? [复制]

    这个问题在这里已经有答案了 有没有一种好方法可以使用正则表达式检查表单输入以确保它是正确样式的电子邮件地址 从昨晚开始就一直在搜索 如果它是子域名电子邮件地址 那么每个回答过人们有关该主题的问题的人似乎也有问题 无关紧要 即使您可以验证电子
  • 由于 __init__ 构造函数而产生的 Pytest 集合警告

    我一直在使用 Pytest 和 Selenium Web 驱动程序自学测试自动化 我所有的测试函数都在一个名为测试网络 py 它位于名为的目录中tests 我将所有函数分开 并将它们放在一个名为的单独目录中的自己的文件中测试用例 例如 这就
  • 使用 NumPy 数组执行分组平均值和标准差

    我有一组数据 X Y 我的自变量值 X 不是唯一的 因此有多个重复值 我想输出一个新数组 其中包含 X unique 它是 X 的唯一值的列表 Y mean 与 X unique 对应的所有 Y 值的平均值 Y std X unique对应
  • 使用 pandas 的 TimeGrouper() 按 1 秒的间隔查找列计数

    考虑由时间戳索引的数据帧 数据 如下所示 Index Receiver Type Retry 1970 01 01 00 00 00 000000000 R1 Data 1 1970 01 01 00 00 00 800000000 R1
  • 将 Django 模型映射到外部 API

    上下文 我有一个外部 API 提供数据并允许发布新数据或修补现有数据 API 响应示例 response requests get http api band 4 print response json id 4 name The Beat
  • 什么时候会在 dict 上使用键值对作为 dict.update 方法?

    我注意到你可以做两件事来更新字典 并且它们似乎有相同的结果 a a update foo 1 a a update foo 1 两者都会产生如下所示的字典结果 foo 1 是否有任何理由更喜欢使用字典或键 值对作为更新方法 它们在功能上是否
  • 为什么比较匹配的字符串比比较不匹配的字符串更快? [复制]

    这个问题在这里已经有答案了 这里有两个测量值 timeit timeit toto 1234 number 100000000 1 8320042459999968 timeit timeit toto toto number 100000
  • Python:球体的交集

    我对编程非常陌生 但我决定承担一个有趣的项目 因为我最近学会了如何以参数形式表示球体 当三个球体相交时 有两个不同的交点 除非它们仅在一个奇点处重叠 球体的参数表示 我的代码是根据答案修改的Python matplotlib 绘制 3d 立
  • 预期设备类型为 cuda 的对象,但在 Pytorch 中获得了设备类型 cpu

    我有以下计算损失函数的代码 class MSE loss nn Module metric L1 L2 norms or cosine similarity mode training or evaluation mode def init
  • 从 ipywidgets FileUpload 访问多个上传文件的内容

    我刚刚学习 ipywidgets 并在 Jupyter Notebook Python 3 中使用它们 基本上 我试图允许用户使用 FileUpload 上传多个文件 然后尝试访问这些文件的内容 以便我可以保存每个文件进入系统 我让它只适用
  • 如何在使用 python 下载时优雅地超时

    我正在循环下载大量文件 其中包含以下代码 try urllib urlretrieve url2download destination on local filesystem except KeyboardInterrupt break
  • Python:如何使用 struct.pack_into 将不同类型的数据打包到字符串缓冲区中

    我正在尝试将一些无符号 int 数据打包到使用创建的字符串缓冲区中ctypes create string buffer 这是以下代码段 以及显示错误的运行示例在键盘上 http codepad org S8nUWMcW import st
  • 在组织内部分发我的 python 模块

    我用 python 制作了一些模块 我想将它们分发到我的组织内 这些模块已经存储在BitBucket中 例如 有什么方法可以使用 pip install 来分发它们吗 正确的方法是什么 您可以从 GitHub 进行 pip 安装 并且应该能
  • 填充 MultiIndex Pandas Dataframe 中的日期空白

    我想修改 pandas MultiIndex DataFrame 以便每个索引组都包含指定范围内的日期 我希望每个组都用值 0 或NaN Group A Group B Date Value loc a group a 2013 06 11
  • 从Python中的URL中提取域[重复]

    这个问题在这里已经有答案了 我有一个像这样的网址 http abc hostname com somethings anything 我想得到 hostname com 我可以使用什么模块来完成此任务 我想在python2中使用相同的模块和
  • 在 Django 查询中与父级一起获取子级数据

    我有两个模型产品和产品包 产品包有一个产品型号的外键 我如何访问包含产品包的所有产品的列表 class Product models Model title models CharField verbose name Product Tit
  • 在 Python 中使用列表理解来执行类似于 zip() 的操作?

    我是一名 Python 新手 我想做的事情之一就是围绕列表理解进行思考 我可以看到这是一个非常强大的功能 值得学习 cities Chicago Detroit Atlanta airports ORD DTW ATL print zip
  • 如何使用 Python 从 Azure Functions 中的辅助线程重定向日志

    我正在使用 Azure 函数运行启动多个线程的 Python 脚本 出于性能原因 一切都按预期工作 但 Azure Functions 日志中仅显示来自 main 线程的信息日志 我在 main 中启动的 辅助 线程中使用的所有日志都不会出

随机推荐

  • 同一活动的多个通知

    我有一个正在从通知栏打开的活动 但是当我这样做时NotificationManager notify 我给意图一个不同的捆绑 以便每个通知打开相同的活动 但从数据库中获取彼此的其他信息 但是 当我尝试输入任何通知 例如有 3 个通知 时 它
  • C/C++ 有哪些突变测试框架?

    突变测试 https secure wikimedia org wikipedia en wiki Mutation testing已经出现有一段时间了 似乎至少有一两个针对 C C 的商业突变测试框架 你用过它们吗 你有什么经历 有没有开
  • 根据 1 的数量查找数字的排名

    令 f k y 其中 k 是非负整数递增序列中的第 y 个数 其二进制表示形式中的 1 数量与 k 相同 例如f 0 1 f 1 1 f 2 2 f 3 1 f 4 3 f 5 2 f 6 3 等等 给定 k gt 0 计算 f k 我们很
  • Google App Engine 电子邮件进入垃圾邮件文件夹

    当我使用邮件的 send mail 函数通过谷歌应用程序引擎发送电子邮件时 它们通常会被放置在收件人的 SPAM 文件夹中 虽然 GMail 帐户不会出现此问题 但 Yahoo Mail 帐户 可能还有其他几个帐户 会出现此问题 有没有办法
  • 将 JavaScript 中的大字符串与哈希进行比较

    我有一个带有文本区域的表单 其中可以包含使用多个第三方富文本编辑器之一编辑的大量内容 例如博客文章 我正在尝试实现类似自动保存功能的功能 如果内容发生更改 它应该通过ajax 提交内容 然而 我必须解决这样一个事实 我作为选项的一些编辑器不
  • IIS7 和 HTTP 状态代码处理

    我因试图对 IIS7 集成模式 中的错误呈现进行完整的编程控制而感到非常头疼 我想要做的是给出一个错误 找不到页面 内部服务器错误 未经过身份验证等 将整个请求传输到自定义 ASPX 或 HTML 我更喜欢后者 并使用正确的 HTTP 状态
  • 通过json在textview中显示数据

    我想通过php显示mysql数据库中的用户详细信息并将其显示在android textview中 场景是这样的 当用户登录到他的帐户时 他将被重定向到包含 4 个按钮的仪表板 即 新闻源 个人资料 日历和关于 当用户单击个人资料按钮时 用户
  • Angular 9 ngtypecheck

    更新到 Angular 9 后 我收到警告 src main ngtypecheck ts is part of the TypeScript compilation but it s unused Add only entry point
  • 如何在 Swift 中处理 NSUserDefaults 中的非可选值

    从中获取值NSUserDefaults我会做这样的事情 let userDefaults NSUserDefaults standardUserDefaults if let value userDefaults objectForKey
  • 如何将值从对象转换为 Nullable<> [重复]

    这个问题在这里已经有答案了 我有一些带有一些属性的类 我想将值从字符串转换为该属性的类型 我在转换为可为空类型时遇到问题 这是我的转换方法 public static object ChangeType object value Type
  • 绑定到 AvalonDock 2 中的 LayoutAnchorableItem 可见性

    我正在尝试绑定Visibility of LayoutAnchorableItem到 ViewModel 中的布尔值 以便我可以以编程方式显示和隐藏可锚定
  • .rmd 文件的访问名称并在 R 中使用

    我正在编织一个名为MyFile rmd 我如何访问该字符串MyFile在编织过程中并将其用于 在 YAML 标头的标题部分中使用 在后续的 R 块中使用 title r rmarkdown metadata title author My
  • 如何在maven antrun插件中执行输入任务

    我创建了一个 Maven 项目 我正在尝试运行外部脚本 在此外部脚本中 我使用 read 命令来提出问题并获得答案 如果我做一个 它会起作用sudo mvn 包 with 执行 maven 插件 http www mojohaus org
  • Android 位图图像缓存

    嗨 我正在 Android 中实现图像缓存 经历过这个 http developer android com training displaying bitmaps cache bitmap html http developer andr
  • 如何在滑块上方添加刻度和标签?

    我尝试使用 Slider 划分看起来不错 值 gt 50 10 20 但是 如何在滑块上方添加刻度和标签 Expect 勾选将根据滑块位置改变颜色 Actual Slider min 0 max 100 value value onChan
  • UITableView的separatorEffect属性有什么用?

    iOS 8 中的新功能是separatorEffect属性 您可以为其分配 UIVisualEffect 有谁知道这是做什么用的吗 我试过了 但我不认为它有任何 呃 视觉效果 我想知道完全相同的事情 所以我放了一个Github https
  • random.seed():它有什么作用?

    我有点困惑什么random seed 在 Python 中是这样的 例如 为什么下面的试验会 一致地 做他们所做的事情 gt gt gt import random gt gt gt random seed 9001 gt gt gt ra
  • wxPython:在现有 wx.Panel 上覆盖 wx.Panel 的好方法

    我有一个 wx Frame 其中有一个主 wx Panel 其中有几个小部件 我想要其中的一个按钮来启动 帮助面板 这个帮助面板可能是一个wx Panel 我希望它覆盖整个主wx Panel 不包括wx Frame的菜单栏 帮助按钮上应该有
  • 如何在 HTML 文件中包含 python 脚本?

    我该如何放置这个Python脚本 a f d s a x 1 scope vars for i in a scope x 1 print a x html 文件里面 像这样 如果你想创建一个html 不一定显示它 html file ope
  • pygame中盒子的连续移动

    我编写了以下代码来创建一个简单的游戏 当您单击键盘上的箭头时 一个框会在游戏中移动一个单位 我试图做到这一点 以便如果我按下任何箭头按钮 盒子将继续朝该方向移动 直到按下另一个箭头 因此 如果我按一次向右箭头而不是快速移动 50 像素 它将