[英]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.