2016-05-08 2 views
1

私は大学でpygameを使用してプロジェクトのゲームを作っています。私が今やってみようとしているのは、ユーザーが左右の矢印キーを押したときに画面上で前後に移動するように制御できるボールを作成することだけです。正直なところ私は何をしているのか分からないので、ゲームのベースとしてpongのために使用されたpygameのドキュメントのコードを使用しています。私のコードは以下の通りです。タイトルに誤りがある理由を誰かが知っているなら、教えてください。pygame.displayなしで変換できませんpygameで初期化エラー

私のpython 3.4を使用してコードをテストしたとき、私は最初にあなたの試みで構文エラーを得たとしてPython/pygameのバージョンは、あなたが実行している何
try: 
     import sys 
     import random 
     import math 
     import os 
     import getopt 
     import pygame 
     from socket import * 
     from pygame.locals import * 
except ImportError, err: 
     print "couldn't load module. %s" % (err) 
     sys.exit(2) 

def load_png(name): 
    """ Load image and return image object""" 
    fullname = name 
    try: 
     image = pygame.image.load(fullname) 
     if image.get_alpha() is None: 
      image = image.convert() 
     else: 
      image = image.convert_alpha() 
    except pygame.error, message: 
      print 'Cannot load image:', fullname 
      raise SystemExit, message 
    return image, image.get_rect() 

class Ball(pygame.sprite.Sprite): 
    def __init__(self, (xy)): 
     pygame.sprite.Sprite.__init__(self) 
     self.image, self.rect = load_png('ball.png') 
     screen = pygame.display.get_surface() 
     self.area = screen.get_rect() 
     self.hit = 0 
     self.speed = 10 
     self.state = "still" 

    def reinit(self): 
     self.state = "still" 
     self.movepos = [0,0] 
     if self.side == "left": 
      self.rect.midleft = self.area.midleft 

    def update(self): 
     newpos = self.rect.move(self.movepos) 
     if self.area.contains(newpos): 
      self.rect = newpos 
     pygame.event.pump() 

    def moveleft(self): 
     self.movepos[1] = self.movepos[1] - (self.speed) 
     self.state = "moveleft" 

    def moveright(self): 
     self.movepos[1] = self.movepos[1] + (self.speed) 
     self.state = "moveright" 

def main(): 
    running = True 
    pygame.init() 
    (width, height) = (800, 600) 
    screen = pygame.display.set_mode((width, height)) 

    # Fill background 
    background = pygame.Surface(screen.get_size()) 
    background = background.convert() 
    background.fill((0, 0, 0)) 
    screen.blit(background, (0, 0)) 
    pygame.display.flip() 


    global player 
    player = Ball("left") 
    playersprite = pygame.sprite.RenderPlain(player) 

    playersprite.draw(screen) 
    player.update() 
    while running: 

     for event in pygame.event.get(): 
      if event.type == KEYDOWN: 
       if event.key == K_q: 
        running = False 
       if event.key == K_LEFT: 
        player.moveleft() 
       if event.key == K_RIGHT: 
        player.moveright() 
      elif event.type == KEYUP: 
       if event.key == K_UP or event.key == K_DOWN: 
        player.movepos = [0,0] 
        player.state = "still" 
     #screen.blit(background, ball.rect, ball.rect) 
     screen.blit(background, player.rect, player.rect) 
     #screen.blit(background, player2.rect, player2.rect) 
     #ballsprite.update() 
     playersprite.update() 
     #ballsprite.draw(screen) 
     playersprite.draw(screen) 



if __name__ == '__main__': main() 

答えて

0

私が今行って取得しようとしているすべてのユーザーが 左と右矢印キーを押したときに画面に行き来する を制御することができるボールを作成することです。

あなたはこれを大いに複雑にしています。ボールを移動するのに102行は必要ありません。私はあなたに多くを助けることができると思う簡単な例を書き、コメントしました。キーの押下を検出してxとy変数を更新し、xとy変数を使用してイメージを描画するだけです。

import pygame 

screen_width = 1280 
screen_height = 720 

pygame.init() 
screen = pygame.display.set_mode((screen_width,screen_height)) 

BLACK = (0,0,0) 

ballImg = pygame.image.load("ball.jpg") 
ballPosition = [0,0] 
speed = 1 


def game_loop(): 
    while 1: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       exit() 

     #get all the keys being pressed 
     keys = pygame.key.get_pressed() 


     #depending on what key the user presses, update ball x and y position accordingly 
     if keys[pygame.K_UP]: 
      ballPosition[1] -= speed 
     if keys[pygame.K_DOWN]: 
      ballPosition[1] += speed 
     if keys[pygame.K_LEFT]: 
      ballPosition[0] -= speed 
     if keys[pygame.K_RIGHT]: 
      ballPosition[0] += speed 


     screen.fill(BLACK) #fill the screen with black 
     screen.blit(ballImg, ballPosition) #draw the ball 
     pygame.display.update() #update the screen 

game_loop() 
+0

ああ私の神、ありがとうございました。私は本当にこれが本当に役立つように、これは本当にありがとう! –

+0

問題はありませんが、私はあなたが理解していない巨大で不思議なコードから始めるのではなく、最初からプログラムを構築する方がはるかに優れていると思います。 – Keatinge

0

:文を除いて、これは、異なるバージョンの上に別の構文に起因する可能性があります。修正した後、左または右を押すときに定義されていないmoveposの問題に遭遇しました。 Ballクラスの__init__()にを追加すると、これが修正されました。

私はあなたが説明したエラーに遭遇したことはありませんでしたが、ゲームは私が何をしても一定の黒い画面を表示しました。

私が言いたいのは、エラーが発生する可能性があることは、コードが以前に取り上げられていない他の間違いによって発生する可能性があるということです。ここの答えの1つはうまくまとめられています:error: video system not initialized; Is there a solution?

また、どの変数にボールのxとyの位置が格納されていますか?あなたはそれをどうやってコントロールしているのか分からないようでしたか?

関連する問題