2012-04-16 23 views
6

私はパイゲームでゲームを作っています。最初の画面では、(i)ゲームを開始し、(ii)命令で新しい画面を読み込み、そして(iii)プログラムを終了するために押すことができるボタンが必要です。 。python/pygameでボタンを作る方法は?

私はこのコードをボタン作成用にオンラインで見つけましたが、私はそれを実際に理解していません(私はオブジェクト指向プログラミングでそれほど優れていません)。私はそれが何をしているかについていくつかの説明を得ることができればそれはすばらしいだろう。また、私はそれを使用し、ファイルパスを使用して私のコンピュータ上のファイルを開こうとすると、私はエラーshを取得します:ファイルパス:許可が拒否され、解決する方法がわかりません。

#load_image is used in most pygame programs for loading images 
def load_image(name, colorkey=None): 
    fullname = os.path.join('data', name) 
    try: 
     image = pygame.image.load(fullname) 
    except pygame.error, message: 
     print 'Cannot load image:', fullname 
     raise SystemExit, message 
    image = image.convert() 
    if colorkey is not None: 
     if colorkey is -1: 
      colorkey = image.get_at((0,0)) 
     image.set_colorkey(colorkey, RLEACCEL) 
    return image, image.get_rect() 
class Button(pygame.sprite.Sprite): 
    """Class used to create a button, use setCords to set 
     position of topleft corner. Method pressed() returns 
     a boolean and should be called inside the input loop.""" 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image, self.rect = load_image('button.png', -1) 

    def setCords(self,x,y): 
     self.rect.topleft = x,y 

    def pressed(self,mouse): 
     if mouse[0] > self.rect.topleft[0]: 
      if mouse[1] > self.rect.topleft[1]: 
       if mouse[0] < self.rect.bottomright[0]: 
        if mouse[1] < self.rect.bottomright[1]: 
         return True 
        else: return False 
       else: return False 
      else: return False 
     else: return False 
def main(): 
    button = Button() #Button class is created 
    button.setCords(200,200) #Button is displayed at 200,200 
    while 1: 
     for event in pygame.event.get(): 
      if event.type == MOUSEBUTTONDOWN: 
       mouse = pygame.mouse.get_pos() 
       if button.pressed(mouse): #Button's pressed method is called 
        print ('button hit') 
if __name__ == '__main__': main() 

私を助けることができる誰かにありがとう。私はあなたのためのコード例を持っていないが、私はそれを行うだろうか

答えて

12

さ:

  1. テキストは、コンストラクタの引数
      として、ボタンの上に行くために、Buttonクラスを作ります
    1. ブリットその矩形を保存し、画面をゲームへpygameの
    2. に画像のいずれか、または満たされたのRect
    3. がFont.Renderのもので、その上にテキストをレンダリングし、
  2. をpygameのダウンロードの表面を作成します。
  3. マウスクリック時に確認してください。mouse.get_pos()は、ボタンのblitによってメインサーフェスに返されたrect内の座標と一致します。

これは、あなたの例が行っているのと似ていますが、それでもまだ異なります。

+0

申し訳ありませんが、お試しいただきありがとうございます。 – user1334014

0

あなたがオンラインで見つけた「コード」はあまりよくありません。ボタンを作るために必要なのはこれだけです。あなたのコードの冒頭にこれを入れてください:

def Buttonify(Picture, coords, surface): 
    image = pygame.image.load(Picture) 
    imagerect = image.get_rect() 
    imagerect.topright = coords 
    surface.blit(image,imagerect) 
    return (image,imagerect) 

次のものをゲームループに入れてください。また、どこかにあなたのゲームループ中:

Image = Buttonify('YOUR_PICTURE.png',THE_COORDS_OF_THE_BUTTON'S_TOP_RIGHT_CORNER, THE_NAME_OF_THE_SURFACE) 

また、あなたがそうfor event in pygame.event.get

if event.type == MOUSEBUTTONDOWN and event.button == 1: 
    mouse = pygame.mouse.getpos 
    if Image[1].collidrect(mouse): 
     #code if button is pressed goes here 

を行っているところはどこでもあなたのゲームループでこれを入れて、buttonifyボタンになります画像をロードします。この画像は、コードと同じディレクトリにある.jpgファイルまたはその他のPICTUREファイルである必要があります。写真はその名前です。名前には.jpgなどが必要で、名前は引用符で囲む必要があります。 Buttonifyのcoordsパラメータは、pygameから開いた画面またはウィンドウの右上の座標です。表面はこの事です:

blahblahblah = pygame.surface.set_mode((WindowSize)) 
/|\ 
    | 
    Surface's Name 

だから、関数はpygameの面である「画像」と呼ばれるものを作ることは(場所でそれを設定し、第二のためには「imagerectを」と呼ばれるの周りに、それは長方形を置きますパラメータをblittingすると)、次にその位置を設定し、2行目から最後の行までblitsします。

コードの次のビットは 'イメージ'を 'イメージ'と 'イメージ修正'のタプルにします。

最後のコードはif event.type == MOUSEBUTTONDOWN and event.button == 1:です。これは基本的に左マウスボタンが押されたことを意味します。このコードはfor event in pygame.event.getである必要があります。次の行は、マウスをマウス位置のタプルにします。最後の行は、マウスがImage [1]と衝突したかどうかを確認します。コードはそれに従います。

さらに説明する必要がある場合は教えてください。

0

したがって、8つのパラメータを受け取るbuttonという名前の関数を作成する必要があります。 1)ボタンのメッセージ 2)ボタンの左上隅のX位置 3)ボタンの左上隅のY位置 4)ボタンの幅 5)ボタンの高さ 6)無効な色(背景色あなたがあなたのゲームループを作成するときに

def button (msg, x, y, w, h, ic, ac, action=None): 
    mouse = pygame.mouse.get_pos() 
    click = pygame.mouse.get_pressed() 

    if (x+w > mouse[0] > x) and (y+h > mouse[1] > y): 
     pygame.draw.rect(watercycle, CYAN, (x, y, w, h)) 
     if (click[0] == 1 and action != None): 
      if (action == "Start"): 
       game_loop() 
      elif (action == "Load"): 
       ##Function that makes the loading of the saved file## 
      elif (action == "Exit"): 
       pygame.quit() 

    else: 
     pygame.draw.rect(watercycle, BLUE, (x, y, w, h)) 
     smallText = pygame.font.Font("freesansbold.ttf", 20) 
     textSurf, textRect = text_objects(msg, smallText) 
     textRect.center = ((x+(w/2)), (y+(h/2))) 
     watercycle.blit(textSurf, textRect) 

をperfomしたいアクションの) 7)アクティブカラー(あなたがホバー色) 8)名前、あなたはボタンの関数を呼び出す:

ボタンを( "Start"、600,120,120,25、BLUE、CYAN、 "Start")

0

これは、私が以前に作ったボタンのクラスです: https://www.dropbox.com/s/iq5djllnz0tncc1/button.py?dl=0 ボタンは私が覚えている限り、ウィンドウ7のスタイルです。私はコンピュータにパイゲームを持っていないので、最近テストすることはできませんでした。使用しています。お役に立てれば!

関連する問題