如何在 Pygame 中移动 Sprite

2023-12-26

我试图让我的图像(鸟)在屏幕上上下移动,但我不知道该怎么做,这就是我尝试过的,我确定它已经消失了,但我试图弄清楚是否有人可以提供帮助伟大的!

import pygame
import os

screen = pygame.display.set_mode((640, 400))

running = 1

while running:
    event = pygame.event.poll()
    if event.type == pygame.QUIT:
        running = 0
    screen.fill([255, 255, 255])
    clock = pygame.time.Clock()
    clock.tick(0.5)
    pygame.display.flip()

    bird = pygame.image.load(os.path.join('C:\Python27', 'player.png'))
    screen.blit( bird, ( 0, 0 ) )

    pygame.display.update()

class game(object):
    def move(self, x, y):
        self.player.center[0] += x
        self.player.center[1] += y


    if event.key == K_UP:
        player.move(0,5)
    if event.key == K_DOWN:
        player.move(0,-5)

game()

我试图让它在按下向下按钮时向下移动,在按下向上键时向上移动


正如 ecline6 所说,在这一点上,bird 是你最不用担心的。

考虑阅读这本书 http://inventwithpython.com/makinggames.pdf..

现在,首先让我们清理您的代码......

import pygame
import os

# let's address the class a little later..

pygame.init()
screen = pygame.display.set_mode((640, 400))
# you only need to call the following once,so pull them out of the  while loop.
bird = pygame.image.load(os.path.join('C:\Python27', 'player.png'))
clock = pygame.time.Clock()

running = True
while running:
    event = pygame.event.poll()
    if event.type == pygame.QUIT:
        running = False

    screen.fill((255, 255, 255)) # fill the screen
    screen.blit(bird, (0, 0))    # then blit the bird

    pygame.display.update() # Just do one thing, update/flip.

    clock.tick(40) # This call will regulate your FPS (to be 40 or less)

现在你的“鸟”不动的原因是:
当你 blit 图像时,即:screen.blit(bird, (0, 0)),
The (0,0)是恒定的,所以不会移动。

这是最终的代码,其中包含您想要的输出(尝试一下)并阅读注释:

import pygame
import os

# it is better to have an extra variable, than an extremely long line.
img_path = os.path.join('C:\Python27', 'player.png')

class Bird(object):  # represents the bird, not the game
    def __init__(self):
        """ The constructor of the class """
        self.image = pygame.image.load(img_path)
        # the bird's position
        self.x = 0
        self.y = 0

    def handle_keys(self):
        """ Handles Keys """
        key = pygame.key.get_pressed()
        dist = 1 # distance moved in 1 frame, try changing it to 5
        if key[pygame.K_DOWN]: # down key
            self.y += dist # move down
        elif key[pygame.K_UP]: # up key
            self.y -= dist # move up
        if key[pygame.K_RIGHT]: # right key
            self.x += dist # move right
        elif key[pygame.K_LEFT]: # left key
            self.x -= dist # move left

    def draw(self, surface):
        """ Draw on surface """
        # blit yourself at your current position
        surface.blit(self.image, (self.x, self.y))


pygame.init()
screen = pygame.display.set_mode((640, 400))

bird = Bird() # create an instance
clock = pygame.time.Clock()

running = True
while running:
    # handle every event since the last frame.
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit() # quit the screen
            running = False

    bird.handle_keys() # handle the keys

    screen.fill((255,255,255)) # fill the screen with white
    bird.draw(screen) # draw the bird to the screen
    pygame.display.update() # update the screen

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

