1

私は単純な mp3 プレーヤーを作成しています。最初のタスクは、ユーザーが押すことができる単純なボタンを作成することでした。この動作を処理し、ユーザーがクリックしてから色が変わるかどうかを検出する Button というクラスを作成しました。ボタンが表示されるデフォルトのテキストと、ボタンが押された場合に表示される別の文字列(pres_string)を作成しようとしています。

唯一の問題は、背景サーフェスが間違った場所にあるように見え、行った変更を上書きしていることです。

これが私のコードです:

http://pastebin.com/Nh3yy01X

ご覧のとおり、説明した行をコメントアウトし、何が問題なのかをテストするために、メイン関数の基本変数で試しました。

助けてくれてありがとう。

(質問のタイトルを自由に変更してください。私の問題を最も正確に説明しているものはわかりませんでした)

4

2 に答える 2

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() のような人間の名前で呼び出すことができますred(gray20そして、背景gray80とテキストに使用するために、良いコントラストを持っています。)

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

あなたのボタン、疑似コード。修正: インスタンス メンバーとして色を移動しました。

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使用http://www.pygame.org/docs/ref/rect.html#Rect.collidepoint _Rect.collidepoint

于 2011-08-06T18:11:42.223 に答える
0

2Dビットマップベースのコンピュータグラフィックスは、描画やペイントのようなものです。すでに存在するものの上に新しいインクを配置します。したがって、あなたの背景はあなたが毎回描く最初のものでなければなりません。

于 2011-07-24T19:20:13.370 に答える