#python-3.x #pygame
#python-3.x #pygame
Вопрос:
Привет, я создаю файтинг, чтобы немного попрактиковаться в pygame, но я столкнулся с проблемой приседания / пригибания. Когда я нажимаю кнопку вниз, он возвращается в исходное положение, а затем пригибается. Если вам нужна дополнительная информация, чтобы помочь, я предоставлю.
import pygame
import random
display_height = 600
display_width = 1000
dis_screen = pygame.display.set_mode((display_width, display_height))
FPS = 30
clock = pygame.time.Clock()
img = pygame.image.load('foo.png')
crouchimg = pygame.image.load('crouchimg.png')
# Simple player object
class Player(object):
def __init__(self, x, y, image):
self.x = x
self.y = y
self.image = image
# Method to draw object
def draw(self):
dis_screen.blit(self.image, (self.x, self.y))
# Method to move object
def move(self, speedx, speedy):
self.x = speedx
self.y = speedy
class MainRun(object):
def __init__(self, displayw, displayh):
self.dw = displayw
self.dh = displayh
self.Main()
def Main(self):
# Put all variables up here
stopped = False
x_move = 0
y_move = 0
p1_y_loc = 200
p1_x_loc = 200
x = pygame.Rect().x
greg = Player(p1_x_loc, p1_y_loc, img)
# Main Loop
while not stopped:
print(x)
dis_screen.fill((255, 255, 255)) # Tuple for filling display... Current is white
# Event Tasking
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
y_move = 0
x_move = 5
elif event.key == pygame.K_LEFT:
y_move = 0
x_move = -5
elif event.key == pygame.K_UP:
y_move = -5
x_move = 0
elif event.key == pygame.K_DOWN:
p1_y_loc = 300
p1_x_loc = 0
greg = Player(p1_x_loc, p1_y_loc, crouchimg)
if event.type == pygame.KEYUP:
if event.key == pygame.K_DOWN:
p1_y_loc = 200
greg = Player(p1_x_loc, p1_y_loc, img)
if event.key == pygame.K_UP:
y_move = 0
if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT:
x_move = 0
greg.move(x_move, y_move)
greg.draw()
pygame.display.update()
clock.tick(FPS)
pygame.quit()
quit()
run = MainRun(display_width, display_height)
run.Main()
Ответ №1:
Это потому, что когда вы нажимаете клавишу down, вы создаете нового игрока в позиции x p1_x_loc
(для которой вы установили значение 0) и y-позиции p1_y_loc
(для которой вы установили значение 300). Таким образом, когда игрок приседает, это также перемещает его на (0, 300), независимо от позиции, в которой игрок находится в данный момент.
Способ решить эту проблему — просто изменить изображение игрока, а не создавать совершенно нового игрока. Вы можете сделать это таким образом, player.image = crouchimg
вместо greg = Player(p1_x_loc, p1_y_loc, crouchimg)
. И когда игрок встает, вы просто снова меняете изображение: player.image = img
И если вам нужно изменить y-позицию игроков при приседании, вы могли бы сделать это таким же образом: player.y = 200
и player.y = 300
.