2017-10-15 4 views
0

Je développe actuellement un jeu en utilisant Python et PyGame. J'ai fait des sprites d'image pour les boutons d'option principaux, mais je ne peux pas sembler comprendre comment faire les images cliquables qui me mèneront à un écran différent. Code source:Cliquer sur les images avec 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() 

Toute forme d'aide est appréciée. Merci.

Répondre

0

Essayez quelque chose comme ceci:

#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) 

Ceci, bien sûr, est que pour le bouton de bataille. Vous devez ajouter un Rect pour chaque bouton que vous utilisez. Aussi, je suggérerais de faire une classe de boutons avec la fonction de collision à l'intérieur et d'avoir un tableau de boutons que vous pouvez parcourir sans alourdir votre code. Mais ce qui précède est une solution rapide et sale.

Espérons que cela aide!

+0

@JesseScott Content de pouvoir aider. –