Button klicken funktioniert nach dem 3 mal nicht
Übersicht

White-airBetreff: Button klicken funktioniert nach dem 3 mal nicht |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab so ein kleenes Programm versucht(XD) zu coden bis ich dann net mehr
den späteren Button net anklicken kann.Wo ist hier der Fehler oder wo sollte ich was verbessern: ;;;;Startbildschirm;;;; DrawImage Narutoanfang, 0,0 DrawImage kleinesQuiz,490,150 DrawImage Zitate,450,250 Flip ;;;;QUIZ;;;; ;start; maus=CreateImage(1,1) SetBuffer ImageBuffer(maus) Rect 0,0,1,1 SetBuffer BackBuffer() Repeat mx=MouseX() my=MouseY() If ImagesCollide(maus,mx,my,0,kleinesQuiz,490,150,0) And MouseHit(1) Then Delay 500 Cls DrawImage Naruto1,0,0 SetFont Schrift1 Text 400,30,"Naruto-Quiz" Text 235,400,"Das Quiz besteht aus 10 schwierigen Fragen" Text 235,425,"(Sollten schwer sein ![]() SetFont Schrift3 Text 235,500,"Falls du bereit bist klicke auf 'Ich bin bereit'" DrawImage Ichbinbereit,350,600 DrawImage Naruto,660,580 DrawImage Sprechblase,700,500 Color 0,255,0 SetFont Schrift4 Text 810,525,"Viel" Text 795,575,"Glück!" Ende1 = True EndIf Flip Until Ende1 = True ;;1.Frage;; Repeat mx=MouseX() my=MouseY() ;Nach ich bin bereit; If ImagesCollide(maus,mx,my,0,Ichbinbereit,350,600,0) And MouseHit(1) Then Cls DrawImage Naruto1,0,0 Color 255,255,255 SetFont Schrift1 Text 400,30,"Naruto-Quiz" SetFont Schrift5 Text 200,300,"Welche Aussage würde zu Shikamaru passen?" DrawImage Naruto,500,600 DrawImage Aussage1,700,400 Frage11 = True EndIf Flip Until Frage11 = True ;Antworten; Repeat If ImagesCollide(maus,mx,my,0,Aussage1,700,400,0) And MouseHit(1) Then DrawImage Sprechblase,540,500 SetFont Schrift4 Text 600,500,"RICHTIG!" Cls EndIf Flip Until KeyHit(1) WaitKey |
||
![]() |
garret |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du solltest deinen Code dringend neu strukturieren. Es genügt beispielsweise eine Hauptschleife:
Code: [AUSKLAPPEN] Graphics 640,480 Setbuffer BackBuffer() ; Grafiken laden ; Schriftarten laden (und erst wenn gebraucht setzen) ; es sei denn, du brauchst nur eine Schriftart. Dann hier schon SetFont schreiben, da die Anweisung nur [i]einmal[/i] ausgeführt werden muss und daher nichts in der Hauptschleife zu suchen hat. Repeat : Cls ; benötigte Bilder zeichnen ; [eigentlicher Code] Flip : Until KeyHit(1) : End In diese Schleife machst du einmal die Abfrage nach der Maus und fragst die Bilder einzeln ab. In deinem Fall brauchst du nicht mal ImagesCollide zu nehmen, da auch das schnellere (da einfachere) RectsOverlap reicht. Du willst ja nur überprüfen, ob sich Maus und Bild überlagern und nicht ob sie "richtig" kollidieren. Also in der Hauptschleife: Code: [AUSKLAPPEN] If MouseHit(1) If RectsOverlap(MouseX(),MouseY(),1,1, BildX, BildY, BildBreite, BildHoehe) Then [Anweisung] EndIf Ansonsten solltest du auf Delay verzichten. Es verzögert dein Programm nur unnötig. MfG garret |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
MouseHit / KeyHit sollte nie so verwendet werden.
Der Grund ist das die Hit funktionen zurück geben, wie häufig die entsprechende Taste seit dem letzten Aufruf der Funktion gedrückt wurden. Innerhalb eines hauptschleifen durchlaufs wird das zu üblen problemen führen. Wenn du also Hit anstatt Down verwenden willst, weise es am einfang der Hauptschleife einer Variable zu, die du später in IFs zum vergleichen nutzen kannst. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
garret |
![]() Antworten mit Zitat ![]() |
---|---|---|
Darüber gelesen habe ich schon. Im Eifer des Gefechts habe ich halt diese Variante gewählt.
Kannst du das mit den "üblen" Problemen etwas näher erläutern? Wenn man nur eine If MouseHit()-Abfrage im ganzen Code hat, sollte das doch keine Probleme geben, oder? MfG garret |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein wenn du nur eine hast, dann nicht.
Aber der Mensch hat den Hang zur Vergesslichkeit, so das schnell Mal ein zweites rein kommt und man dann Probleme bekommt weil dieser Bug eigentlich schwer via Debugger zu finden ist |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Setzt deine Quellcodes hier mal so rein:
Code: [AUSKLAPPEN] ;Hier dein Code... ... Ist übersichtlicher |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
White-air |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok.ich sollte das jetzt eigen. so verbessert haben wie ihr es gesagt habt.
Aber das mit der Variable mit Mousehit(1) klappt net so wirklich bei mir. ![]() Was sollte ich eigentlich statt Until Keyhit(1) benutzen weil der würde ja erst weiter machen wenn ich escape drücke. ![]() Hier mal der Code: Graphics 1024,768 SetBuffer BackBuffer() ;;;;LADEN;;;; ;;Variablen;; MH = MouseHit(1) ;;Bilder;; Narutoanfang = LoadImage("Bilder\narutoanfang.jpg") kleinesQuiz = LoadImage("Buttons\ButtonQuiz.png") Zitate = LoadImage("Buttons\ButtonZitate.png") Naruto1 = LoadImage("Bilder\Naruto2.jpg") Ichbinbereit = LoadImage("Buttons\Ichbinbereit.jpg") Naruto = LoadImage("Bilder\naruto4.bmp") Sprechblase = LoadImage("Bilder\Sprechblase3.bmp") Aussage1 = LoadImage("Buttons\Aussage1.bmp") ;;Schriften;; Schrift1 = LoadFont("Arial",30,1,0,1) Schrift2 = LoadFont("Arial",24,1,0,0) Schrift3 = LoadFont("Arial",18,0,0,0) Schrift4 = LoadFont("Arial",35,1,0,0) Schrift5 = LoadFont("Arial",35,1,0,0) ;;Mask;; MaskImage Naruto,0,255,0 MaskImage Sprechblase,0,0,0 While Not KeyDown(1) ;;;;Startbildschirm;;;; DrawImage Narutoanfang, 0,0 DrawImage kleinesQuiz,490,150 DrawImage Zitate,450,250 Flip ;;;;QUIZ;;;; ;start; maus=CreateImage(1,1) SetBuffer ImageBuffer(maus) Rect 0,0,1,1 SetBuffer BackBuffer() Repeat mx=MouseX() my=MouseY() If MH If ImagesOverlap(maus,mx,my,kleinesQuiz,490,150) Then Delay 500 Cls DrawImage Naruto1,0,0 SetFont Schrift1 Text 400,30,"Naruto-Quiz" Text 235,400,"Das Quiz besteht aus 10 schwierigen Fragen" Text 235,425,"(Sollten schwer sein ![]() SetFont Schrift3 Text 235,500,"Falls du bereit bist klicke auf 'Ich bin bereit'" DrawImage Ichbinbereit,350,600 DrawImage Naruto,660,580 DrawImage Sprechblase,700,500 Color 0,255,0 SetFont Schrift4 Text 810,525,"Viel" Text 795,575,"Glück!" EndIf EndIf Flip Until KeyHit(1) ;;1.Frage;; mx=MouseX() my=MouseY() ;Nach ich bin bereit; Repeat If MH If ImagesOverlap(maus,mx,my,Ichbinbereit,350,600) Then Cls DrawImage Naruto1,0,0 Color 255,255,255 SetFont Schrift1 Text 400,30,"Naruto-Quiz" SetFont Schrift5 Text 200,300,"Welche Aussage würde zu Shikamaru passen?" DrawImage Naruto,700,600 DrawImage Aussage1,700,400 EndIf EndIf Flip Until KeyHit(1) ;Antworten; Repeat If MH If ImagesCollide(maus,mx,my,0,Aussage1,700,400,0) Then DrawImage Sprechblase,750,500 SetFont Schrift4 Color 0,255,0 Text 825,557,"RICHTIG!" EndIf EndIf Flip Until KeyHit(1) ;;;;ENDE;;;; Wend End Was hab ich falsch gemacht? |
||
![]() |
garret |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zur Repeat-Until-Schleife: Er wiederholt die Schleife, bis du die Taste gedrückt hast, nicht wenn du sie drückst. While Not KeyDown(1) ist genau das Gleiche, nur dass die Abfrage am Anfang der Schleife steht, also eine Eingangsbedingung ist.
Umklammere deinen Quellcode mit den [ code]-Tags, dann kann man ihn besser lesen. Edit: Du hast immer noch mehrere Repeat-Schleifen da drin. Füge das Ganze in eine Hauptschleife ein, so wie ich es dir oben beschrieben habe. MfG garret |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich sehe zwar in deinem Code die Abfrage "IF MH", aber wo ist die zuweisung der variablen, ein "MH = MouseHit(1)" finde ich da nirgends, es muss genauso wie "mx = mouseX()" in der Schleife stehen, nur da fand ich beim überfliegen keins | ||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
garret |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bin's noch mal. Du musst die Abfrage MH = MouseHit(1) in die Hauptschleife setzen, da du ja immer wieder prüfen willst, ob eine Taste gedrückt wurde, und nicht nur am Anfang. Du hast diese Abfrage zwar drin, da sie aber nicht in der Schleife steht wird sie nur einmal ausgeführt.
MfG garret |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group