почему моя карта pytmx не прокручивается игроком - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь сделать игру, используя 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
...