首页 > 解决方案 > 对导入模块感到困惑。模块不是从同一文件夹中导入的||?

问题描述

我有一个根文件夹“GAME”,这是树

  1. 游戏/main.py
  2. 游戏/脚本/level0.py
  3. 游戏/脚本/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很陌生,不确定是什么原因造成的。

标签: pythonimportmodulepygame

解决方案


您必须使用相对导入.

from . import player

或者当你用*

from .player import *

你也有问题gin __init__- 它无法访问全局g,你应该将它作为参数发送

def __init__(self, g):
    player = Player([100,100])
    player.render(g.display)

然后执行它Gameself这意味着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 - 没有改变


推荐阅读