2015-08-24 53 views
0

出於某種原因,我得到了矩形的不平坦邊框。如果我使用寬度的偶數值,那麼邊界看起來像是另一個較厚的部分。如果我使用寬度的奇數值,那麼邊框看起來是正確的。有什麼我做錯了嗎?下面是代碼:爲什麼矩形邊框在pygame中的大小不一樣?

import pygame 
import sys 

SCREEN_SIZE = SCREEN_WIDTH, SCREEN_HEIGHT = 800, 600 
SCREEN_COLOR = pygame.Color("white") 

SCREEN = pygame.display.set_mode(SCREEN_SIZE) 
FRAME_RATE = 30 

class Vehicle(object): 
    INNER_COLOR = (0, 0, 0, 127) 
    RIM_COLOR = pygame.Color("black") 
    def __init__(self, x, y): 
    self.x = x 
    self.y = y 

    surface = pygame.Surface((40, 80), pygame.SRCALPHA, 32) 
    surface = surface.convert_alpha() 

    self.rect = surface.get_rect() 

    pygame.draw.rect(
     surface, 
     self.INNER_COLOR, 
     self.rect, 
    ) 

    pygame.draw.rect(
     surface, 
     self.RIM_COLOR, 
     self.rect, 
     4 
    ) 

    self.surface = surface 

    def display(self): 
    SCREEN.blit(self.surface, (self.x - 20, self.y - 40)) 

def main(): 
    clock = pygame.time.Clock() 

    v = Vehicle(SCREEN_WIDTH/2, SCREEN_HEIGHT/2) 

    while True: 
    clock.tick(FRAME_RATE) 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: sys.exit() 

    SCREEN.fill(SCREEN_COLOR) 

    v.display() 

    pygame.display.flip() 

if '__main__' == __name__: 
    main() 

回答

0

self.rect = surface.get_rect()

是壞線。寬度將創建一個具有給定寬度的矩形,邊框以給定矩形爲中心。由於您正在創建一個完全填充目標曲面的矩形,所以矩形的一半離開畫布。

self.rect =(4,4,30,70)

給我一個適當大小邊界更換它。

0

它不起作用的原因是因爲pygame居中在表面的內邊緣上創建的邊框。這看起來像下面這樣:

Imagine #### is the border 
Now centre it on this: 
    | 
You cant do it. You either get: 
#|## 
Or you get: 
##|# 

這是它不工作的唯一原因。 在將繪製矩形大小更改爲70之後,我拍攝了兩張截圖,然後繪製了繪製矩形所指的邊框所在的位置。 (I改變的顏色以使其更明顯)
enter image description hereenter image description here

第一個是邊框大小4和第二,邊界大小5.放大到它們針對位的更多細節。 因此,從某種意義上說,它是代碼的問題,但它不應該太難修復。我會爲你留下這個挑戰,但如果你掙扎,告訴我,我會編輯這個帖子並添加例子。