Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 转换Pygame图像时出错_Python_Image_Pygame_Blit - Fatal编程技术网

Python 转换Pygame图像时出错

Python 转换Pygame图像时出错,python,image,pygame,blit,Python,Image,Pygame,Blit,我正在通过制作简单的游戏来学习Pygame。但我的游戏非常滞后,我知道这可能是因为pygame每次在屏幕上闪动时都会转换.png图像 所以我尝试使用convert()加载图像。但这给了我一个错误。做了一些研究,但没有答案可以帮助我,即使我已经测试了一些 我的代码: import pygame import os, random class Item: def __init__(self): self.image = Context.load_image("item.

我正在通过制作简单的游戏来学习Pygame。但我的游戏非常滞后,我知道这可能是因为pygame每次在屏幕上闪动时都会转换.png图像

所以我尝试使用convert()加载图像。但这给了我一个错误。做了一些研究,但没有答案可以帮助我,即使我已经测试了一些

我的代码

import pygame
import os, random


class Item:
    def __init__(self):

        self.image = Context.load_image("item.png")

        self.X = random.randint(0, Context.resolution[1] - 200) 
        self.Y = 0

        self.dY = 10


class Basket:
    def __init__(self):
        self.image = Context.load_image("catcher.png")

        self.X = Context.resolution[0] / 2
        self.Y = Context.resolution[1] - 200    

        self.vel = 30.
        self.dX  = self.dY = 0

def action(self, event):
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_a:
            self.dX = -self.vel
        elif event.key == pygame.K_d:
            self.dX = self.vel

    elif event.type == pygame.KEYUP:
        self.dX = 0


class Context:
    resolution      = (1600, 900)

    dir_resources   = "resources/"

    def __init__(self):
        self.fps = 60
        self.background_theme = self.load_image("background.png")

    @staticmethod
    def load_image(image_name):
        path = Context.dir_resources + image_name
        # ERROR HAPPENS HERE! If I take ".convert()" off, the game runs but laggy
        return pygame.image.load(os.path.join(path)).convert() 


class Game:
    score = 0

def __init__(self):
    self.game_on = True

    self.context = Context()
    self.basket  = Basket()

    self.screen = pygame.display.set_mode(self.context.resolution, pygame.HWSURFACE | pygame.DOUBLEBUF)
    self.fps    = self.context.fps
    self.clock  = pygame.time.Clock()

    self.tshirt = Item()

def event_loop(self):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            self.game_on = False

        self.basket.action(event)

def update(self):   
    self.basket.X = self.basket.X + self.basket.dX
    self.tshirt.Y = self.tshirt.Y + self.tshirt.dY

def draw(self):
    self.screen.blit(self.context.background_theme, (0, 0))

    self.screen.blit(self.basket.image, (self.basket.X, self.basket.Y))
    self.screen.blit(self.tshirt.image, (self.tshirt.X, self.tshirt.Y))

    pygame.display.flip()

def run(self):
    while self.game_on:
        self.event_loop()
        self.update()
        self.draw()

        pygame.display.update()
        self.clock.tick(self.fps)

def main():
    pygame.init()

    game = Game()
    game.run()

    pygame.quit()

if __name__ == '__main__':
    main()
以下是错误:

Traceback (most recent call last):
  File "/me/tmvaz/PycharmProjects/Game/__main__.py", line 105, in <module>
    main()
  File "/home/me/PycharmProjects/Game/__main__.py", line 98, in main
    game = Game()
  File "/home/me/PycharmProjects/Game/__main__.py", line 57, in __init__
    self.context = Context()
  File "/home/me/PycharmProjects/Game/__main__.py", line 42, in __init__
    self.background_theme = self.load_image("background.png")
  File "/home/me/PycharmProjects/Game/__main__.py", line 47, in load_image
    return pygame.image.load(os.path.join(path)).convert()
pygame.error: No video mode has been set

Process finished with exit code 1
回溯(最近一次呼叫最后一次):
文件“/me/tmvaz/PycharmProjects/Game/__main__uuu.py”,第105行,在
main()
文件“/home/me/PycharmProjects/Game/__main__uu.py”,第98行,在main中
游戏
文件“/home/me/PycharmProjects/Game/\uuuuu main\uuuuuuuuu.py”,第57行,在__
self.context=context()
文件“/home/me/PycharmProjects/Game/_u main__uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu__
self.background\u theme=self.load\u图像(“background.png”)
文件“/home/me/PycharmProjects/Game/\uuuuuu main\uuuuuuuu.py”,第47行,在加载图像中
返回pygame.image.load(os.path.join(path)).convert()
pygame.error:未设置视频模式
进程已完成,退出代码为1
如果可能的话,我正在使用Linux,Lubuntu。

在调用
convert
convert\u alpha
方法之前,必须先调用。所以我把这一行移到程序的顶部:

pygame.init()
screen = pygame.display.set_mode(resolution, pygame.HWSURFACE | pygame.DOUBLEBUF)

您可以在实例化游戏对象时将
屏幕
变量传递给游戏对象,然后将其分配给
self.screen

多大的错误。。。非常感谢。我再也不会弄错了