So i have been trying to implement time delta in my shooter game so that on every pc it runs the same until now I just restricted it to 60fps. While trying to implement that my enemy sprites stoped moving and stoped at 0x 0y.
import pygame, sys, time, os
from random import randint
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.Surface((50, 50))
self.image.fill((255, 255, 255))
self.rect = self.image.get_rect(center=(screen_width / 2, screen_height / 2))
def update(self):
self.rect.center = pygame.mouse.get_pos()
def create_bullet(self):
return Bullet(pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1])
def create_enemy(self):
return Enemy(randint(50, screen_width - 50), -200)
def get_damage(self, amount):
if self.target_health > 0:
self.target_health -= amount
if self.target_health <= 0:
self.target_health = 0
class Bullet(pygame.sprite.Sprite):
def __init__(self, pos_x, pos_y):
super().__init__()
self.image = pygame.Surface((5, 25))
self.image.fill((255, 0, 0))
self.rect = self.image.get_rect(center=(pos_x, pos_y))
self.pos = self.image.get_rect(center=(pos_x, pos_y))
def update(self,dt):
self.pos.y -= 5 * dt
self.rect.y = round(self.pos.y)
if self.rect.y <= 0:
self.kill()
class Enemy(pygame.sprite.Sprite):
def __init__(self, pos_x, pos_y):
super().__init__()
self.image = pygame.Surface((50, 50))
self.image.fill((255, 100, 0))
self.rect = self.image.get_rect(center=(pos_x, pos_y))
self.pos = self.image.get_rect(center=(pos_x, pos_y))
somewhere over here is probably the problem when I multiplied the self.pos.y it stoped working
def update(self, dt):
self.pos.y += 5 * dt
self.rect.y = round(self.pos.y)
if self.rect.y >= screen_height + 200:
self.kill()
pygame.init()
clock = pygame.time.Clock()
screen_width, screen_height = 800, 800
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.mouse.set_visible(False)
obstacle_timer = pygame.USEREVENT + 1
pygame.time.set_timer(obstacle_timer, 150)
player = Player()
player_group = pygame.sprite.Group()
player_group.add(player)
bullet_group = pygame.sprite.Group()
enemy_group = pygame.sprite.Group()
here I get dt
prev_time = time.time()
while True:
dt = time.time() - prev_time
prev_time = time.time()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
bullet_group.add(player.create_bullet())
if event.type == obstacle_timer:
if randint(0, 2):
enemy_group.add(player.create_enemy())
screen.fill((30, 30, 30))
bullet_group.draw(screen)
bullet_group.update(dt)
collide_player_enemy = pygame.sprite.spritecollide(player, enemy_group, True)
collide_enemy_bullet = pygame.sprite.groupcollide(bullet_group, enemy_group, True, True)
for s in collide_player_enemy:
pygame.draw.rect(screen, (255, 255, 255), s.rect, 5, 1)
print('collide_player_enemy')
for x in collide_enemy_bullet:
pygame.draw.rect(screen, (255, 255, 255), x.rect, 5, 1)
print('collide_enemy_bullet')
player_group.draw(screen)
player_group.update()
over here I return the dt
enemy_group.draw(screen)
enemy_group.update(dt)
pygame.display.flip()
clock.tick(600)