2016-10-29 11 views
0

私はPygame/SDL2を学んでいて、役に立たないエラーを見つけました。NotImplementedError Python 2.7、sdl2 Pygame

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に関する私の知識は、専門家レベルではありません。私はそれが単に私がタイプミスをしていることを意味すると信じて正しいか、私はバージョンの問題のようなより体系的な問題を抱えていますか?これまでの手順ですべてがうまくいきました。私はこの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がこれを流すように気をつけます。

+0

「NotImplementedError」は、まだこの関数を作成していないか、空の関数を保持していて、この関数でコードを作成しなければならないことを意味します。 – furas

+0

コードに間違ったインデントがあります。 'def process 'は' class MovementSystem'になければなりません。たぶん「実装されていない」機能かもしれない。 – furas

答えて

1

あなたのコードを確認したところ、間違った字下げをdef process(self, world, componentsets):としました。それはクラスメソッドでなければならない。一つだけのコマンドraise NotImplementedError()を持って

今ではクラスの外の関数であるので、MovementSystemsdl2.ext.Applicatorから)デフォルトのメソッドを使用しprocess()。これは、(この)関数を書かなければならないdeveloresのための情報です。

+0

ダムそうです!どのように私はそれを逃しましたか? Pythonは私が作成しようとしていることを知る方法がないので、defプロセスが完全に正当なものになっている可能性があるため、pythonはエラーを伴う特定の行に私を誘導できませんでした。ご協力いただきありがとうございます。 –