py_llwss 2023-12-03 20:14 采纳率: 100%
浏览 4
已结题

Python的pygame写代码遇到的问题

最近找了点pygame的文章看了看,就照着写了个小游戏,但还没写完。有一个bug我一直都想不通,先看代码

import sys  # 导入sys模块
import pygame  # 导入pygame模块

pygame.init()  # 初始化pygame,检查游戏需要的一些硬件调用接口、系统功能接口是否有问题
size = width, height = 960, 650  # 设置窗口大小
screen = pygame.display.set_mode(size)  # 显示窗口但是执行完程序就会关闭窗口

dimian = pygame.image.load("地面.png")
fzdimian=dimian.get_rect

caofangkuai = pygame.image.load("草方块.png")  # 加载图片
fzcaofangkuai = caofangkuai.get_rect()  # 根据图片大小获取矩形区域

clock=pygame.time.Clock()

yx=0
yy=0


screen.fill((10, 240, 235))
screen.blit(dimian, (0, 185))

while True:
    caofangkuaixy = [yx, yy]
    fzcaofangkuai = fzcaofangkuai.move(caofangkuaixy)
    screen.blit(caofangkuai, fzcaofangkuai)
    #screen.blit(dimian, (0, 185))
    #screen.blit(caofangkuai, fuzhicaofangkuai)

    # 获取所有的事件,例如点击窗口的时间、按下键盘的事件。由于事件的类型很多,程序不知道发生了哪一类事件所以需要不断的循环判断
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 如果点击关闭窗口,则退出
            pygame.quit()  # 退出pygame
            sys.exit()  # 推出系桶
    if event.type == pygame.KEYDOWN and event.key == pygame.K_d:
        yx+=2
    if event.type == pygame.KEYDOWN and event.key == pygame.K_a:
        yx-= 2
    yx*=0.9

    clock.tick(60)
    pygame.display.flip()  # 更新全部显示


img


为什么他会变成这个样子

  • 写回答

2条回答 默认 最新

  • 梦回阑珊 2023-12-03 20:26
    关注

    回复不易,麻烦关注下博主,后面还有问题直接私信我,谢谢!!!

    在你的代码中,存在一个缩进错误,导致 if event.type == pygame.KEYDOWN and event.key == pygame.K_d: 和 if event.type == pygame.KEYDOWN and event.key == pygame.K_a: 这两行判断语句不在事件循环内。正确的写法应该是将这两行移动到事件循环内部。此外,你还需要在事件循环外初始化 yx 和 yy。

    下面是修改后的代码:

    import sys
    import pygame
    
    pygame.init()
    size = width, height = 960, 650
    screen = pygame.display.set_mode(size)
    
    dimian = pygame.image.load("地面.png")
    fzdimian = dimian.get_rect()
    
    caofangkuai = pygame.image.load("草方块.png")
    fzcaofangkuai = caofangkuai.get_rect()
    
    clock = pygame.time.Clock()
    
    yx = 0
    yy = 0
    
    screen.fill((10, 240, 235))
    screen.blit(dimian, (0, 185))
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN and event.key == pygame.K_d:
                yx += 2
            if event.type == pygame.KEYDOWN and event.key == pygame.K_a:
                yx -= 2
        yx *= 0.9
        
        caofangkuaixy = [yx, yy]
        fzcaofangkuai = fzcaofangkuai.move(caofangkuaixy)
        screen.blit(caofangkuai, fzcaofangkuai)
    
        clock.tick(60)
        pygame.display.flip()
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 创建了问题 12月3日

悬赏问题

  • ¥20 Github上传代码没有contribution和activity记录
  • ¥20 SNETCracker
  • ¥15 数学建模大赛交通流量控制
  • ¥15 为什么我安装了open3d但是在调用的时候没有报错但是什么都没有发生呢
  • ¥50 paddleocr最下面一行似乎无法识别
  • ¥15 求某类社交网络数据集
  • ¥15 靶向捕获探针方法/参考文献
  • ¥15 很抱歉出现错误word不能启动(24),如何解决?
  • ¥15 javascript下载网络图片
  • ¥15 excel中的填充效果 对应poi的哪个对象啊