4

我只是为我的游戏设置一些功能,但我的脚本无法加载图像

#used variables
# x, y for alien location
# nPc for the aliens image
#
#
#
#
#
#
#
#
#
#



#set up
import pygame, sys, random, time, math
from pygame.locals import *
pygame.init()


nPc = '/home/claude/Dropbox/Bowtie/Prisim/Images/Alien_Races/Standered/alien_1.png'


nPc = pygame.image.load(nPc).convert_alpha()

def loc_alien():
        x = random.randint(0, 400)
        y = randaom.randint(0, 400)


def spawn_alien(x, y):
        screen.blit(nPc, (x, y))

当我运行它时,我不会发生任何事情,因为我还没有使用这些功能,但是当我运行它时,我得到了这个错误

Traceback (most recent call last):
  File "/home/claude/Dropbox/Bowtie/Prisim/Scripts/aliens.py", line 26, in <module>
    nPc = pygame.image.load(nPc).convert_alpha()
error: No video mode has been set

有人知道我在做什么错吗?

4

2 回答 2

10

我相信您需要致电:

screen = pygame.display.set_mode((800, 600)) # change to the real resolution

此调用实际上将返回您想要进行 blit 处理的表面。以下是来自链接资源的文档。

pygame.display.set_mode()

初始化要显示的窗口或屏幕

set_mode(resolution=(0,0), flags=0, depth=0) -> Surface

该函数将创建一个显示表面。传入的参数是对显示类型的请求。实际创建的显示将是系统支持的最佳匹配。

分辨率参数是一对表示宽度和高度的数字。flags 参数是附加选项的集合。depth 参数表示用于颜色的位数。

返回的 Surface 可以像普通 Surface 一样绘制,但最终会在显示器上看到变化。

如果没有传递分辨率或设置为 (0, 0) 并且 pygame 使用 SDL 版本 1.2.10 或更高版本,则创建的 Surface 将具有与当前屏幕分辨率相同的大小。如果仅将宽度或高度设置为 0,则 Surface 将具有与屏幕分辨率相同的宽度或高度。使用 1.2.10 之前的 SDL 版本会引发异常。

通常最好不要传递深度参数。它将默认为系统的最佳和最快的颜色深度。如果您的游戏需要特定的颜色格式,您可以使用此参数控制深度。Pygame 将模拟一个可能很慢的不可用颜色深度。

请求全屏显示模式时,有时无法完全匹配请求的分辨率。在这些情况下,pygame 将选择最接近的兼容匹配。返回的表面仍将始终与请求的分辨率匹配。

flags 参数控制您想要的显示类型。有多种类型可供选择,您甚至可以使用按位或运算符(竖线“|”字符)组合多种类型。如果您传递 0 或不传递标志参数,它将默认为软件驱动的窗口。以下是您要选择的显示标志:

pygame.FULLSCREEN    create a fullscreen display
pygame.DOUBLEBUF     recommended for HWSURFACE or OPENGL
pygame.HWSURFACE     hardware accelerated, only in FULLSCREEN
pygame.OPENGL        create an OpenGL renderable display
pygame.RESIZABLE     display window should be sizeable
pygame.NOFRAME       display window will have no border or controls

例如:

# Open a window on the screen
screen_width=700
screen_height=400
screen=pygame.display.set_mode([screen_width,screen_height])
于 2013-09-19T22:34:44.437 回答
1

在创建包含图像的变量之前,不要忘记创建表面

像这样:

win = pygame.display.set_mode((576, 1024))
background_day = pygame.image.load("background-day.png").convert()

不是这样的:

background_day = pygame.image.load("background-day.png").convert()
win = pygame.display.set_mode((576, 1024))
于 2021-06-30T14:45:08.437 回答