2

コードを書いて、画像を中央に表示しようとしていますが、実行すると画像がまったく表示されません。どこが間違っていたのでしょうか?

(ちなみに、さまざまなコードをテストしましたが、画像は正常にロードされるため、pythonまたはpygame自体に問題はありません)

from __future__ import division
import math
import sys
import pygame


class MyGame(object):
    def __init__(self):
        pygame.mixer.init()
        pygame.mixer.pre_init(44100, -16, 2, 2048)
        pygame.init()

        self.width = 800
        self.height = 600
        self.screen = pygame.display.set_mode((self.width, self.height))

        self.bg_color = 0, 0, 0

        self.alien_img = pygame.image.load('alien.png')
        self.alien_pos = ((self.width-rect.width)//4,
                          (self.height-rect.height)//4)


        self.FPS = 30
        self.REFRESH = pygame.USEREVENT+1
        pygame.time.set_timer(self.REFRESH, 1000//self.FPS)


    def run(self):
        running = True
        while running:
            event = pygame.event.wait()

            if event.type == pygame.QUIT:
                running = False

            elif event.type == self.REFRESH:
                self.draw()

            else:
                pass # an event type we don't handle            

    def draw(self):
        self.screen.fill(self.bg_color)

        rect = self.alien_img.get_rect()
        rect = rect.move(self.alien_pos)
        self.screen.blit(self.alien_img, rect)

        pygame.display.flip()


MyGame().run()
pygame.quit()
sys.exit()
4

1 に答える 1

1

移動する必要があります:

rect = self.alien_img.get_rect()

次の行の前の init に:

self.alien_pos = ((self.width-rect.width)//4,
                      (self.height-rect.height)//4)

以降:

self.alien_img = pygame.image.load('alien.png')

以下は、画像をフレームに配置するための変更を加えたコードです。

from __future__ import division
import math
import sys
import pygame


class MyGame(object):
    def __init__(self):
        pygame.mixer.init()
        pygame.mixer.pre_init(44100, -16, 2, 2048)
        pygame.init()

        self.width = 800
        self.height = 600
        self.screen = pygame.display.set_mode((self.width, self.height))

        self.bg_color = 0, 0, 0

        self.alien_img = pygame.image.load('alien.png')
        rect = self.alien_img.get_rect()
        self.alien_pos = ((self.width-rect.width)//4,
                          (self.height-rect.height)//4)
        self.FPS = 30
        self.REFRESH = pygame.USEREVENT+1
        pygame.time.set_timer(self.REFRESH, 1000//self.FPS)


    def run(self):
        running = True
        while running:
            event = pygame.event.wait()

            if event.type == pygame.QUIT:
                running = False

            elif event.type == self.REFRESH:
                self.draw()

            else:
                pass # an event type we don't handle            

    def draw(self):
        self.screen.fill(self.bg_color)

        rect = self.alien_img.get_rect()
        rect = rect.move(self.alien_pos)
        self.screen.blit(self.alien_img, rect)

        pygame.display.flip()


MyGame().run()
pygame.quit()
sys.exit()

rect が定義される前に rect にアクセスしようとする前に。以下に作成したウィンドウの写真を追加しました。 スクリーン

この写真を途中で取得するというあなたの計画はうまくいかないので、変更する必要があることを指摘します。

self.alien_pos = ((self.width-rect.width)//4,
                      (self.height-rect.height)//4)

に:

self.alien_pos = (self.width//2 - rect.width//2,
                  self.height//2 - rect.height//2)

これにより、必要な結果が得られます。

ここに画像の説明を入力

于 2013-10-31T18:14:09.963 に答える