2016-03-28 15 views
0
#Imported Pygame 
import pygame 

#The Colors 
BLACK = (0, 0, 0) 
GREEN = (0, 255, 0) 
WHITE = (255, 255, 255) 
RED = (255, 0, 0) 
ORANGE = (255, 115, 0) 
YELLOW = (242, 255, 0) 
BROWN = (115, 87, 39) 
PURPLE = (298, 0, 247) 
GRAY = (168, 168, 168) 
PINK = (255, 0, 234) 
pygame.init() 
#The Screen 
screen = pygame.display.set_mode([1000,500]) 
#Name of the window 
pygame.display.set_caption("My first game") 

clock = pygame.time.Clock() 

#The sounds 

# Positions of graphics 
background_position = [0,0] 
singleplayer_position = [350,200] 
#The graphics 
background_image = pygame.image.load("Castle.png").convert() 
singleplayer_image = pygame.image.load("SinglePlayer.png").convert() 
singleplayer_image.set_colorkey(WHITE) 
#Main Loop __________________________ 

done = False 

while not done: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done = True 
    # Copy of background or main menu 
    screen.blit(background_image, background_position) 

    #Copy of other images 
    screen.blit(singleplayer_image, singleplayer_position) 
    pygame.display.flip() 
    if pygame.mouse.get_pressed()[0] and singleplayer_image.collidepoint(mouse_pos): 
     print("Hi") 

    clock.tick(60) 
#To quit game 
pygame.quit() 

Dies ist grundlegend mein Code, aber ich bekomme immer den Fehler, dass pygame.surface Objekt hat kein Attribut kollidieren Punkt. Ich versuche, ein anklickbares Bild zu haben, aber es funktioniert nicht gut. Wenn Sie einen Weg zeigen könnten, dass ein Bild anklickbar sein kann, danke.Anklickbare Bilder in Pygame?

Antwort

1

Ihr Traceback erklärt das Problem perfekt: pygame Oberflächen haben kein Attribut collide_point. Collidepoint gehört zur Rect-Klasse, aber Sie rufen sie auf einem Surface-Objekt auf.

Um zu testen, ob, wenn die Mausposition mit dem Bild kollidiert, Sie ein Rect haben müssen, das die Bildposition beschreibt. Also, wenn Sie Ihre singleplayer_position neu definieren ...

singleplayer_position = Rect(350, 200, 100, 100) # Width/height of 100 pixels. 

können Sie jetzt diese Variable verwenden für Rect Methoden, wie collidepoint.

singleplayer_position.collidepoint(mouse_pos) 

Hinweis: Um Ihr Rect genau das Bild repräsentieren Sie ..

singleplayer_position = singleplayer_image.get_rect() 

Voreingestellt ist oben links laden, aber es hat die richtige Breite/Höhe jetzt. Lass uns dahin gehen, wo du es haben wolltest.

singleplayer_position = singleplayer_position.move(350, 200) 

bearbeiten, zu zeigen, wie Mausposition zu erhalten: an der Spitze hinzufügen,

from pygame.locals import * # Brings in all the pygame keywords we need. 

Nun fügen Sie diese für Schleife zu Ihrer Veranstaltung.

if event.type == MOUSEBUTTONDOWN: 
    mouse_pos = event.pos # Now it will have the coordinates of click point. 
    if singleplayer_position.collidepoint(mouse_pos): 
     print('hi') 

Nun, wenn die Maustaste nach unten geklickt wird, können Sie die Bilder Rect (singleplayer_position) überprüfen, um zu sehen, ob es kollidiert mit, wo die Maus clickd wurde.

+0

Nun, ich habe getan, was Sie gesagt haben, aber das Rect funktioniert nicht, weil es kein richtiger Zeichenbefehl ist. Ich habe jedoch versucht, ein Rechteck um mein Bild zu zeichnen, das du mir als Inspiration/Idee gegeben hast, und für den kollidalen Punkt mit diesem rect, aber ich weiß nicht, wie ich den kollidierenden Punkt mit dem rect und der Maus pos strukturieren soll Sais die Mauspos ist ein unbekanntes Attribut – HALLOPEOPLE

+0

Sie blit unter Verwendung des Bildes und des Rect. Das Rect hat nichts mit dem Zeichnen des Bildes zu tun, deshalb hast du dort ein anderes Problem. Außerdem ist mouse_pos ein "unbekanntes Attribut", weil Sie es nie definiert haben, also versucht Python zu sagen, dass Sie etwas verwenden, das nicht existiert. –

+0

Ich schlage vor, Sie googlen Ihre Probleme und lesen Sie die Dokumentation, bevor Sie Probleme posten, da Ihre Fehler mit einer Google-Suche –