だから私はスプライトとグループでゲームを作成しています。私を悩ませ続けている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」メソッドと同等のものが見つかりませんでした。
誰かがこれについて私に何ができるか教えていただければ幸いです。これは長い間頭痛の種でした。