[英]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.