[英]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.所以我一直在尝试这样做,当我的播放器按下 d 时,屏幕会移动但播放器会停留在屏幕中间,我遇到的问题是我用来使它看起来像屏幕的代码是移动对我不起作用,即使我使屏幕的速度与玩家的速度相同或更快,屏幕的移动速度也会比玩家慢。 https://gyazo.com/1c74b0fc4729106af34d2a41c2b68f40 I am trying make the screen move left, right, and up.
https://gyazo.com/1c74b0fc4729106af34d2a41c2b68f40我正在尝试使屏幕向左、向右和向上移动。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.