So verschieben Sie ein Bild mit der Maus in pygame?
Ich geschrieben habe, ein wenig pygame Programm für das verschieben eines Bildes durch klicken und bewegen der Maus.
Kämpfe ich mit der verschieben-Funktion movableImg
Arbeit mit meinen eigenen x, y
Parameter und nicht mit den vordefinierten x, y
Parameter, wie es jetzt ist.
Hier ist mein code:
import pygame
import time
pygame.init()
display_width = 800
display_height = 600
white = (255, 255, 255)
gameDisplay = pygame.display.set_mode((display_width, display_height))
clock = pygame.time.Clock()
drag = 0 #switch with which I am seting if I can move the image
x = 100 #x, y coordinates of the image
y = 100
img = pygame.image.load('button.png') #my image and then his width and height
imgWidth = 100
imgHeight = 100
def image(imgX,imgY): #function to blit image easier
gameDisplay.blit(img, (imgX, imgY))
def movableImg(): #function in which i am moving image
global drag, x, y
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
image(x, y)
if click[0] == 1 and x + imgWidth > mouse[0] > x and y + imgHeight > mouse[1] > y: #asking if i am within the boundaries of the image
drag = 1 #and if the left button is pressed
if click[0] == 0: #asking if the left button is pressed
drag = 0
if drag == 1: #moving the image
x = mouse[0] - (imgWidth / 2) #imgWidth /2 because i want my mouse centered on the image
y = mouse[1] - (imgHeight / 2)
def main_loop():
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
gameDisplay.fill(white)
movableImg()
pygame.display.update()
clock.tick(60)
main_loop()
pygame.quit()
quit()
"global drag, x, y" jedes mal, wenn Sie die
Ja, ich denke u r Recht.... Ich denke, ich werde einfach versuchen, an etwas zu denken besser... E: So ist es wohl besser, wenn ich einfach weitere Funktionen anstelle von globalen Variablen?
pass-Eingang und Ausgang zu/von Ihrer Funktion über Parameter und Rückgabewerte.
vielen Dank für die Hilfe und Ratschläge
global
Stichwort.. nicht. Es gibt bessere Wege, das zu tun.Ja, ich denke u r Recht.... Ich denke, ich werde einfach versuchen, an etwas zu denken besser... E: So ist es wohl besser, wenn ich einfach weitere Funktionen anstelle von globalen Variablen?
pass-Eingang und Ausgang zu/von Ihrer Funktion über Parameter und Rückgabewerte.
vielen Dank für die Hilfe und Ratschläge
InformationsquelleAutor mikro45 | 2016-01-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, hier ist der code, den ich im internet gefunden und die funktioniert, wie ich will. QUELLE
InformationsquelleAutor mikro45
Brauchen Sie nicht die Funktion. Alles, was Sie brauchen, ist einige Ereignisse in Ihrem
for
Schleife. Statt einer chaotischen, komplizierten Funktion können Sie einfach herausfinden, wenn die Maus geklickt wird:Nun
coordinates
ist eine vordefinierte variable, die ich gemacht hier oben, in diesem Fall ist es für die Speicherung der Koordinaten der Maus. Wennevent.type
istMOUSEBUTTONDOWN
es bedeutet, dass die Maus geklickt wurde, und das Programm sollte beginnen, den code unter, dassif
- Anweisung. Die Ereignisse werden nur einmal aktivieren, whihc bedeutet, dass Sie nicht ziehen. Ich empfehle, dass Sie eine Funktion erstellen, die es ermöglicht, die Veranstaltung fortzusetzen, wenn der Benutzer gedrückt halten, auf die Maus wie diese:held
wird eine Boolesche variable: es wird gleich zuTrue
wenn die Maus, wenn geklickt haben oder zuFalse
wenn nicht. In diesem Fall verhindert das Programm, zu denken, Sie sind, klicken mit der Maus unendlich, fügen Sie eine weitereif
Anweisung, um zu überprüfen, ob die Maus freigegeben wurde und wenn dem so ist, ändernheld
zuFalse
:auch, um sicherzustellen, dass die Funktion tatsächlich registrieren die Tatsache, dass die Maus noch nach unten gezogen wird, setzen Sie diese Zeile in die
if
Anweisung für dieMOUSEBUTTONDOWN
Veranstaltung:Und schließlich, um die Funktion auszuführen, fügen Sie eine
if
- Anweisung vor Ihrerfor
Schleife um die Funktion auszuführen, wenn Sie benötigt:Verschieben mehrerer Bilder ändern Sie Ihre Positionen, um gleich
coordinates
oder irgendwie mitcoordinates
. Dieif
Anweisungen nicht zu bewegen, nur ein Bild zur Zeit.Was meinst du, mehr als einmal?
So konnte ich bewegen 2 Bilder, wenn Sie wollen... und das ist es, was ich will. wenn das ok ist, zu tun...
Tut dies Ihr problem lösen?
Nein, es ist nicht...
InformationsquelleAutor Anthony Pham