在pygame背景中加载多个图像

时间:2015-10-06 20:33:43

标签: python pygame

处理几个jpgs作为静止背景并将它们拼成一张图片。我有它工作,只是看起来很丑。是否有更好的方法,或至少更漂亮的方式:

msxml6.dll error '80072f7d'
An error occurred in the secure channel support

感谢您寻找

3 个答案:

答案 0 :(得分:1)

不要理解你真正想要的东西,但你可以通过以下方式简化第一部分:

ground = ["mydirectory//map"+str(number)+".jpg" for number in range(1,20)]

但是在所有情况下,以这种方式定义目录并构造这样的文件是不好的;)

之后,它更像是一种编程风格。您可以在代码中添加对象或/和函数以及真实结构。但在此之后,它是一个完全不同的代码。

也许你可以看看游戏循环引擎。

你可能有这样的简化循环引擎:

def run_engine():
    while (treat_event())
        modify_word()
        draw_graphics()

load_data()
run_engine()

更好的对象结构,游戏管理器,事件管理器等等...... 但我认为你必须从创建函数开始并构造代码

答案 1 :(得分:1)

尝试这种方法,或多或少是人们的建议,以及一些身份识别问题,如果不是由SO代码示例格式引起的:

import pygame

from pygame.locals import *
from sys import exit

#you should rename the Map# from 1 to 9 instead of 01 to 09.
ground = ['Map'+ str(image+1) +'.jpg' for image in range(19)]

mouse_image = 'pygame\\Pygame_HW\\fugu.png'

new_resolution_x = 1000
new_resolution_y = 760

scale_x = new_resolution_x / 16120.0
scale_y = new_resolution_y / 19000.0

pic_wid = 16120 * scale_x
pic_height = 1000 * scale_y

pygame.init()

screen = pygame.display.set_mode((new_resolution_x, new_resolution_y), 0, 16)
pygame.display.set_caption("Hello World!")

#at this for you can manipulate the string inside of image.load
#method instead of using unecessary memory re - saving the full path
for i in range(19):
    ground[i] = pygame.image.load('Screens\\Map\\' + str(ground[i]))
    ground[i] = pygame.transform.scale(ground[i], (int(pic_wid), int(pic_height)))
    #or in one line ground[i] = pygame.transform.scale(pygame.image.load('Screens\\Map\\' + str(ground[i])), (int(pic_wid), int(pic_height)))

 mouse_cursor = pygame.image.load(mouse_image).convert_alpha()

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
           pygame.quit()
           exit()

        screen.fill((0, 0, 0))

        for i in range(19):
           screen.blit(ground[i], (0,i * int(pic_height)))

        x, y = pygame.mouse.get_pos()
        x -= mouse_cursor.get_width() / 2
        y -= mouse_cursor.get_height() / 2
        screen.blit(mouse_cursor, (x, y))

       pygame.display.update()

您可以将其缩减为一行代码,但执行代码的人不会理解它。

答案 2 :(得分:0)

我这样做

background_dir = 'Screens\\Map'
background_files = ['Map%02d' % i for i in range(1, 20)]
ground = [image.load(os.path.join(backgroup_dir, file)) for file in background_files]
  • 然后将它们全部放入一个表面
  • 然后将整个表面缩放到您想要的尺寸

或许只是把这个想法放进去并将它们全部放入1张图片中。你有没有理由?