2017-10-15 1 views
0

Ich entwickle gerade ein Spiel mit Python und PyGame. Ich habe Bild-Sprites für die Haupt-Optionsfelder gemacht, aber ich kann nicht herausfinden, wie man die Bilder anklickbar macht, die mich auf einen anderen Bildschirm bringen. Quellcode:Klicken auf Bilder mit 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() 

Jede Art von Hilfe wird geschätzt. Vielen Dank.

Antwort

0

versuchen, etwas wie folgt aus:

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

Dies ist natürlich nur für den Kampf-Taste. Sie müssen für jede verwendete Schaltfläche ein Rect hinzufügen. Außerdem würde ich vorschlagen, eine Button-Klasse mit der Kollisionsfunktion im Inneren zu erstellen und ein Array mit diesen Schaltflächen zu haben, durch die Sie iterieren können, ohne Ihren Code zu falten. Aber das obige ist eine schnelle und schmutzige Lösung.

Hoffe, das hilft!

+0

@JesseScott Ich bin froh, dass ich helfen konnte. –

Verwandte Themen