0
我剛剛啓動了python,更確切地說pygame,並且我發現自己無法做一件非常簡單的事情:導入文件的 。使用pygame包含問題
下面的代碼:
主文件:
import pygame
from pygame.locals import *
from cTile import Tile
class App:
def __init__(self):
self._running = True
self._display_surf = None
self._image_surf = None
self._x = 0
self._y = 0
self.tiles = []
def on_init(self):
pygame.init()
self._display_surf = pygame.display.set_mode((350,350), pygame.HWSURFACE)
self._running = True
#self._image_surf = pygame.image.load("myimage.jpg").convert()
self._image_surf = pygame.image.load("myimage.jpg").convert()
self.tiles = [Tile(0,0,0,0),Tile(1,0,64,0),Tile(0,1,0,64),Tile(1,1,64,64)]
m = open("map1.map",'r')
r = m.read().split(",")
for i in range(len(r)/4):
self.tiles.append(Tile(int(r[i*4]),int(r[i*4+1]),int(r[i*4+2]),int(r[i*4+3])))
i = i+3
def on_event(self, event):
if event.type == QUIT:
self._running = False
elif event.type == pygame.KEYDOWN:
self.key_event(event)
def key_event(self,event):
if event.key == pygame.K_DOWN:
self._y = self._y+16
if event.key == pygame.K_UP:
self._y = self._y-16
if event.key == pygame.K_RIGHT:
self._x = self._x+16
if event.key == pygame.K_LEFT:
self._x = self._x-16
def on_loop(self):
pass
def on_render(self):
self._display_surf.fill((0, 0, 0))
for tile in self.tiles:
tile.render(self)
self._display_surf.blit(self._image_surf,(self._x,self._y), pygame.Rect(0, 0, 16, 16))
pygame.display.flip()
def on_cleanup(self):
pygame.quit()
def on_execute(self):
if self.on_init() == False:
self._running = False
while(self._running):
for event in pygame.event.get():
self.on_event(event)
self.on_loop()
self.on_render()
self.on_cleanup()
if __name__ == "__main__" :
theApp = App()
theApp.on_execute()
文件I包括:
class Tile:
def __init__(self,_pidx,_pidy,_px,_py):
self._image_surf = pygame.image.load("myimage.jpg").convert()
self._idx = _pidx
self._idy = _pidy
self._x = _px
self._y = _py
def render(self,win):
win._display_surf.blit(self._image_surf,(self._x,self._y), pygame.Rect(self._idx*16, self._idy*16, self._idx*16+16, self._idy*16+16))
最後的錯誤我得到:
Traceback (most recent call last):
File "C:\Users\Morgan\Desktop\test.py", line 70, in <module>
theApp.on_execute()
File "C:\Users\Morgan\Desktop\test.py", line 57, in on_execute
if self.on_init() == False:
File "C:\Users\Morgan\Desktop\test.py", line 22, in on_init
self.tiles = [Tile(0,0,0,0),Tile(1,0,64,0),Tile(0,1,0,64),Tile(1,1,64,64)]
File "C:\Users\Morgan\Desktop\cTile.py", line 3, in __init__
self._image_surf = pygame.image.load("myimage.jpg").convert()
NameError: global name 'pygame' is not defined
我正在學習語言現在。我試圖將pygame導入到我的cTile.py文件中,然後嘗試使用pygame.init()
,並且仍然出現相同的錯誤。
我雖然進口是做同樣的事情包括將在PHP中,但它顯然不是!
本身的代碼可能會傷害任何對python知之甚少的人,但是我再一次在一小時前就開始了,還有很多事情我必須修復,目前的主要問題包括我無法完全理解!預先感謝您提供的任何幫助!
編輯:當cTile.py中包含的代碼剛剛被粘貼到「Class App:」上面時,一切都運行平穩。
確實,正如我所說,我試過,但我現在可能已經保存該文件,因爲它沒有奏效!再次重試,保存,它完美!謝謝! –
理解導入的模塊緩存在'sys.modules'中是相關的,同一個模塊中的任何後續'import'都將使用存儲的值,而不是再次讀取和執行包含的所有代碼 - 所以它不是很昂貴多次導入同一個。 – martineau
這確實是一件很好的事情要知道,我害怕濫用導入程序,但我想這不會是一個問題,如果一切都緩存,必須確保不導入在那裏沒有任何事情做的事情!再次感謝! –