如何在pygame中加载图片?

问题描述

所以我是一名新程序员,需要2个星期的学习时间。我想知道如何使用Pygame 1.9.6正确加载图像。我正在尝试掷骰子,无论掷骰子会加载正确的图像。但是,我需要知道如何首先加载图像。

现在,这就是我到目前为止提出的全部内容

import pygame as p


WIDTH = HEIGHT = 250
DIMENSION = 2
SQ_SIZE = HEIGHT // DIMENSION
IMAGES = {}


class DiceState:
   def __int__(self):
       self.Dice = ['d1','d2','d3','d4','d5','d6']


def drawBackground(screen):
    colors = [p.Color("black")]
    for d in range(DIMENSION):
        color = colors
        p.draw.rect(screen,color,p.Rect(SQ_SIZE,SQ_SIZE))


def loadImages():
    dice_sides = ['d1','d6']
    for dice_side in dice_sides:
        IMAGES[dice_side] = p.transform.scale(p.image.load("images/" + dice_side + ".png"),SQ_SIZE)


def main():
    p.init()
    screen = p.display.set_mode((WIDTH,HEIGHT))
    screen.fill(p.Color("white"))
    ds = DiceState
    loadImages()
    running = True


if __name__ == "__main__":
    main()

d1表示数字1的骰子1。d2 =数字2

我尝试过的是这是我第一次尝试这样做,所以我不知道该怎么做。我知道我不应该来这个网站,并且麻烦大家解决我的问题。但是我只需要帮助。我也想像你们一样学习。因此,如果可以,请帮助我。

解决方法

您正在加载图像,但是将错误的参数传递给了转换。看documentation on transform,您需要传递一个( width,height ),而您现有的代码只是传递一个数字常数SQ_SIZE

将很多函数调用嵌入在一起并没有真正的好处。将每个调用分隔成命名精美的变量,以使您的代码更具自记录性:

def loadImages():
    global IMAGES,SQ_SIZE
    dice_sides = ['d1','d2','d3','d4','d5','d6']
    for dice_side in dice_sides:
        image_path  = os.path.join( "images",dice_side + ".png" )
        face_image  = p.image.load( image_path ).convert()
        target_size = ( SQ_SIZE,SQ_SIZE )
        sized_image = p.transform.scale( face_image,target_size )
        IMAGES[dice_side] = sized_image

最好使用os.path.join()创建路径,因为它会自动处理所有操作系统路径依赖项。

您是否打算将loadImages()用作DiceState类的成员函数?

,

假设您拥有图片“ d1.png” ...“ d6.png”,则可以像这样设置IMAGES变量:

os.chdir('images')
IMAGES = {'d'+side:p.transform.scale(p.image.load('d'+side+'.png').convert(),SQ_SIZE) for side in range(1,7)}

然后摆脱

for dice_side in dice_sides:
    IMAGES[dice_side] = p.transform.scale(p.image.load("images/" + dice_side + ".png"),SQ_SIZE)

在loadImages()