Здравствуйте, я делаю игру-клон Pokémon, и после ее завершения я хочу изменить некоторые вещи, чтобы сделать ее своей собственной версией. Но мой вопрос: не могли бы вы помочь мне улучшить движение камеры, потому что теперь персонаж движется быстрее, чем камера. Я хочу, чтобы персонаж оставался в центре, и я не хочу, чтобы персонаж не двигался, а фон перемещался. Персонаж должен двигаться, а камера должна следовать за персонажем. Изображения находятся в ZIP-файле по этой ссылке. Вот код ->
import pygame
from pygame import mixer
pygame.init()
display_width = 800
display_height = 600
# Screen and Caption
screen = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption('PokémonClone')
# Background
background = pygame.image.load('Images/main_town1.png')
bgX = -450
bgY = -700
bgX_change = 0
bgY_change = 0
# FPS
clock = pygame.time.Clock()
FPS = 15
# Background music
mixer.music.load('Sounds/bgmusic.mp3')
pygame.mixer.music.set_volume(0.1)
mixer.music.play()
# Player
walkUp = [pygame.image.load('Images/up1.png'), pygame.image.load('Images/up2.png'),
pygame.image.load('Images/up3.png'), pygame.image.load('Images/up4.png')]
walkDown = [pygame.image.load('Images/down1.png'), pygame.image.load('Images/down2.png'),
pygame.image.load('Images/down3.png'), pygame.image.load('Images/down4.png')]
walkLeft = [pygame.image.load('Images/left1.png'), pygame.image.load('Images/left2.png'),
pygame.image.load('Images/left3.png'), pygame.image.load('Images/left4.png')]
walkRight = [pygame.image.load('Images/right1.png'), pygame.image.load('Images/right2.png'),
pygame.image.load('Images/right3.png'), pygame.image.load('Images/right4.png')]
playerImg = pygame.image.load('Images/down1.png')
playerX = 370
playerY = 270
playerX_change = 0
playerY_change = 0
up = False
down = False
left = False
right = False
walkCount = 0
def redrawWindow(x, y):
global walkCount
clock.tick(FPS)
screen.blit(background, (bgX, bgY))
if walkCount + 1 >= 15:
walkCount = 0
if up:
screen.blit(walkUp[walkCount//4], (x, y))
walkCount += 1
elif down:
screen.blit(walkDown[walkCount//4], (x, y))
walkCount += 1
elif left:
screen.blit(walkLeft[walkCount//4], (x, y))
walkCount += 1
elif right:
screen.blit(walkRight[walkCount//4], (x, y))
walkCount += 1
else:
screen.blit(playerImg, (x, y))
pygame.display.update()
# Game loop
running = True
while running == True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LSHIFT:
FPS = 25
elif event.key == pygame.K_LEFT:
playerX_change = -2
bgX_change += 3
up = False
down = False
left = True
right = False
elif event.key == pygame.K_RIGHT:
playerX_change = 2
bgX_change += -3
up = False
down = False
left = False
right = True
elif event.key == pygame.K_UP:
playerY_change = -2
bgY_change += 3
up = True
down = False
left = False
right = False
elif event.key == pygame.K_DOWN:
playerY_change = 2
bgY_change += -3
up = False
down = True
left = False
right = False
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == pygame.K_UP or event.key == pygame.K_DOWN:
up = False
down = False
left = False
right = False
walkCount = 0
playerX_change = 0
playerY_change = 0
bgX_change = 0
bgY_change = 0
elif event.key == pygame.K_LSHIFT:
FPS = 15
playerX += playerX_change
playerY += playerY_change
bgX += bgX_change
bgY += bgY_change
redrawWindow(playerX, playerY)
pygame.quit()
Я уже пытался увеличить скорость перемещения камеры, но затем персонаж движется быстрее. Так что, если бы вы могли мне помочь, я был бы признателен. И если вы хотите, может быть, вы можете посмотреть, как я могу сделать хорошие столкновения, такие как граница на деревьях и в домах? Заранее спасибо !!!