Проблема с разрешением

Aliero

Новичок
Пользователь
Май 8, 2020
1
0
1
Python:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Импортируем библиотеку pygame
import pygame
from pygame import *
from player import *
from blocks import *

#Объявляем переменные
WIN_WIDTH = 1280 #Ширина создаваемого окна
WIN_HEIGHT = 720 # Высота
DISPLAY = (WIN_WIDTH, WIN_HEIGHT) # Группируем ширину и высоту в одну переменную
BACKGROUND_COLOR = "#004400"

class Camera(object):
    def __init__(self, camera_func, width, height):
        self.camera_func = camera_func
        self.state = Rect(0, 0, width, height)

    def apply(self, target):
        return target.rect.move(self.state.topleft)

    def update(self, target):
        self.state = self.camera_func(self.state, target.rect)
       
def camera_configure(camera, target_rect):
    l, t, _, _ = target_rect
    _, _, w, h = camera
    l, t = -l+WIN_WIDTH / 2, -t+WIN_HEIGHT / 2

    l = min(0, l)                           # Не движемся дальше левой границы
    l = max(-(camera.width-WIN_WIDTH), l)   # Не движемся дальше правой границы
    t = max(-(camera.height-WIN_HEIGHT), t) # Не движемся дальше нижней границы
    t = min(0, t)                           # Не движемся дальше верхней границы

    return Rect(l, t, w, h)      


def main():
    pygame.init() # Инициация PyGame, обязательная строчка
    screen = pygame.display.set_mode((DISPLAY),pygame.FULLSCREEN) # Создаем окошко
    pygame.display.set_caption("Super Mario Boy") # Пишем в шапку
    bg = Surface((WIN_WIDTH,WIN_HEIGHT)) # Создание видимой поверхности
                                         # будем использовать как фон
    bg.fill(Color(BACKGROUND_COLOR))     # Заливаем поверхность сплошным цветом
   
    hero = Player(100,100) # создаем героя по (x,y) координатам
    left = right = False # по умолчанию - стоим
    up = False
   
    entities = pygame.sprite.Group() # Все объекты
    platforms = [] # то, во что мы будем врезаться или опираться
   
    entities.add(hero)
         
    level = [
       "==oooooooooooooooooo",
       "=oooooooooooooooooo",
       "=ooooooooooooooooooo",
       "=ooooooooooooooooooo",
       "=ooooooooooooooooooo",
       "=ooooooooooooooooooo",
       "=ooooooooooooooooooo",
       "=ooooooooooooooooooo",
       "=ooooooooooooooooooo",
       "=ooooooooooooooooooo",
       "===================="]
     
    timer = pygame.time.Clock()
    x=y=0 # координаты
    for row in level: # вся строка
        for col in row: # каждый символ
            if col == "=":
                pf = Platform(x,y)
                entities.add(pf)
                platforms.append(pf)

            x += PLATFORM_WIDTH #блоки платформы ставятся на ширине блоков
        y += PLATFORM_HEIGHT    #то же самое и с высотой
        x = 0                   #на каждой новой строчке начинаем с нуля
   
    total_level_width  = len(level[0])*PLATFORM_WIDTH # Высчитываем фактическую ширину уровня
    total_level_height = len(level)*PLATFORM_HEIGHT - 100  # высоту
   
    camera = Camera(camera_configure, total_level_width, total_level_height)
   
    while 1: # Основной цикл программы
        timer.tick(60)
        exitt = False
        keys = pygame.key.get_pressed()
        if keys [pygame.K_ESCAPE]:
            exitt = True
        if exitt == True:
            raise SystemExit
        for e in pygame.event.get(): # Обрабатываем события
            if e.type == QUIT:
                raise SystemExit("QUIT")
            if e.type == KEYDOWN and e.key == K_UP:
                up = True
            if e.type == KEYDOWN and e.key == K_LEFT:
                left = True
            if e.type == KEYDOWN and e.key == K_RIGHT:
                right = True


            if e.type == KEYUP and e.key == K_UP:
                up = False
            if e.type == KEYUP and e.key == K_RIGHT:
                right = False
            if e.type == KEYUP and e.key == K_LEFT:
                left = False

        screen.blit(bg, (0,0))      # Каждую итерацию необходимо всё перерисовывать


        camera.update(hero) # центризируем камеру относительно персонажа
        hero.update(left, right, up,platforms) # передвижение
        #entities.draw(screen) # отображение
        for e in entities:
            screen.blit(e.image, camera.apply(e))
       
       
        pygame.display.update()     # обновление и вывод всех изменений на экран
       

if __name__ == "__main__":
    main()

Я тут переделываю игру, и у меня возникла надоедливая проблема. Снизу остается пустое пространство, помогите пожалуйста его убрать.
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Когда задаете вопрос прикладываете к нему код, который можно запустить. Это поможет отвечающему увидеть вашу проблему и попробовать ее решить. В данном случае не хватает файлов player и blocks, а также вероятно файлов изображений. Без них увидеть пустое пространство снизу не получится. Если файлов много можете приложить к вопросу zip-архив.
 

Форум IT Специалистов