微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pygame: 在 pygame 中运行脚本后立即关闭屏幕,说精灵发生了碰撞

如何解决Pygame: 在 pygame 中运行脚本后立即关闭屏幕,说精灵发生了碰撞

我正在编写一个 pygame 代码来制作汽车游戏。这是一个基本的汽车游戏,英雄精灵汽车应该避免接触敌人的精灵,所以如果它接触到敌人的汽车就会关闭屏幕。但是当我运行脚本时它会立即关闭说精灵发生了碰撞 代码如下:

import pygame
from pygame.locals import *
import sys
import random
 
        
road = pygame.image.load(r"C:\Users\Binoy\Downloads\ezgif.com-gif-maker-0.jpg")
screen = pygame.display.set_mode((800,600))
class Enemy(pygame.sprite.Sprite):
    def __init__(self,image):
        pygame.sprite.Sprite.__init__(self) #call Sprite initializer
        self.image = pygame.image.load(image)
        self.rect=self.image.get_rect()
        self.mask = pygame.mask.from_surface(self.image)
        

class Hero(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self) #call Sprite initializer
        self.image = pygame.image.load("Untitled.png")
        self.rect=self.image.get_rect()
        self.mask = pygame.mask.from_surface(self.image)
hero=Hero()
enemy = Enemy("enemy.png")
enemy2 = Enemy("enemy 2.0.png")
enemy3 = Enemy("enemy 3.0.png")
enemy4 = Enemy("enemy 4.0.png")
enemies = pygame.sprite.Group([enemy,enemy2,enemy3,enemy4])

veLocity = 2
roadx = 0
roady = 0
x=200 
y=400
y1=50
y2=350

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type== pygame.KEYDOWN and event.key ==pygame.K_LEFT:
            x-=200
            if x==-200:
                x=0
        elif event.type== pygame.KEYDOWN and event.key ==pygame.K_RIGHT:
            x+=200
            if x==800:
                x=600
        elif pygame.sprite.spritecollide(hero,enemies,True,pygame.sprite.collide_mask):
            print("sprites have collided!")
            pygame.quit()
            sys.exit() 
              
    

    roady = roady + veLocity
    if roady == 600:
        roady = 0
    y=y-2
    y1-=2
    y2-=2
    if y==0:
        y=600
    if y1==0:
        y1=600 
    if y2==0:
        y2=600
    screen.blit(road,[roadx,roady -600])
    screen.blit(road,roady])
    screen.blit(pygame.transform.scale(enemy.image,(150,150)),[0,y1-600])
    screen.blit(pygame.transform.scale(enemy.image,y1])
    screen.blit(pygame.transform.scale(enemy2.image,[400,y1-600])
    screen.blit(pygame.transform.scale(enemy2.image,y1])
    screen.blit(pygame.transform.scale(enemy3.image,[610,y2-600])
    screen.blit(pygame.transform.scale(enemy3.image,y2])
    screen.blit(pygame.transform.scale(enemy4.image,[200,y-600])
    screen.blit(pygame.transform.scale(enemy4.image,y])
    screen.blit(pygame.transform.scale(hero.image,[x,250])
    pygame.display.update()

那么任何人都可以在此代码中帮助我们并给出错误解决方案。谢谢。

编辑 1:

我只是试图显示形成的矩形。所以当我运行脚本时,我看到了这个:

Screenshot of the problem

但是我无法改变矩形的位置。那么我们如何改变形成的矩形的位置呢? 谢谢

解决方法

pygame.sprite.spritecollide 使用 rect 对象的 pygame.sprite.Sprite 属性进行碰撞测试。使用 rect 属性的位置而不是全局变量。至少你必须在碰撞测试之前更新 rect 属性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。