2011-07-22 27 views
1

我正在創建一個簡單的MP3播放器,我的第一個任務是創建一個用戶可以按下的簡單按鈕。我創建了一個名爲Button的類來處理這種行爲,並檢測用戶是否點擊了它,然後改變顏色。我現在試圖使用該按鈕顯示的默認文本和另一個字符串(pres_string),如果按下該按鈕,將顯示該字符串(pres_string)。在pygame中,屏幕上的blitting表面的正確順序是什麼?

唯一的問題是我的背景表面似乎在錯誤的地方,正在繪製我所做的任何更改。

這裏是我的代碼:

http://pastebin.com/Nh3yy01X

正如你可以看到我已經註釋掉我描述和在主函數基本變量試過只是爲了測試發生了什麼事錯了線。

感謝您的任何幫助。

(隨意改變問題的標題,我不知道什麼最accuratelydescribed我的問題)

+0

沒有100%地肯定pygame的,但大多數圖書館渲染後到前,所以你必須有代碼來渲染/位塊傳輸的背景** **第一,然後編碼呈現文本。 – thedaian

回答

1

清除表面的每一個迴路

def draw(self): 
    # clear screen." 
    self.screen.fill(self.color_bg) 

    # first draw background 
    # Then buttons 
    # then any extra top level text 

    # update 
    pygame.display.flip() 

提示:對於顏色,你可以與人的名字叫pygame.Color()之類redgray20gray80有一個很好的對比,使用的BG和文本)

from pygame import Color 
    text = Color('gray20') 

您的按鈕,psuedocode。修復:作爲實例成員移動的顏色。

class Button(object): 
    def __init__(self, text, rect=None): 
     self.color_bg = Color("gray20") 
     self.color_text = color("gray80") 

     if rect is None: rect = Rect(0,0,1,1) 
     self.rect = rect 
     self._render() 
    def _render(self): 
     # draw button and .render() font, cache to surface for later.  
     self.surface_cached = self.surface.copy() 
     # render text 

     #if size changes, save rect.size of cached surface , mantaining location 
     self.rect.size = cache.get_rect.size 
    def draw(self): 
     # draw cached surface 
     screen.blit(self.surface_cached, self.rect) 

對於testClick使用Rect.collidepointhttp://www.pygame.org/docs/ref/rect.html#Rect.collidepoint

0

像繪圖或繪畫2D基於位圖的計算機圖形 - 你把新的墨水之上那裏已經有了。所以你的背景必須是你每次繪製的第一個東西。

相關問題