如何在 Pygame 中移动 Sprite 的相关文章

  • 来自 python 的 FQL 多重查询因 unicode 查询而失败

    使用 python 2 6 5 和 facebook sdk 0 3 2 import facebook api facebook GraphAPI token api fql example u SELECT uid2 FROM frie
  • 默认情况下在 Jupyter 笔记本中配置第一个单元

    有没有办法为 Jupyter 笔记本中的特定 python 内核配置默认的第一个单元 我同意默认的 python 导入违背了良好的编码实践 那么 我可以配置笔记本 使新的 python 笔记本的第一个单元始终是 import numpy a
  • Python 将列表中的字符串转换为数字

    我遇到了以下错误消息 以 10 为基数的 int 的文字无效 2 2 外部用单引号括起来 内部用双引号括起来 该数据位于primes列出使用print primes 0 样本数据在primes list 2 3 5 7 The primes
  • cv2.face.mindistancepredictcollector() 错误

    我已经安装了带有额外模块的 opencv 3 1 0 但是当我尝试使用 gt gt gt s cv2 face MinDistancePredictCollector 它返回一个错误 Traceback most recent call l
  • int 对象在尝试对数字的数字求和时不可迭代? [复制]

    这个问题在这里已经有答案了 我有这个代码 inp int input Enter a number for i in inp n n i print n 但它抛出一个错误 int object is not iterable 我想通过将每个
  • ValueError:在 R 中使用 keras 模型时在用户代码中

    我正在尝试使用 R 在 R 中运行一维 CNNkeras包裹 我正在使用以下代码 library MASS library keras Create some data data Boston data lt Boston create a
  • 字母表中的加密和解密 - Python GCSE

    我目前正在尝试为学校编写一个程序 以便加密和解密输入的消息 我需要加密或解密的消息仅在字母表中 没有其他符号或密钥 例如 使用消息车加密输入的偏移量为 5 我希望它输出 afs 有人可以帮忙吗 这是我目前的代码 def find offse
  • 如何抑制 pyinstaller 生成的可执行文件窗口中的所有警告

    我已经使用 pyinstaller 从 python 文件生成了可执行文件 该程序按其应有的方式工作 但在我想隐藏的窗口中出现了一条警告消息 当 python 文件在 IDE 中运行时 以下行会抑制所有警告消息 warnings filte
  • 不重复的Python组合

    我有一个数字列表 我想从中进行组合 如果我有清单 t 2 2 2 2 4 c list itertools combinations t 4 结果是 2 2 2 2 2 2 2 4 2 2 2 4 2 2 2 4 2 2 2 4 但我想得到
  • 对于 pygtk 应用程序来说,什么是好的嵌入式浏览器?

    我计划在我的 pygtk 应用程序中使用嵌入式浏览器 并且我正在 gtkmozembed 和 pywebkitgtk 之间进行辩论 两者之间有什么引人注目的区别吗 还有我不知道的第三种选择吗 应该注意的是 我不会使用它来访问网络上的内容 我
  • Python3.1中的视图?

    Python3 1中的视图到底是什么 它们的行为方式似乎与迭代器类似 并且它们也可以具体化为列表 迭代器和视图有何不同 据我所知 视图仍然附加到创建它的对象上 对原始对象的修改会影响视图 来自docs http docs python or
  • 在 Docker 容器内运行时,如何自动在 API 路由文件中进行 FASTAPI 拾取更改?

    我通过 docker 运行 FastApi 在 docker compose 中创建一个名为 ingestion data 的服务 我的 Dockerfile FROM tiangolo uvicorn gunicorn fastapi p
  • 如何在树莓派上更新到最新的 python 3.5.1 版本?

    我昨天拿到了 Raspberry Pi 我已经在尝试用它来编写代码了 我有一个计划在其上运行的程序 但它仅与 Python 版本 3 5 0 或 3 5 1 兼容 并且我在互联网上找到的所有内容似乎都已经过时 与 Python 2 有关 或
  • 尝试修复我的功能

    我正在开发一个函数 我必须返回一个元组 其中第一个参数是最大数字的 str 第二个参数是 int 列表 这是示例以及我为该函数编写的内容 投票 G G N G C G 1 3 0 1 您必须将最大值的位置映射到正确的一方 parties N
  • 多线程写入文件

    前几天刚开始使用 python 对多线程的整个概念还很陌生 我在多线程时写入文件时遇到问题 如果我按照常规方式执行此操作 它会不断覆盖正在写入的内容 使用 5 个线程写入文件的正确方法是什么 不降低性能的最佳方法是在所有线程之间使用队列 每
  • 具有条件的重复行 pandas dataframe python

    我的数据框有问题 我的 df 是 product power brand product 1 3 x 1500W brand A product 2 2x1000W 1x100W product 3 1x1500W 1x500W brand
  • 在Python中引用不带换行符的长字符串

    我正在尝试在 Python 中编写一个长字符串 该字符串显示为 OptParser 选项的帮助项 在我的源代码 py 文件中 我想放置换行符 以便我的代码不会花费新行 但是 我不希望这些换行符影响代码运行时该字符串的显示方式 例如 我想写
  • 如何从python导入路径中删除当前目录

    我想使用 Mercurial 存储库hg本身 也就是说 我克隆了 Mercurialhttps www mercurial scm org repo hg https www mercurial scm org repo hg并想运行一些h
  • 用于桌面数据库应用程序的 Python 框架

    是否有一个框架可以为Python开发桌面数据库应用程序 一些带有CRUD屏幕的屏幕 我正在寻找类似于 Windows 窗体的东西 能够将 TextField Combos 和其他 UI 隐喻与datasets连接到关系数据库例如 MySQL
  • Python pip 安装错误 [SSL: CERTIFICATE_VERIFY_FAILED]

    我已经尝试解决这个问题有一段时间了 由于某种原因 我陷入了 ssl 问题 并且不知道发生了什么 问题 我已经安装了 python2 7 和 easy install2 7 但是当尝试使用 easy install2 7 安装 pip 时 出

