2017-10-15 18 views
0

私は現在、PythonとPyGameを使ってゲームを開発中です。私は主なオプションボタンの画像スプライトを作成しましたが、画像をクリック可能にして別の画面に移動させる方法を見つけられないようです。ソースコード:PyGameで画像をクリック

import os 
import sys 
import pygame 
import time 

class Colors: 
    black = (0, 0, 0) 
    white = (255, 255, 255) 
    red = (255, 0, 0) 
    dark_red = (102, 0, 0) 
    grey = (128, 128, 128) 
    dark_grey = (51, 51, 51) 

class Variables: 
    screen_w = 1000 
    screen_h = 600 
    battleButton = pygame.image.load("Images/battle_button.png") 
    shopButton = pygame.image.load("Images/shop_button.png") 
    saveButton = pygame.image.load("Images/save_button.png") 
    equippedItem = pygame.image.load("Images/equipped.png") 
    creditsButton = pygame.image.load("Images/credits_button.png") 
    baseballBat = pygame.image.load("Images/baseball_bat.png") 
    baseballBat = pygame.transform.scale(baseballBat, (250, 250)) 
    playerHealthMax = 100 
    playerHealthMin = 0 
    playerHealth = playerHealthMax 
    playerCash = 0 
    pygame.font.init() 
    gameFont = pygame.font.SysFont("Tweaky", 70) 
    title = gameFont.render("Causatum", 1, (Colors.black)) 
    mainFont = pygame.font.SysFont("Arial Rounded MT Bold", 50) 
    equippedWeap = mainFont.render("Equipped", 1, (Colors.black)) 
    cash = mainFont.render("Cash: ${}".format(playerCash), 1, 
(Colors.black)) 
    health = mainFont.render("Health: {}".format(playerHealth), 1, 
(Colors.black)) 
    gameVersion = mainFont.render("v1.0.0", 1, (Colors.black)) 

screen = pygame.display.set_mode((Variables.screen_w, Variables.screen_h)) 
pygame.display.set_caption("Causatum") 
screen.fill(Colors.black) 
pygame.display.flip() 
running = True 

while running: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 
    screen.fill(Colors.grey) 
    screen.blit(Variables.battleButton, (0, 170)) 
    screen.blit(Variables.shopButton, (0, 240)) 
    screen.blit(Variables.saveButton, (0, 310)) 
    screen.blit(Variables.title, (330, 0)) 
    screen.blit(Variables.equippedItem, (645, 250)) 
    screen.blit(Variables.baseballBat, (735, 230)) 
    screen.blit(Variables.equippedWeap, (723, 215)) 
    screen.blit(Variables.creditsButton, (0, 380)) 
    screen.blit(Variables.cash, (0, 50)) 
    screen.blit(Variables.health, (0, 0)) 
    screen.blit(Variables.gameVersion, (905, 0)) 
    pygame.display.flip() 

何か助けていただければ幸いです。ありがとう。

答えて

0

このような何か試してみてください:

#in 'Variables' add this line 
battleButton_rect = battleButton.get_rect(centerx = 0, centery = 170) 

#new function, outside any classes 
def collide(mouseX, mouseY, rect): #new function for checking the collision of the mouse with a button 
    return (mouseX >= rect.x-rect.width/2 and mouseX <= rect.x+rect.width/2 and mouseY >= rect.y-rect.height/2 and mouseY <= rect.y+rect.height/2) 

# in 'while running' 
if pygame.mouse.get_pressed()[0]: #0 for left button, 1 for right, 2 for middle 
    mouse_pos = pygame.mouse.get_pos() 
    if collide(mouse_pos[0], mouse_pos[1], Variables.battleButton_rect): 
     #code for battle button clicked here 

#replace 
screen.blit(Variables.battleButton, (0, 170)) 
#with 
screen.blit(Variables.battleButton, Variables.battleButton_rect) 

これは、もちろん、唯一の戦いのボタン用です。使用するすべてのボタンにRectを追加する必要があります。また、私は、内部の衝突関数を持つボタンクラスを作成し、コードを畳み込むことなく繰り返し処理できるボタンの配列を持つことをお勧めします。しかし、上記は迅速かつ汚れた解決策です。

希望すると便利です。

+0

@JesseScott Glad私は助けることができました。 –

関連する問題