So I been trying make it so when my player presses d the screen will move but the player will stay in the middle of the screen, the problem I am having is that the code that I'm using to make it seem like the screen is moving is not working for me, the screen will move slower than the player even if I make the speed for the screen the same or faster than the player's speed. https://gyazo.com/1c74b0fc4729106af34d2a41c2b68f40 I am trying make the screen move left, right, and up.
the code I'm using that's not working
if keys[pygame.K_d] and playerman.x > 350:
for Platform in platforms:
Platform.x -= Platform.speed
if keys[pygame.K_a]and playerman.x < 350:
for Platform in platforms:
Platform.x += playerman.speed
My Full code
import pygame
pygame.init()
window = pygame.display.set_mode((700,500))
pygame.display.set_caption("Noobs First Game")
# Playerman
class Player:
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.speed = 5
self.isJump = False
self.JumpCount = 10
self.fall = 0
self.rect = pygame.Rect(x,y,height,width)
def get_rect(self):
self.rect.topleft = (self.x,self.y)
return self.rect
def draw(self):
pygame.draw.rect(window,self.color,self.get_rect())
class bullet(object):
def __init__(self,x,y,color):
self.x = x
self.y = y
self.color = color
self.speed = 10
self.color = color
self.rect.topleft = (self.x,self.y)
def draw(self):
self.rect.topleft = round(self.x), round(self.y)
pygame.draw.rect(window,self.color,self.rect)
class Platform:
def __init__(self,x,y,width,height,color):
self.x = x
self.y =y
self. width = width
self.color = color
self.height = height
self.color = color
self.speed = 4
self.rect = pygame.Rect(x,y,width,height)
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
# Colors for hitbox
white = (255,255,255)
green = (0,255,0)
# Drawing Player
playerman = Player(255,255,40,40,white)
#Drawing Platforms
platform1 = Platform(0,0,40,500,green)
platform2 = Platform(40,460,700,40,green)
# List
platforms = [platform1,platform2]
# Windows color
def redrawwindow():
window.fill((0,0,0))
# Drawing the player and other stuff to the screen
playerman.draw()
for Platform in platforms:
Platform.draw()
x = 10
y = 10
x_change = 0
y_change = 0
old_x = x
old_y = y
fps = (30)
clock = pygame.time.Clock()
run = True
while run:
clock.tick(fps)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_d:
x_change = -7
if event.key == pygame.K_a:
x_change = 7
if event.type == pygame.KEYUP:
if event.key == pygame.K_d or event.key == pygame.K_a:
x_change = 0
x += x_change
if x > 500 - playerman.width or x < 0:
x = old_x
# lets player move
keys = pygame.key.get_pressed()
px, py = playerman.x, playerman.y
if keys[pygame.K_a] and px > playerman.speed:
px -= playerman.speed
if keys[pygame.K_d] and px < 700 - playerman.height - playerman.speed:
px += playerman.speed
if keys[pygame.K_w] and py > playerman.speed:
py -= playerman.speed
if keys[pygame.K_s] and py <500 - playerman.width - playerman.speed:
py += playerman.speed
if keys[pygame.K_d] and playerman.x > 350:
for Platform in platforms:
Platform.x -= Platform.speed
if keys[pygame.K_a]and playerman.x < 350:
for Platform in platforms:
Platform.x += playerman.speed
platform_rect_list = [p.rect for p in platforms]
player_rect = playerman.get_rect()
player_rect.topleft = (px, py)
playerman.y = py
if player_rect.collidelist(platform_rect_list) < 0:
playerman.x = px
# About isJump
if not playerman.isJump:
playerman.y += playerman.fall
playerman.fall += 1
playerman.isJump = False
# this part lets you jump on platform only the top
collide = False
for Platform in platforms:
if playerman.get_rect().colliderect(Platform.rect):
collide = True
playerman.isJump = False
playerman.y = Platform.rect.top - playerman.height
if playerman.rect.right > Platform.rect.left and playerman.rect.left < Platform.rect.left - playerman.width:
playerman.x = Platform.rect.left - playerman.width
if playerman.rect.left < Platform.rect.right and playerman.rect.right > Platform.rect.right + playerman.width:
playerman.x = Platform.rect.right
# colliding with floor
if playerman.rect.bottom >= 500:
collide = True
playerman.isJump = False
playerman.Jumpcount = 10
playerman.y = 500 - playerman.height
# Jumping
if collide:
if keys[pygame.K_SPACE]:
playerman.isJump = True
py -= playerman.speed
playerman.fall = 0
# Jump Count
else:
if playerman.JumpCount >= 0:
playerman.y -= (playerman.JumpCount*abs(playerman.JumpCount))*0.3
playerman.JumpCount -= 1
else:
playerman.isJump = False
playerman.JumpCount = 10
redrawwindow()
pygame.display.update()
pygame.quit()
If you want the player to stay centered, remove the code that moves the player.
Try this updated code:
# lets player move
keys = pygame.key.get_pressed()
px, py = playerman.x, playerman.y
# if keys[pygame.K_a] and px > playerman.speed:
# px -= playerman.speed
# if keys[pygame.K_d] and px < 700 - playerman.height - playerman.speed:
# px += playerman.speed
# if keys[pygame.K_w] and py > playerman.speed:
# py -= playerman.speed
# if keys[pygame.K_s] and py <500 - playerman.width - playerman.speed:
# py += playerman.speed
if keys[pygame.K_d]: # and playerman.x > 350:
for Platform in platforms:
Platform.x -= Platform.speed
if keys[pygame.K_a]: # and playerman.x < 350:
for Platform in platforms:
Platform.x += playerman.speed
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.