Nov-05-2022, 10:07 PM
Im making a game and player spawn is off Ive tried tutorials other forums stack overflow and I havent found anything here is a photo and my code
from pickle import FALSE import pygame from pygame.locals import * pygame.init() Clock = pygame.time.Clock() fps = 60 screen_width = 800 screen_height = 800 screen = pygame.display.set_mode((screen_width,screen_height)) pygame.display.set_caption('Platformer') #define game variables tile_size = 40 #load images bg_img = pygame.image.load("sky.png") sun_img = pygame.image.load("sun.png") #draw player onto the screen class Player(): def __init__(self, x, y): self.images_right = [] self.images_left = [] self.index = 0 self.count = 0 for num in range (1,3): img_right = pygame.image.load(f'guy{num}.png') img_right = pygame.transform.scale(img_right, (30, 60)) img_left = pygame.transform.flip(img_right, True, False) self.images_right.append(img_right) self.images_left.append(img_left) self.image = self.images_right[self.index] self.rect = self.image.get_rect() self.rect.x = x self.rect.y = y self.width = self.image.get_width() self.height = self.image.get_height() self.vel_y = 0 self.jumped = False self.direction = 0 def update(self): dx = 0 dy = 0 walk_cooldown = 15 #draw player onto the screen key = pygame.key.get_pressed() if key[pygame.K_SPACE] and self.jumped == False: self.vel_y = -15 self.jumped = True if key[pygame.K_SPACE] == False: self.jumped = False if key[pygame.K_RIGHT]: dx += 5 self.count += 1 self.direction = 1 if key[pygame.K_LEFT]: dx -= 5 self.count += 1 self.direction = -1 if key[pygame.K_LEFT] == False and key[pygame.K_RIGHT] == False: self.counter = 0 self.index = 0 if self.direction == 1: self.image = self.images_right[self.index] if self.direction == -1: self.image = self.images_left[self.index] #handle Animation if self.count > walk_cooldown: self.count = 0 self.index += 1 if self.index >= len(self.images_right): self.index = 0 if self.direction == 1: self.image = self.images_right[self.index] if self.direction == -1: self.image = self.images_left[self.index] #add gravity self.vel_y += 1.5 if self.vel_y > 10: self.vel_y = 10 dy += self.vel_y #check for collision for tile in world.tile_list: # check for collision in yt direction if tile[1].colliderect(self.rect.x, self.rect.y + dy, self.width, self.height): # check if below the ground i.e jumping if self.vel_y < 0: dy = tile[1].bottom - self.rect.top if self.vel_y >= 0: dy = tile[1].top - self.rect.bottom #update player coordinates self.rect.x += dx self.rect.y += dy if self.rect.bottom > screen_height: self.rect.bottom = screen_height dy = 0 screen.blit(self.image, self.rect) pygame.draw.rect(screen, (255, 0, 255), self.rect, 2) class World(): def __init__(self, data): self.tile_list = [] #load images dirt_img = pygame.image.load("dirt.png") grass_img = pygame.image.load("grass.png") row_count = 0 for row in data: col_count = 0 for tile in row: if tile == 1: img = pygame.transform.scale(dirt_img, (tile_size, tile_size)) img_rect = img.get_rect() img_rect.x = col_count * tile_size img_rect.y = row_count * tile_size tile = (img, img_rect) self.tile_list.append(tile) if tile == 2: img = pygame.transform.scale(grass_img, (tile_size, tile_size)) img_rect = img.get_rect() img_rect.x = col_count * tile_size img_rect.y = row_count * tile_size tile = (img, img_rect) self.tile_list.append(tile) col_count += 1 row_count += 1 def draw(self): for tile in self.tile_list: screen.blit(tile[0], tile[1]) pygame.draw.rect(screen, (255, 255, 255), tile[1], 2 ) world_data = world_data = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,], [1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 1,], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 2, 2, 1,], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 5, 0, 0, 0, 1,], [1, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 1,], [1, 7, 0, 0, 2, 2, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1,], [1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 7, 0, 0, 0, 0, 1,], [1, 0, 2, 0, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,], [1, 0, 0, 2, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0, 0, 1,], [1, 0, 0, 0, 0, 0, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1,], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 1,], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 2, 2, 2, 2, 1,], [1, 0, 0, 0, 0, 0, 2, 2, 2, 6, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1,], [1, 0, 0, 0, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,], [1, 0, 0, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,], [1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,] ] player = Player(100, screen_height - 130) world = World(world_data) run = True while run: Clock.tick(fps) screen.blit(bg_img, (0,0)) screen.blit(sun_img, (100,100)) world.draw() player.update() for event in pygame.event.get(): if event.type == pygame.QUIT: run = False pygame.display.update() pygame.quit()