1

だから私はスプライトとグループでゲームを作成しています。私を悩ませ続けている1つのことを除けば、すべてが本当にうまくいっています。写真は千語以上を語ります: http://i.imgur.com/S3fsone.png

ご覧のとおり、背景画像が十字線に表示されています。ただし、船は長方形の白い縁で切り取られています。クロスヘアも船もスプライトで、使用している画像は透過PNG画像です。

これを削除する方法がわかりません。現在、十字線で実験しているので、それを念頭に置いて、関連するコードを投稿します。

#Ship class
class Ship(pygame.sprite.Sprite):

    def __init__(self, position):
        pygame.sprite.Sprite.__init__(self)
        self.imageoriginal = pygame.image.load("ship.png")
        self.image = self.imageoriginal
        self.rect = self.image.get_rect()
        self.rect.center = position

#Crosshair class
class Pointer(pygame.sprite.Sprite):

    def __init__(self, image):
        super(Pointer, self).__init__()
        self.image = image.convert_alpha()
        self.rect = self.image.get_rect()

    def update(self):
        self.rect.center = pygame.mouse.get_pos()


def main():
    pygame.init()

    #Window and background
    window = pygame.display.set_mode((1000, 600), SRCALPHA)
    background = pygame.image.load("background.png")
    window.blit(background, (0, 0))

    #Ship and ship group
    ship = Ship((490, 500))
    theship = pygame.sprite.Group(ship)

    #Crosshair image and group
    crosshairimage = pygame.image.load("images\\crosshair.png")
    pointer = pygame.sprite.Group()

    #Game loop
    running = True
    while running:
        clock.tick(60)

        #Cut out from my event loop. Creates the crosshair that follows the mouse
        for e in pygame.event.get():
            elif e.key == K_4:
                pointer.add(Pointer(crosshairimage))

        #Update and redraw methods for both
        theship.clear(window, background)
        theship.update(window)
        theship.draw(window)
        pointer.clear(window, background)
        pointer.update()
        pointer.draw(window)
        pygame.display.flip()

そして、それはそれであるべきです。十字線はマウスに完全に追従し、赤以外の部分は背景で透明になっています。ただし、他のスプライトでは透明ではなく、それが問題の要点です。他のスプライトの上を移動する他のスプライトもこの問題を引き起こします。

これを引き起こしているのはスプライトの四角形であると推測できますが、修正方法はわかりません。マスクを使用してみましたが、スプライトを移動できるように四角形が必要ですよね? マスク クラスの「self.rect.center = position」メソッドと同等のものが見つかりませんでした。

誰かがこれについて私に何ができるか教えていただければ幸いです。これは長い間頭痛の種でした。

4

1 に答える 1

0

問題は描画セクションにあると思います。各グループをクリアして個別に描画する代わりに、両方のグループをクリアしてから更新してから描画します。

    #Update and redraw methods for both
    theship.clear(window, background)
    theship.update(window)
    theship.draw(window)
    pointer.clear(window, background)
    pointer.update()
    pointer.draw(window)
    pygame.display.flip()

持ってる:

    #Update and redraw methods for both
    theship.clear(window, background)
    pointer.clear(window, background)
    theship.update(window)
    pointer.update()
    theship.draw(window)
    pointer.draw(window)
    pygame.display.flip()

これが役立つことを願っています。

于 2013-08-07T05:33:32.070 に答える