python - 对导入模块感到困惑。模块不是从同一文件夹中导入的||?
问题描述
我有一个根文件夹“GAME”,这是树
- 游戏/main.py
- 游戏/脚本/level0.py
- 游戏/脚本/player.py
在 main.py 我尝试导入模块 level0。(这是进口的。)
import pygame as pg
import sys
from pygame.locals import *
from scripts.level0 import *
class Game:
def __init__(self):
pg.init()
self.WINDOW_SIZE = (800,600)
self.screen = pg.display.set_mode(self.WINDOW_SIZE,0,32)
self.display = pg.Surface((480,360))
pg.mixer.pre_init(44100, -16,2,512)
pg.display.set_caption('2d platformer action')
self.clock = pg.time.Clock()
def new(self):
#initialize variables here.
g = Game()
g.run()
def update(self): # func called every frame
pg.display.update()
self.screen.blit(pg.transform.scale(self.display,self.WINDOW_SIZE),(0,0))
self.clock.tick(60)
def run(self):
#main game loop
self.playing = True
while self.playing:
level = Level()
self.events()
self.update()
def events(self):
for event in pg.event.get():
if event.type == QUIT:
pg.quit()
sys.exit()
# Input Handling.
if event.type == KEYDOWN:
if event.key == K_LEFT:
pass
if event.key == K_RIGHT:
pass
g = Game()
g.run()
在 level0.py
import pygame as pg
import sys
from pygame.locals import *
import player
class Level():
def __init__(self):
player = Player([100,100])
player.render(g.display)
和 player.py
import pygame as pg
import sys
from pygame.locals import *
class Player:
def __init__(self, loc):
self.loc = loc
self.rect = self.get_rect()
def render(self, surf):
pg.draw.rect(surf, (255,255,255), self.rect)
#surf.blit(self.img, (self.loc[0], self.loc[1]))
def get_rect(self):
return pg.Rect(self.loc[0], self.loc[1], 16, 16)
def collision_test(self, rect):
player_rect = self.get_rect()
return player_rect.colliderect(rect)
代码 main.py 返回错误 ModuleNotFoundError : 'player' module not found。我如何解决它?我对python很陌生,不确定是什么原因造成的。
解决方案
您必须使用相对导入.
from . import player
或者当你用*
from .player import *
你也有问题g
in __init__
- 它无法访问全局g
,你应该将它作为参数发送
def __init__(self, g):
player = Player([100,100])
player.render(g.display)
然后执行它Game
,self
这意味着Game
(如 global g
)的实例
level = Level(self)
脚本/level0.py
import pygame as pg
import sys
from pygame.locals import *
from .player import *
class Level():
def __init__(self, g):
player = Player([100,100])
player.render(g.display)
main.py - 仅更改level = Level(self)
脚本/player.py - 没有改变
推荐阅读
- r - 仅一个几何/图层的带有阴影标记的 transition_time
- google-cloud-platform - 从 Cloud scheduler 调用 Google Cloud 功能时出现权限被拒绝错误
- graphql - 如何配置 Laravel Lighthouse 为 GraphQL 提供服务器端渲染?
- javascript - 从浏览器打开 android 应用程序:如何在意图 URI 中指定 URI-path/HOST?
- php - 如何将php变量传递给另一个php文件
- security - 托管在 Kubernetes 入口中的应用程序的安全性
- r - 我必须将 collect 与磁盘框架一起使用吗?
- c - 使用队列的简单患者管理程序
- r - 如何删除 stat_density_2d 中的背景?
- uml - BoUML 的状态机生成器是否正确处理退出和进入复合状态?