Python Pygame:运行Pygame中的脚本后,屏幕立即关闭,表示精灵发生碰撞
我在写一个pygame代码来做一个汽车游戏。这是一款基本的汽车游戏,英雄精灵汽车应该避免与敌人的精灵接触,因此如果它与敌人的汽车接触,它会关闭屏幕。但是当我运行脚本说精灵发生碰撞时,它会立即关闭 代码如下:Python Pygame:运行Pygame中的脚本后,屏幕立即关闭,表示精灵发生碰撞,python,pygame,Python,Pygame,我在写一个pygame代码来做一个汽车游戏。这是一款基本的汽车游戏,英雄精灵汽车应该避免与敌人的精灵接触,因此如果它与敌人的汽车接触,它会关闭屏幕。但是当我运行脚本说精灵发生碰撞时,它会立即关闭 代码如下: import pygame from pygame.locals import * import sys import random road = pygame.image.load(r"C:\Users\Binoy\Downloads\ezgif.com-g
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, [roadx, roady])
screen.blit(pygame.transform.scale(enemy.image , (150, 150)), [0,y1-600])
screen.blit(pygame.transform.scale(enemy.image , (150, 150)), [0,y1])
screen.blit(pygame.transform.scale(enemy2.image , (150, 150)), [400,y1-600])
screen.blit(pygame.transform.scale(enemy2.image , (150, 150)), [400,y1])
screen.blit(pygame.transform.scale(enemy3.image, (150, 150)), [610, y2-600])
screen.blit(pygame.transform.scale(enemy3.image , (150, 150)), [610, y2])
screen.blit(pygame.transform.scale(enemy4.image, (150, 150)), [200, y-600])
screen.blit(pygame.transform.scale(enemy4.image , (150, 150)), [200, y])
screen.blit(pygame.transform.scale(hero.image , (150, 150)), [x, 250])
pygame.display.update()
因此,任何人都可以在这段代码中帮助我们,并给出错误的解决方案。多谢各位
编辑1:
我只是试着显示形成的矩形。所以当我运行脚本时,我看到:
但是我无法改变矩形的位置,那么我们如何改变矩形的位置呢?
感谢
pygame.sprite.spritecollide
使用pygame.sprite.sprite
对象的rect
属性进行碰撞测试。使用rect
属性的位置,而不是全局变量。至少在碰撞测试之前,您必须更新rect
属性。因为您立即调用该函数,它可能会重新运行True:pygame.sprite.spritecollide(英雄,敌人,True,pygame.sprite.collide\u掩码)
我还建议使用for循环来blit图像