簡體   English   中英

pygame中的某些坐標后,牆壁精靈未顯示在屏幕上

[英]Wall sprite not showing up on screen after certain coordinates in pygame

嘗試進行碰撞檢測以使精靈相互反射,但是在坐標(5,5)之后我的牆壁精靈沒有顯示出來,我不確定這是否可能與fill和colorkey都為白色有關,或pygame.Surface(x,y)與rect的x,y相同的事實。

這是我的牆上課:

class Wall(pygame.sprite.Sprite):

def __init__(self, color, h, d, x, y):
    super().__init__()

    self.image = pygame.Surface([x, y])
    self.image.fill(WHITE)
    self.image.set_colorkey(WHITE)

    pygame.draw.rect(self.image, color, [h, d, x, y])

    self.rect = self.image.get_rect()

這是我用於創建牆3和牆4的代碼:

wall3 = Wall(BLACK, 0, 400, 700, 2)
wall_list.add(wall3)
all_sprite_list.add(wall3)

wall4 = Wall(BLACK, 700, 0, 2, 400)
wall_list.add(wall4)
all_sprite_list.add(wall4)

至於我,你有兩個問題

首先:使用誤導性的名稱-變量x,y應該相當width, height但是稍后。

第二:假定曲面使用與屏幕相同的坐標,但事實並非如此。 它以(0,0)開始,以(x,y)結束,但是您嘗試在表面(h,d)的外側繪制rect。

所以符合

pygame.draw.rect(self.image, color, [h, d, x, y])

您需要(0,0)而不是(h,d)

pygame.draw.rect(self.image, color, [0, 0, x, y])

並且您必須將(h,d)Rect()

self.rect = self.image.get_rect()
self.rect.x = h
self.rect.y = d

坦率地說, draw.rect()將使用所有表面,因此您可以僅使用fill()來進行相同操作

def __init__(self, color, h, d, x, y):
    super().__init__()

    self.image = pygame.Surface([x, y])
    self.image.fill(color)

    self.rect = self.image.get_rect()
    self.rect.x = h
    self.rect.y = d

如果您對變量使用更好的名稱,那么您將獲得

def __init__(self, color, x, y, width, height):
    super().__init__()

    self.image = pygame.Surface([width, height])
    self.image.fill(color)

    self.rect = self.image.get_rect()
    self.rect.x = x
    self.rect.y = y

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM