微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

图像未显示在pygame窗口中

如何解决图像未显示在pygame窗口中

关闭脚本之前,图像不会显示在窗口中。我正在为两个制作多人游戏。我想使用显示在网格中的图像显示地图,但是这些图像根本不显示。我尝试添加打印语句来确定函数是否已执行(确实如此)看来window.blit(image,(x,y))无效,但我不知道为什么。

import pygame
from time import sleep
pygame.init()
clock = pygame.time.Clock()

WIDTH = 624
HEIGHT = 360
window = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption('snoeppot')
#plaatjes
gras = pygame.image.load('sprites/Grass.png')
struik = pygame.image.load('sprites/struik.png')
vloerRed = pygame.image.load('sprites/blauwe_vloer.png')
vloerBlue = pygame.image.load('sprites/rode_vloer.png')
SafeSpace = pygame.image.load('sprites/safe_space.png')
IngangPortaal = pygame.image.load('sprites/ingang_portaal.png')
uitgangPortaal = pygame.image.load('sprites/uitgang_portaal.png')
water = pygame.image.load('sprites/water.png')
weg = pygame.image.load('sprites/weg.png')
ijs = pygame.image.load('sprites/ijs.png')
snoeppotPlatform = pygame.image.load('sprites/snoeppot_platform.png')
#uiterlijk class each uiterlijk is one tile in the map
class uiterlijk:
    blokken = [gras,struik,SafeSpace,IngangPortaal,#0-4
               uitgangPortaal,water,weg,ijs,#5-9
               snoeppotPlatform]
    def __init__(self,soort,X,Y):
        self.soort = soort #defines the kind of tile 0-26
        self.pos = [X,Y]
        if 11 <= self.soort <=26: #11 trought 26 use the same image.
            self.image = pygame.transform.scale(gras,(tegel,tegel))
        else:
            self.image = pygame.transform.scale(self.blokken[soort],tegel)) #looks in list blokken for an image
    def draw(self):
        window.blit(self.image,(tegel*self.pos[0],tegel*self.pos[1]))
#the map I want to display each number equals a image
speelveld = [
[1,1,11,21,12,22,13,23,1],[1,[0,0],[17,19],[18,20],14,24,15,25,16,26,1]]

tegel = 18 #size of the images

speelveld_tiles = [[uiterlijk(speelveld[Y][X],Y) for X in range(len(speelveld[0]))] for Y in range(len(speelveld))]

while True:
    #draws whole window white
    window.fill((0,255,255))
    #draws the map
    for rij in range(len(speelveld)):
        for x in range(len(speelveld[0])):
            speelveld_tiles[rij][x].draw()
    #updates screen
    pygame.display.update()
    clock.tick(60)

解决方法

您必须处理应用程序循环中的事件。分别参见pygame.event.get() pygame.event.pump()

对于游戏的每一帧,您都需要对事件队列进行某种调用。这样可以确保您的程序可以与操作系统的其余部分进行内部交互。

run = True
while run:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    #draws whole window white
    window.fill((0,255,255))
    #draws the map
    for rij in range(len(speelveld)):
        for x in range(len(speelveld[0])):
            speelveld_tiles[rij][x].draw()
    #updates screen
    pygame.display.update()
    clock.tick(60)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。