У меня возникают проблемы с групповым столкновением. Я делаю игру с пистолетом, а мышь - это перекрестье. Когда я касаюсь enemy(group)
, столкновение не обнаружено, пока я не коснусь только врага в corner(0,0)
. Я хочу иметь возможность столкнуться со всеми врагами, движущимися по экрану. I с использованием pygame.sprite.spritecollideany()
для кода столкновения, и я использую sys.exit()
для вывода.Групповое обнаружение столкновений не работает должным образом
import pygame
import random
import sys
import os
from pygame.locals import *
#Initialize pygame
pygame.init()
#Window properties
window_width = 1366
window_height = 768
window = pygame.display.set_mode((window_width,window_height),pygame.FULLSCREEN)
pygame.display.set_caption("Sniper")
#Clock
clock = pygame.time.Clock()
#Movement
moveX = 1
moveY = 0
#Colors
black = (0,0,0)
white = (255,255,255)
blue = (0,0,64)
#Sprite groups
enemies = pygame.sprite.Group()
cursors = pygame.sprite.Group()
#Enemy
class Enemy(pygame.sprite.Sprite):
def __init__(self,x,y):
pygame.sprite.Sprite.__init__(self)
self.x = x
self.y = y
self.width = 25
self.height = 100
self.image = pygame.image.load('graphic\\sprite\\spr_enemy.png').convert()
self.rect = self.image.get_rect()
def update(self):
window.blit(self.image,(self.x,self.y))
#Player
class Player(pygame.sprite.Sprite):
def __init__(self,x,y):
pygame.sprite.Sprite.__init__(self)
self.x = x
self.y = y
self.width = 100
self.height = 25
self.image = pygame.image.load('graphic\\sprite\\spr_player.png').convert()
self.rect = self.image.get_rect()
def update(self):
window.blit(self.image,(self.x,self.y))
#Cursor
class Cursor(pygame.sprite.Sprite):
def __init__(self):
pygame.mouse.set_visible(False)
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load('graphic\\cursor\\crosshair.png').convert()
self.rect = self.image.get_rect()
def update(self,enemies):
self.rect.center = pygame.mouse.get_pos()
if (pygame.sprite.spritecollideany(self,enemies)):
sys.exit()
#Define sprites
player = Player(500,100)
cursor = Cursor()
cursors.add(cursor)
enemy = Enemy(0,0)
#Gameloop
gameLoop = True
while gameLoop:
for event in pygame.event.get():
if (event.type == pygame.QUIT):
gameLoop = False
#Keydown
if (event.type == pygame.KEYDOWN):
#Space key
if (event.key == pygame.K_SPACE):
x = random.randint(0,0)
y = random.randint(0,668)
enemies.add(Enemy(x,y))
#Escape key
if (event.key == pygame.K_ESCAPE):
sys.exit()
#Window color
window.fill(blue)
#Updating player
player.update()
#Updating enemy
for enemy in enemies:
enemy.x += moveX
enemy.update()
enemies.update()
enemies.draw(window)
#Updating cursor
cursors.update(enemies)
cursors.draw(window)
#FPS
clock.tick(60)
pygame.display.flip()
pygame.quit()
Спасибо за комментарий PythonMaster, но это не работает. Я сделал то, что вы сказали, и первая проблема, которая возникает, - это объект «bool», который нельзя назвать вызываемым, то есть True, который был помещен туда. Когда я удаляю True, игра работает так же, как и когда я впервые спросил здесь. – Krub
Вы использовали только 'pygame.sprite.spritecollide'? –
Извините! Я забыл изменить команду на 'pygame.sprite.spritecollide()'. Это должна быть проблема. Я отредактировал свой ответ, чтобы на самом деле быть правильным на этот раз ... –