ich bin gerade dabei pygame auszutesten, und jetzt geht es an die kollision von vierecken.
In meinem Spiel lasse ich über alle aktiven Gegner sowie über die Schüsse des Spielers vierecke zeichnen,
das problem ist das sie irgentwie immer kollidieren, auch wenn sie nicht kollidieren dürften.
Ich wäre sehr froh wenn mir einer von euch sagen könnte warum das passiert.
Code: Alles auswählen
import sys
import pygame
#Init game
pygame.init()
pygame.display.set_caption("Space")
display = pygame.display.set_mode((1000,700))
#Coords
ship_x = 100
ship_y = 100
#Moving
moving_l = 0
moving_r = 0
moving_u = 0
moving_d = 0
#Misc
health = 3
shots = []
enemys = []
gen_enem = 700
#Load Images
sprite_ship = pygame.image.load("res/space.png")
#Objects
#Shot
class shot():
def __init__(self,x_co,y_co,disp):
self.sprite_shot = pygame.image.load("res/shot.png")
self.x = x_co
self.y = y_co
self.display = disp
def move(self):
if self.y < 0:
return 0
self.y = self.y - 10
self.display.blit(self.sprite_shot,(self.x,self.y))
return 1
def __del__(self):
pass
def getRect(self):
return self.sprite_shot.get_rect()
#Enemy
class enemy():
def __init__(self,x_co,y_co,disp):
self.sprite_ship = pygame.image.load("res/enemy.png")
self.x = x_co
self.y = y_co
self.display = disp
self.shoot_delay = 0
def move(self):
if self.y > 1000:
return 0
self.y = self.y + 5
self.display.blit(self.sprite_ship,(self.x,self.y))
def __del__(self):
pass
def getRect(self):
return self.sprite_ship.get_rect()
#Main Loop
while 1:
#Get Events
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
moving_u = 1
if event.key == pygame.K_a:
moving_l = 1
if event.key == pygame.K_s:
moving_d = 1
if event.key == pygame.K_d:
moving_r = 1
if event.key == pygame.K_SPACE:
newsh = shot(ship_x - 59 / 2,ship_y - 62 - 1,display)
shots.append(newsh)
if event.type == pygame.KEYUP:
if event.key == pygame.K_w:
moving_u = 0
if event.key == pygame.K_a:
moving_l = 0
if event.key == pygame.K_s:
moving_d = 0
if event.key == pygame.K_d:
moving_r = 0
#Border
if moving_u == 1 and ship_y < 2:
moving_u = 0
if moving_d == 1 and ship_y > 699 - 62:
moving_d = 0
if moving_l == 1 and ship_x < 2:
moving_l = 0
if moving_r == 1 and ship_x > 999 - 59:
moving_r = 0
#Move Ship
if moving_l == 1:
ship_x = ship_x - 10
if moving_r == 1:
ship_x = ship_x + 10
if moving_u == 1:
ship_y = ship_y - 10
if moving_d == 1:
ship_y = ship_y + 10
#Clear Screen
display.fill((0,0,0))
#Render Shots
i = 0
while i < len(shots):
ex = shots[i].move()
if ex == 0:
shots.remove(shots[i])
i = i + 1
#Generate enemies
if gen_enem == 0:
gen_enem = 700
en = enemy(ship_x - 59 / 2,0,display)
enemys.append(en)
else:
gen_enem = gen_enem - 10
#Render Enemys
i = 0
while i < len(enemys):
ex = enemys[i].move()
if ex == 0:
enemys.remove(enemys[i])
i = i + 1
#Render Ship
display.blit(sprite_ship,(ship_x,ship_y))
#Collisions enemy - bullet
i = 0
while i < len(enemys):
rect_ene = enemys[i].getRect()
i2 = 0
while i2 < len(shots):
if shots[i2].getRect().colliderect(rect_ene):
enemys.remove(enemys[i])
break
i2 = i2 + 1
i = i + 1
#Flip
pygame.display.flip()
#Delay
pygame.time.delay(20)
Mfg Benni1000