簡體   English   中英

NotImplementedError Python 2.7,sdl2 Pygame

[英]NotImplementedError Python 2.7, sdl2 Pygame

我正在學習Pygame / SDL2,遇到了一個沒有幫助的錯誤。

Traceback (most recent call last):
File "pygame.py", line 98, in <module>
  sys.exit(run())
File "pygame.py", line 94, in run
world.process()
File "/usr/local/lib/python2.7/dist-packages/sdl2/ext/ebs.py", line 238, in process
s_process(self, comps)
File "/usr/local/lib/python2.7/dist-packages/sdl2/ext/ebs.py", line 277, in process
raise NotImplementedError()
NotImplementedError

我知道NotImplementedError是Python錯誤的某種特定類型。 我對Python的了解還不是專家水平。 我是否認為這只是意味着我有錯別字還是系統性問題(例如版本問題)是否正確? 在此tutoiral的先前步驟中,一切正常。 我正在關注sdl2 / pygame教程http://pysdl2.readthedocs.io/en/rel_0_9_4/tutorial/pong.html#adding-the-game-world

這是我的源代碼。

import sys
import sdl2
import sdl2.ext

WHITE = sdl2.ext.Color(255, 255, 255)

class SoftwareRenderer(sdl2.ext.SoftwareSpriteRenderSystem):
    def __init__(self, window):
        super(SoftwareRenderer, self).__init__(window)

    def render(self, components):
        sdl2.ext.fill(self.surface, sdl2.ext.Color(0, 0, 0))
        super(SoftwareRenderer, self).render(components)

class MovementSystem(sdl2.ext.Applicator):
    def __init__(self, minx, miny, maxx, maxy):
        super(MovementSystem, self).__init__()
        self.componenttypes = Velocity, sdl2.ext.Sprite
        self.minx = minx
        self.miny = miny
        self.maxx = maxx
        self.maxy = maxy

def process(self, world, componentsets):
    for velocity, sprite in componentsets:
        swidth, sheight = sprite.size
        sprite.x += velocity.vx
        sprite.y += velocity.vy

        sprite.x = max(self.minx, sprite.x)
        sprite.y = max(self.miny, sprite.y)

        pmaxx = sprite.x + swidth
        pmaxy = sprite.y + sheight
        if pmaxx > self.maxx:
            sprite.x = self.maxx - swidth
        if pmaxy > self.maxy:
            sprite.y = self.maxy - sheight

class Velocity(object):
    def __init__(self):
        super(Velocity, self).__init__()
        self.vx = 0
        self.vy = 0

class Player(sdl2.ext.Entity):
    def __init__(self, world, sprite, posx=0, posy=0):
        self.sprite = sprite
        self.sprite.position = posx, posy
        self.velocity = Velocity()

class Ball(sdl2.ext.Entity):
    def __init__(self, world, sprite, posx=0, posy=0):
        self.sprite = sprite
        self.sprite.position = posx, posy
        self.velocity = Velocity()



def run():
    sdl2.ext.init()
    window = sdl2.ext.Window("The Pong Game", size=(800, 600))
    window.show()

    world = sdl2.ext.World()
    spriterenderer = SoftwareRenderer(window)
    world.add_system(spriterenderer)

    factory = sdl2.ext.SpriteFactory(sdl2.ext.SOFTWARE)
    sp_paddle1 = factory.from_color(WHITE, size=(20,100))
    sp_paddle2 = factory.from_color(WHITE, size=(20,100))

    sp_ball = factory.from_color(WHITE, size=(20, 20))

    movement = MovementSystem(0, 0, 800, 600)
    spriterenderer = SoftwareRenderer(window)

    world.add_system(movement)
    world.add_system(spriterenderer)

    ball = Ball(world, sp_ball, 390, 290)
    ball.velocity.vx = -3

    player1 = Player(world, sp_paddle1, 0, 250)
    player2 = Player(world, sp_paddle2, 780, 250)

    running = True
    while running:
        events = sdl2.ext.get_events()
        for event in events:
            if event.type == sdl2.SDL_QUIT:
                running = False
                break
        world.process()
    return 0

if __name__ == "__main__":
    sys.exit(run())

感謝您為Python Longhorns所提供的幫助。

我檢查了您的代碼,發現您使用def process(self, world, componentsets):縮進錯誤def process(self, world, componentsets): 它必須是類方法。

現在它是類之外的函數,所以MovementSystem使用其默認方法process() (來自sdl2.ext.Applicator ),該方法只有一個命令raise NotImplementedError() 為開發者提供的信息是他們必須(重寫)此功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM