-2

こんにちは、python/pygame が初めてで、基本的なプロジェクトを作成しようとしました。画像が読み込まれない理由を教えていただければ、このエラーが理解できないため、計画どおりにはなりませんでした。 Traceback (most recent call last): File "C:\Users\Nicolas\Desktop\template\templat.py", line 15, in <module> screen.fill(background_colour) NameError: name 'background_colour' is not defined

これは私が話していたエラーですが、今は修正しました。画面が開くと背景が表示されてクラッシュします。

   import pygame, sys

pygame.init()


def game():

 background_colour = (255,255,255)
(width, height) = (800, 600)

screen = pygame.display.set_mode((width, height))


pygame.display.set_caption('Tutorial 1')
pygame.display.set_icon(pygame.image.load('baller.jpg'))
background=pygame.image.load('path.png')

target = pygame.image.load('Player.png')
targetpos =target.get_rect()


screen.blit(target,targetpos)
screen.blit(background,(0,0))
pygame.display.update()

while True:
  screen.blit(background,(0,0))
  screen.blit(target,targetpos)


running = True
while running:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      running = False

      if__name__==('__main__')
  game()
4

1 に答える 1

1

__init__あなたは定義を逃しました!

あなたのコードは実行されますが、それはあなたが望むものではありません。クラスの定義内には無限ループがあります。つまり、これを実行していても、何かが欠けています。このコード(少なくともそのほとんど)を__init__関数内に配置してから、クラスのインスタンスを作成する必要があります。

これは私があなたが望むと思うものです:

import pygame, sys

class game():
    width, height = 600,400

    def __init__(self):

        ball_filename = "Ball.png"
        path_filename = "path.png"

        self.screen = pygame.display.set_mode((self.width, self.height))
        pygame.display.set_caption('Star catcher')
        self.background = pygame.image.load(path_filename)
        self.screen.blit(self.background,(0,0))

        self.target = pygame.image.load(ball_filename)

    def run(self):
        while True:
            self.screen.blit(self.background, (0,0))
            targetpos = self.target.get_rect()

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()

if __name__ == "__main__":
    # To run this
    pygame.init()

    g = game()

    g.run()

更新

私はあなたがしなければならないことよりも多くの修正を加えましたが、それらは役に立つかもしれません。私はこれをテストしませんでしたが、問題ないはずです。

幅と高さが定義されていないというエラーは、それらがローカル/グローバル変数ではなく、クラスおよび/またはクラスのインスタンスにバインドされているため、名前空間にあるためです。game.widthしたがって、(クラスごとに)またはself.width(インスタンスごとに、クラスで定義されたメソッド内でのみ)またはg.width(インスタンスごとに、クラス定義の外部にあり、gがゲームクラスのインスタンスである場合)を介してこれらにアクセスする必要があります。

はっきりしているといいのですが。:)

于 2012-06-13T21:37:05.103 に答える