随机推荐

  • 应用程序图标未设置,它始终显示默认的绿色 Android 图标

    我按照教程和其他堆栈溢出问题的建议执行了以下步骤 android icon mipmap ic launcher 在清单中 应用程序图标被命名为 ic launcher 并且所有 mipmap 都已根据分辨率进行了适当替换 将所有 mipm
  • 计算 Spark DataFrame 中非空值的数量

    我有一个包含一些列的数据框 在进行分析之前 我想了解数据框的完整性 所以我想过滤数据帧并计算每列非空值的数量 可能返回一个数据帧 基本上 我试图达到与中所表达的相同的结果这个问题 https stackoverflow com questi
  • Ada:从文件中读取

    我正在尝试读取一个包含单列的文件Long Float值在Ada如下 with Ada Text IO use Ada Text IO with Ada Long Float Text IO with Ada Sequential IO pr
  • 在编辑表单中管理状态并防止 Blazor 导航

    如果您的表单不干净 即数据已被编辑 您不希望允许用户离开表单 在 Blazor 表单中 编辑状态由EditContext很简单 将字段更改为新值 然后恢复为旧值 并且EditContext仍然相信这个领域已经发生了变化 您可以编写代码来禁用
  • Scrapy是单线程还是多线程?

    Scrapy 中的并发设置很少 例如CONCURRENT REQUESTS 数 http doc scrapy org en latest topics settings html concurrent requests 这是否意味着Scr
  • for循环中i++和++i之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的递增 何时使用 x 或 x https stackoverflow com questions 1812990 incrementing in c when to use x or x 有什么
  • MVC 中动态字段的验证

    我的模型看起来像 public class Template Id Title List
  • 计算 awk 中作为参数传递的算术表达式

    如何计算 awk 中作为参数传递的算术表达式 我在一个文件中有这个 1 2 3 1 2 3 当传入此文件时 awk 应该输出 6 7 awk 1 是错误的工具 因为它没有eval 功能 我建议将文件修改为输入bc 1 或使用 shell 算
  • Excel - 将日期从 yymmdd 转换为 dd/mm/yy

    我有一个从 Access 数据库导出的 Excel 文件 I have 25000记录 我需要更换所有记录 日期列未格式化 yymmdd 我需要将日期格式从 yymmdd 更改为 dd mm 19yy 为了yy我需要添加一个常量值19在它前
  • conemu + ssh 清除控制台历史记录

    我正在使用 ConEmu 并且对它完全满意 除了以下事实 如果我使用 PuTTY 进行 SSH 访问 那么我可以在远程计算机上运行命令 例如 vim 或 nano 或 mcedit 或其他打开某种诅咒界面的命令 并且我可以看到控制台命令历史
  • Slim PUT 返回 NULL

    我对 Slim 框架和 PUT 请求有疑问 我有一个小的 jQuery 脚本 它将在单击按钮时更新到期时间 expiry button click function event event preventDefault ajax url h
  • 将带有 .000Z 的日期字符串格式化为 NSDate

    我想将日期字符串格式化为 NSDate 对象 这听起来不是一件大事 要点是 日期字符串在时区值中包含一个点 而不是加号或其他内容 日期看起来像这样 2017 06 04T16 00 00 000Z 我尝试过格式化字符串 例如 yyyy MM
  • 从 Camel 路由向 Weblogic JMS 队列发送消息

    我正在尝试通过 Camel 路由将消息放入 Weblogic JMS 中的队列上 我的目标是最终配置一个路由来使用 jms 队列中的消息 我将先前路由中的数据发布到该队列 这是我的配置
  • WooCommerce - 获取产品页面的类别

    对于我的 WC 产品页面 我需要向 body 标记添加一个类 以便我可以执行一些自定义样式 这是我为此创建的函数 function my add woo cat class classes wooCatIdForThisProduct he
  • 在 JavaScript 中附加事件

    作为对此处问题之一的评论 一位评论者写道 强调我的 通过使用内联 onclick 您正在做类似的事情 但它更难维护并且更容易出现问题 整个 JavaScript 社区已经放弃内联 JavaScript 一段时间了 这是指使用以下方法将事件附
  • 优化图像 - 在 Java 中无损压缩图像

    拥有一个电子商务网站 我们有数千张产品图片 在谷歌上检查页面速度时 它向我显示了这样的内容 我想知道 Java 中是否有任何内置功能或任何第三方库可用 我们可以使用它们来无损压缩我们托管的所有图像 因此 我们可以为客户节省几KB 在互联网上
  • 一次性随机化

    我有一个矩阵 ECGsig 每行包含一个 1 秒长的 ECG 信号 我稍后会对它们进行分类 但我想随机更改行 例如 idx randperm size ECGsig 1 ECGsig ECGsig idx 但是我希望这种情况只发生一次 而不
  • 单击时我的 div 不会 SlideDown() 。

    我正在尝试在我正在组装的一个小网站上有一个下拉菜单 由于某种原因 我可以获取我想要向下滑动到 fadeOut 的 div 并执行其他类似的操作 但我无法将其获取到 SlideDown 我不知道为什么 上面有文字写着 菜单 jQuery 如下
  • 更改活动主题而不重新创建活动

    我有一个活动 在单击按钮时我想更改主题 但我发现主题只能设置一次 而且在 setContentView 之前也是如此 重新开始一项活动对我来说不是一个选择 也许使用 attrs 可以解决这个问题 但我不知道如何使用它 请帮忙 提前致谢 不
  • 如何在 Pygame 中移动 Sprite

    我试图让我的图像 鸟 在屏幕上上下移动 但我不知道该怎么做 这就是我尝试过的 我确定它已经消失了 但我试图弄清楚是否有人可以提供帮助伟大的 import pygame import os screen pygame display set