Я пытаюсь сделать игру, используя pygame и tmx, есть некоторые комментарии, которые говорят, игнорируйте, пожалуйста, не возражайте, это была моя первая попытка. проблема, с которой я сталкиваюсь, заключается в том, что при перемещении моего персонажа карта не прокручивается, и когда я добираюсь до определенного края, камера / прокручивается немного, а затем отталкивает персонажа
вот что я зашел так далеко:
import pygame, sys, os, random, math
clock = pygame.time.Clock()
from pygame.locals import *
import data.engine as e
import data.Mapload as Map
import data.Makemap as M
#Setting of the Windows
pygame.init()
pygame.display.set_caption("Pineapple")
WINDOWS_SIZE = (800, 608)
screen = pygame.display.set_mode(WINDOWS_SIZE,0,32)
display=pygame.Surface((304,256))
# pygame.mouse.set_visible(False)
#Loading the Animations & Particles
e.load_animations('data/images/Entities/')\
#Create random map
# LoadFileMap = Map.createfileworld("data/Map") Ignore
LoadFileMap = M.TilledMap('data/untitled.tmx')
#Variables for the character
'''Player Status'''
player = e.entity(5,5,14,26,'player')
'''Camera'''
true_scroll = [player.x-304/2,player.y-256/2]
'''Character Movement'''
moving_right = False
moving_left = False
moving_up = False
moving_down =False
while True:
display.fill((146,244,255))
#Scroll Camera movement
true_scroll[0] += ((player.get_center()[0]-304/2)-true_scroll[0])/20
true_scroll[1] += ((player.get_center()[1]-256/2)-true_scroll[1])/20
if true_scroll[0] < 0:
true_scroll[0] = 0
if true_scroll[0] > 500:
true_scroll[0] = 500
if true_scroll[1] > 500:
true_scroll[1] = 500
if true_scroll[1] < 0:
true_scroll[1] = 0
scroll = true_scroll.copy()
scroll[0] = int(scroll[0])
scroll[1] = int(scroll[1])
makemaps = LoadFileMap.make_map(scroll[0],scroll[1])
#Rendering the map and rects
# tile_rects = Map.createrandomworld(scroll[0],scroll[1],LoadFileMap,display) Ignore
display.blit(makemaps,(scroll[0],scroll[1]))
#Character Movement
player_movement = [0,0]
if moving_up == True:
player_movement[1] -= 1.4
if moving_down == True:
player_movement[1] += 1.4
if moving_right == True:
player_movement[0] += 1.4
if moving_left == True:
player_movement[0] -= 1.4
ttest=[]
collision_types= player.move(player_movement,ttest)
player.display(display,scroll)
#Buttons
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_d:
moving_right = True
if event.key == K_a:
moving_left = True
if event.key == K_w:
moving_up = True
if event.key == K_s:
moving_down =True
if event.type == KEYUP:
if event.key == K_d:
moving_right = False
if event.key == K_a:
moving_left = False
if event.key == K_w:
moving_up = False
if event.key == K_s:
moving_down =False
screen.blit(pygame.transform.scale(display,WINDOWS_SIZE),(0,0))
pygame.display.update()
clock.tick(60)
и это Makemap.py, который читает tmx
import pygame, sys, os
from pygame.locals import *
import pytmx
class TilledMap:
def __init__(self, filename):
tm = pytmx.load_pygame(filename, pixelalpha=True)
self.width= tm.width*tm.tilewidth
self.height= tm.height*tm.tileheight
self.tmxdata = tm
def render(self,Surface,scrollx,scrolly):
ti = self.tmxdata.get_tile_image_by_gid
for layer in self.tmxdata.visible_layers:
if isinstance(layer,pytmx.TiledTileLayer):
for x, y, gid, in layer:
tile = ti(gid)
if tile:
Surface.blit(tile,(x*self.tmxdata.tilewidth-scrollx,y*self.tmxdata.tileheight-scrolly))
# if tile!='0' and tile!='1' and tile != 'wne':
# tile_rects.append(pygame.Rect(x*16,y*16,16,16))
def make_map(self,scrollx,scrolly):
temp_surface = pygame.Surface((self.width,self.height))
self.render(temp_surface,scrollx,scrolly)
return temp_surface