gpt4 book ai didi

python 碰撞检测?

转载 作者:行者123 更新时间:2023-11-28 18:44:14 27 4
gpt4 key购买 nike

所以我一直在为一个项目开发 python 游戏。我现在遇到了麻烦,如果我在游戏中设置障碍,我无法让它响应我的图片,就像我的图片与它碰撞时一样,游戏结束。我已经用了很长一段时间了,但我无法弄清楚代码。任何帮助将不胜感激。我真的需要帮助。请注意我是初学者,我刚开始学习 python a一个月前。所以请尝试理解。我附上了下面的代码。

import pygame, random, sys
from pygame.locals import *
BACKGROUNDCOLOR = (181, 230, 29)
FPS = 30
pixels = 5


pygame.init()
mainClock = pygame.time.Clock()
windowSurface = pygame.display.set_mode((990, 557))
pygame.display.set_caption('Clumsy Claire :D')

background = pygame.image.load('grass.jpg')
backgroundRect = background.get_rect()
size = (990, 557)
background.get_size()

image = pygame.image.load('snail 2.png')
imageRect = image.get_rect()

stone1 = pygame.image.load('rock.PNG')
stone1Rect = stone1.get_rect()
stone2 = pygame.image.load('rock.PNG')
stone2Rect = stone2.get_rect()


BROWN = (128,64,0)
pygame.draw.line(background, BROWN, (98, 555), (98,69), 12)
pygame.draw.line(background, BROWN, (98, 16), (98,1), 12)
pygame.draw.line(background, BROWN, (94, 3), (283, 3),12)
pygame.draw.line(background, BROWN, (278, 457), (278, 3),12)
pygame.draw.line(background, BROWN, (278, 554), (278, 512),12)
pygame.draw.line(background, BROWN, (274, 554), (470, 554),12)
pygame.draw.line(background, BROWN, (465, 554), (465, 90),12)
pygame.draw.line(background, BROWN, (465, 35), (465, 0),12)
pygame.draw.line(background, BROWN, (465, 3), (657, 3),12)
pygame.draw.line(background, BROWN, (652,555 ), (652, 502),12)
pygame.draw.line(background, BROWN, (652, 449), (652, 0),12)
pygame.draw.line(background, BROWN, (648, 553), (844, 553),12)
pygame.draw.line(background, BROWN, (838, 553 ), (838, 138),12)
pygame.draw.line(background, BROWN, (838, 84 ), (838, 0),12)

while True:
imageRect.topleft = (10,488)
moveLeft = False
moveRight = False
moveUp = False
moveDown = False

while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_LEFT:
moveLeft = True
if event.key == K_RIGHT:
moveRight = True
if event.key == K_UP:
moveUp = True
if event.key == K_DOWN:
moveDown = True

if event.type == KEYUP:
if event.key == K_LEFT:
moveLeft = False
if event.key == K_RIGHT:
moveRight = False
if event.key == K_UP:
moveUp = False
if event.key == K_DOWN:
moveDown = False

if moveLeft and imageRect.left > 0:
imageRect.move_ip(-1 * pixels, 0)
if moveRight and imageRect.right < 990:
imageRect.move_ip(pixels, 0)
if moveUp and imageRect.top > 0:
imageRect.move_ip(0, -1 * pixels)
if moveDown and imageRect.bottom < 557:
imageRect.move_ip(0, pixels)

windowSurface.blit(background, backgroundRect)
windowSurface.blit(image, imageRect)
rock1 = background.blit(stone1,(658,337))
rock2 = background.blit(stone2,(225,150))


pygame.display.update()

mainClock.tick(FPS)

最佳答案

您需要在您的代码中添加一个colliderect 函数。现在你没有办法测试碰撞。将其粘贴到您的 blit 代码下方:

if imageRect.colliderect(stone1Rect):
print('Game Over')
pygame.quit()
if imageRect.colliderect(stone2Rect):
print('Game Over')
pygame.quit()

这里的代码:

rock1 = background.blit(stone1,(658,337))
rock2 = background.blit(stone2,(225,150))

还需要改成这样:

windowSurface.blit(stone1, (658, 337))
windowSurface.blit(stone2, (225, 150))

我们需要更改以上内容的原因是:您的代码在背景图像而不是窗口上进行 blitting;这是一种不好的做法。

出于某种原因,我猜你正在从 inventwithpython.org 学习 python ;D 这也是我学习它的方式(如果我的猜测是正确的;D)

如果您需要更多帮助或有任何疑问,请在下方发表评论。祝你好运!

关于 python 碰撞检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22307279/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com