今天我嘗試將 pygame 切換image.load()到 Pil,Image.open()但是(像往常一樣)我遇到了問題。在代碼的開頭,我有這個帶有 pygame 的片段image.load():
class Gamesprite():
def __init__(self,img,x,y,width,height,speed):
sprite.Sprite.__init__(self)
self.image = transform(image.load(img), (width, height))
下面的代碼片段是我實驗添加image = Image.open('image.png')但代碼崩潰的 4 個片段(左、右、上)之一。
class Player(Gamesprite):
def control(self):
keys=key.get_pressed()
if keys[K_LEFT]:
hero_img = Image.open('hero_left.png')
self.rect.x -= self.speed
for wall in list_wall:
if sprite.collide_rect(self,wall):
self.rect.x = self.speed*1.1
啟動代碼后,我得到:
File "e:\VSCode projects\lab2.1.py", line 60, in <module>
player = Player(hero_img, tiles, tiles, int(tiles*0.87),tiles, tiles//10)
File "e:\VSCode projects\lab2.1.py", line 15, in __init__
self.image = transform(image.load(img), (width, height))
TypeError: not a file object
如果您知道如何解決此問題,請將影像保存在變數“hero_img”中,并在按下按鈕的同時使角色切換影像,請幫助!:(
uj5u.com熱心網友回復:
從官方檔案來看,pygame的結果image.load是一個pygame.Surface物件。PILImage.open函式的結果是一個PIL.Image.Image物件。它們不可互換。可以嘗試將PIL影像轉成陣列,然后復制到pygame表面。
以下是一些有用的鏈接:
https://stackoverflow.com/a/1095878/5166365 https://www.pygame.org/docs/ref/surfarray.html#pygame.surfarray.blit_array
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/362749.html
