当前位置: 首页 > 知识库问答 >
问题:

Pygame碰撞检测

应嘉容
2023-03-14

所以我试图用Python和Pyplay创建一个益智平台游戏,但是我遇到了一点麻烦。当我为主要角色使用单点图像,而不是矩形图像时,如何制作碰撞检测器?我知道直角图像有左、右、顶部和底部像素功能(这对冲突检测非常有用),但是对于单片图像有这样的功能吗?或者我只需要为x和y坐标创建一个变量图像的宽度/高度?我试过用那个

import pygame, sys
from pygame.locals import *

WINDOWWIDTH = 400
WINDOWHEIGHT = 300
WHITE = (255, 255, 255)
catImg = pygame.image.load('cat.png')
catx = 0
caty = 0
catRight = catx + 100
catBot = caty + 100

moveRight = False

pygame.init()


FPS = 40 # frames per second setting
fpsClock = pygame.time.Clock()

# set up the window
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), 0, 32)
pygame.display.set_caption('Animation')


while True: # the main game loop
    DISPLAYSURF.fill(WHITE)

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == KEYDOWN:
            if event.key in (K_RIGHT, K_w):
                moveRight = True

        elif event.type == KEYUP:
            if event.key in (K_RIGHT, K_w):
                moveRight = False

    if catRight == WINDOWWIDTH:
        moveRight = False
    if moveRight == True:
        catx += 5

    DISPLAYSURF.blit(catImg, (catx, caty))


    pygame.display.update()
    fpsClock.tick(FPS)

但是catImg一直在通过窗户的尽头。我做错了什么?提前谢谢。

共有2个答案

丁昌翰
2023-03-14
if catRight >= WINDOWWIDTH:
        moveRight = False
        catright = WINDOWHEIGHT
    if moveRight == True:
        catx += 5

我想这就是你的错误所在。

宣原
2023-03-14

为了防止图像偏离右边缘,您需要计算其x坐标可以具有的最大值,并确保永远不会超过该值。因此,在循环之前,创建一个包含值的变量

CAT_RIGHT_LIMIT = WINDOWWIDTH - catImg.get_width()

然后在循环中检查它:

if catx >= CAT_RIGHT_LIMIT:
    moveRight = False
    catx = CAT_RIGHT_LIMIT
if moveRight == True:
    catx += 5

当然,您可以将此想法扩展到所有其他边缘。

 类似资料:
  • 我已经有一段时间了。我正在尝试用PyGame制作一个游戏,我到达了碰撞段,已经被卡住了一段时间,并且检查了一些线程。 这是我的代码(删除了中间的其他方法和条件语句,但保留了相关部分)。我对这个错误有点困惑,因为我在两个类init中都self.imageRect=self.image.get_rect(),但是我有这个错误。当程序试图在dog类中执行冲突检测部分时,该错误具体为: "属性错误:'Pe

  • 在开始学习相关知识点之前,我们有必要先学习精灵和碰撞检测的含义。 精灵(英文译为 Sprite),其实在一个游戏程序中,精灵本质指的是一张张小尺寸的图片,比如游戏中的各种道具、人物、场景装饰等,它们都可以看做成一张张小的“精灵”图。除此之外,人物的移动也可以看做是一系列小精灵图构成的序列(按帧组成的序列),如下图所示: 图1:动作逐帧分解图 如果将逐帧分解后的动作,按照一定的频率播放,那么就形成了

  • 我正在编写我的第一个Pyplay游戏。我试图进行冲突检测,但有时会奏效- 我尝试使用实际上我使用 这是我的碰撞代码: 我除了当我触摸尖峰,启动功能,但只是有时工作。

  • 我对Python非常陌生,最近我一直致力于在pyplay中创建一个小型的太空入侵者风格的游戏。然而,我几乎已经到达了终点,我想让它这样,如果敌人的船(块)与我的船(玩家)相撞,碰撞被检测到,移除我的两艘船并显示一个简短的“游戏结束”信息。 到目前为止,我有探测子弹和敌舰碰撞的代码,我重写了这个代码,如果我的船和敌舰碰撞,但是这个代码只有在我不开枪的情况下才有效,我也必须从一边移动到另一边为了检测到

  • 我正在用Python创建一个乒乓游戏(很明显),我是Pyplay的新手,所以我想要一些帮助,当球碰到桨时,它会反转速度,朝相反的方向移动。到目前为止,一切都正常,但是当球到达桨时,它会穿过桨,不会改变方向。我已经解决了,所以桨不会离开屏幕,当球遇到墙时,球会改变方向,但当球遇到桨时,不会。任何帮助或提示将不胜感激。 我的划桨课: 我的球课 我的目标是当球触到球拍或反弹(重叠点)时,使球的速度反向(

  • 我是蟒蛇/蟒蛇游戏的新手。我已经能够在小型测试程序中拼凑出一些东西,但试图掌握碰撞并没有发生。我尝试过学习多个教程,但我觉得我需要它完全分解,然后才能很好地理解它。 有人能解释一下像CollidRect(Rect)这样的东西是如何工作的吗?我需要一个碰撞函数的类,还是只需要两个矩形就可以得到结果? 我尝试使用的代码如下。我能够制作两个图像,每个图像都由一个矩形包围,我假设碰撞仅适用于精灵而不是图像