Я пытаюсь научиться программированию игры (и программированию в целом), поэтому я делаю простой боковой скроллер на Python с использованием pygame.
Проблема в том, что когда я двигаю персонажа (простой куб)) слева он движется быстрее, чем когда я двигаюсь вправо, как показано в консоли позже.
Вот изображение игры.
Основной классс циклом (я вырезал некоторые из них, потому что они не имеют значения, я думаю, но я могу опубликовать его при необходимости):
player.speed = 135
player = Player.Cube([255,0,0],600, screen.get_height()*0.8-screen.get_height()*0.125,screen.get_height()*0.125,screen.get_height()*0.125)
running = True
clock = pygame.time.Clock()
while running:
deltaTime = clock.tick(60) / 1000
screen.blit(background, (0, 0))
screen.blit(player.image,(player.rect.x,player.rect.y))
screen.blit(grass,(0,screen.get_height()-grass.get_height()))
keystate = pygame.key.get_pressed()
if keystate[K_RIGHT]:
player.moveRight(deltaTime)
elif keystate[K_LEFT]:
player.moveLeft(deltaTime)
pygame.display.flip()
Класс куба:
class Cube(pygame.sprite.Sprite):
speed = 0
def __init__(self, color, left,top, width, height):
# Call the parent class (Sprite) constructor
pygame.sprite.Sprite.__init__(self)
self.left = left
self.top = top
self.image = pygame.Surface([width,height])
self.image.fill(color)
self.rect = pygame.Rect(left, top, width, height)
def moveRight(self,deltaTime):
oldX=self.rect.x
self.rect.x += self.speed*deltaTime
print(self.speed*deltaTime)
print("deltaX: " + str(self.rect.x-oldX))
def moveLeft(self,deltaTime):
oldX = self.rect.x
self.rect.x -= self.speed*deltaTime
print(self.speed * deltaTime)
print("deltaX: " + str(self.rect.x-oldX))
Как вы видите, я пытаюсь распечатать, сколько пикселей я сдвинул вправо и сколько влево:
Speed times deltaTime, right: 2.2950000000000004
deltaX, right: 2
exiting game
Speed times deltaTime, left: 2.2950000000000004
deltaX, left: -3
Я не понимаю ни капли из этогоКто-нибудь сейчас, в чем причина?Кроме того, мое движение немного заикается, почему это так?