Jun-07-2019, 06:08 PM
(This post was last modified: Jun-07-2019, 06:08 PM by cameron121901.)
(Jun-06-2019, 08:45 PM)Windspar Wrote: after screen.blit(farm_image, (0, 0))pygame.draw.rect(screen, pygame.Color('red'), char)
this need to go in main loop. After screen.blit(farm_image, (0,0))# Puts the fences on the screen for fence in fences: pygame.draw.rect(screen, pygame.Color('red'), fence)
Romove this. No longer used.# Coordinates of the rectangle (player) object x = 507 y = 60
If you want to make sure object stay on screen.# Initializes the window's title, width, and height screen = pygame.display.set_mode((720, 320)) rect = screen.get_rect()if moved: if moved.collidelist(fences) == -1 and rect.contains(moved): char = movedPygame Rect
If you don't do method above.if pressed[pygame.K_UP] and not pressed[pygame.K_DOWN]: if y != 3: moved = char.move(0, -3)Change to.if pressed[pygame.K_UP] and not pressed[pygame.K_DOWN]: if char.y != 3: moved = char.move(0, -3)If you did rect for stay on screen.if pressed[pygame.K_UP] and not pressed[pygame.K_DOWN]: moved = char.move(0, -3)
My Code Now:
# Allows the usage of the PyGame library import pygame # Initializes PyGame pygame.init() # RGB Colors red = (255, 0, 0) green = (0, 255, 0) blue = (0, 0, 255) # Bad Coordinates (Fence) # bad_coordinates = bad_x, bad_y = range(447, 528), 150 # Barrier minimum_x = 342 # Initializes the window's title, width, and height screen = pygame.display.set_mode((720, 320)) pygame.display.set_caption("New Game") # Loads the background image farm_image = pygame.image.load("farm_sprite.png").convert() # Fence Rectangles fences = ( pygame.Rect(455, 65, 20, 85), pygame.Rect(390, 65, 85, 20), pygame.Rect(390, 0, 20, 85), pygame.Rect(395, 0, 240, 20), pygame.Rect(615, 0, 20, 150), pygame.Rect(580, 130, 40, 20), pygame.Rect(455, 130, 80, 20) ) # Draw the player object onto the screen char = pygame.Rect(507, 60, 25, 40) # Keeps the while loop running done = False # Boolean to identify whether the player has unlocked the currently locked area unlocked = False # Creates a clock object to keep track of time clock = pygame.time.Clock() # Keeps the program running while not done: moved = None # Allows the user to exit by pressing the X button without throwing an error for event in pygame.event.get(): if event.type == pygame.QUIT: done = True # Assigns a list of the possible pressed keys to a variable pressed = pygame.key.get_pressed() # If the UP key is pressed, move the player upwards if pressed[pygame.K_UP] and not pressed[pygame.K_DOWN]: if char.y != 3: moved = char.move(0, -3) # If the DOWN key is pressed, move the player downwards if pressed[pygame.K_DOWN] and not pressed[pygame.K_UP]: if char.y != 279: moved = char.move(0, 3) # If the LEFT key is pressed, move the player to the left if pressed[pygame.K_LEFT] and not pressed[pygame.K_RIGHT]: if char.x != minimum_x and not unlocked: moved = char.move(-3, 0) # If the area is unlocked, allow the player to move in the area, as well as create a new barrier elif unlocked: if char.x != 3: moved = char.move(-3, 0) # If the RIGHT key is pressed, move the player to the right if pressed[pygame.K_RIGHT] and not pressed[pygame.K_LEFT]: if char.x != 693: moved = char.move(3, 0) if moved: if moved.collidelist(fences) == -1: char = moved # Place the background image on the window screen.blit(farm_image, [0, 0]) # Puts the fences on the screen for fence in fences: pygame.draw.rect(screen, pygame.Color('red'), fence) pygame.draw.rect(screen, pygame.Color('red'), char) # Update the full Surface to the screen pygame.display.flip() # Run the program at 60 frames per second clock.tick(60)I'm pretty sure I followed your instructions, yet, I can't press the up and right keys at the same time. I can only do one or the other, same goes for up-left, down-left, and down-right. And when I am pressing right-up, right-down, left-up, or left-down, while the the player is against a wall, it won't move.
How would I fix this? Did I not follow your instructions correctly?
P.S. - Thanks for helping me out!