简体   繁体   中英

How do I make my player move left and right at the middle of the screen

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM