Menue Problem
Übersicht BlitzBasic Beginners-CornerGehe zu Seite Zurück 1, 2, 3 Weiter
XeresModerator |
Mo, Apr 23, 2018 22:37 Antworten mit Zitat |
|
---|---|---|
Deine Includes kommen mir etwas willkürlich vor.
WaveView.bb inkludiert Calculations.bb, Menue.bb und nochmal Calculations.bb Funktionen werden definiert, aber nichts aufgerufen Calculations.bb Definiert nur, ist kurz - super! Menue.bb Definiert mehrere Types, Lädt Fonts, erstellt einen Mauspointer... Das sollte alles in die Hauptdatei Sinus Effekte.bb inkludiert Menue.bb und WaveView.bb (und durch WaveView dann nochmal Menue.bb und Calculations.bb) Hier wird läuft dann tatsächlich die Hauptschleife. Das ist schwer zu durchsehen, weil es total verwirrend aufgebaut ist. Die Hauptdatei sollte deutlich als solche zu erkennen sein. Die Includes sollten in einem Unterordner sein und Funktionen systematisch sortiert enthalten. Alles Laden, generieren usw. gehört da eher nicht rein. Aufrufe: Sinus Effekte.bb CreateMainMenue() - in der selben Datei >SetButton() - in Menue.bb >ButtonNum = ButtonNum + 1 - wird weiter oben mit 0 initalisiert >dButton (ButtonNum) = New tCommandButton Also ist dButton(Menu) mit Menu = 0 niemals befüllt. Simpel zu sehen, wenn man dem Code logisch folgt. Da die Variablen und Funktionen weit verstreut sind, geht das nicht auf einen Blick. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Midimaster |
Di, Apr 24, 2018 9:38 Antworten mit Zitat |
|
---|---|---|
Hallo Flush,
wenn Du möchtest, werde ich dich ein wenig an die Hand nehmen und Dir Fehler-Findungsstrategien zeigen. Dein Code ist schon sehr umfangreich, aber kein bißchen für das Eintreten von Fehlern vorbereitet. So tappst Du im Dunklen. Es gibt den Befehl DEBUGLOG, den Du während der gesamten Entwicklung nutzen solltest. Hiermit kannst Du am Debugger anzeigen lassen, wo sich Dein Programm befindet und was es gerade tut. Ich habe deinem Code einen einzigen DEBUGLOG hinzugefügt und sehe schon das Problem: BlitzBasic: [AUSKLAPPEN] Function MouseOver() Die Variable MENU sollte wahrscheinlich immer Werte zwischen 1 und 16 enthalten. Macht sie aber nicht. Ganz oft ist sie 0 und klickst Du nun ins Leere (Schwarze), wird tatsächlich dButton(0) verwendet. Den gibt es aber nicht! Eigentlich gehört ins Hauptprogramm eine Sicherheitsabfrage, dass MENU wirklich einen Wert enthält: BlitzBasic: [AUSKLAPPEN] Menu = 0 Seltsamerweise löst dies nur die Probleme mit Klicks auf die schwarzen Flächen. Klickt man nun auf den richtigen Button zu weit rechts kommt trotzdem eine Fehlermeldung. Also gibt es einen zweiten Fehler. Der tritt in der Funktion MainWave() auf. Hierzu füge ich nun einen neuen DEBUGLOG in die Hauptschleife ein und gleichzeitig entwirre ich deine 2 Befehle auf einer Zeile. Jeder Befehl bekommt immer eine Zeile (aus Fehlerfindungsgründen). Vergiß den Quatsch mit dem Doppelpunkt (für immmer!) BlitzBasic: [AUSKLAPPEN] ... If MouseHit(1) Then Startest Du nun das Programm, zeigt sich das der Debuglog "MENU=" korrekt auf 1 geht, dann das DEBUGLOG "hier " korrekt gerufen wird und nun im MainWave() der Wert Menu wieder auf 0 springen kann. Also wird irgendwo MouseOver() illegal ein zweites Mal gerufen? Mal sehen... Weil Du am Anfang von MainWave() auf die WaveMenu-Buttons umschaltest wird bereits jetzt ein erstes Mal das neue Menü gecheckt und der Mausklick ins erste Menü führt im zweiten Menü bereits wieder zu einem Klick ins Leere. Also muss auch dort eine Sicherheitsabfrage rein: BlitzBasic: [AUSKLAPPEN] Function MainWave() |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Midimaster |
Di, Apr 24, 2018 13:45 Antworten mit Zitat |
|
---|---|---|
noch was grundsätzlichen zu deinem Programm-Flow:
Verändere Deinen code so, dass das FLIP in der (einzigen) Hauptschleife steht. In der Hauptschleife wird entschieden, verzweigt und gemalt. Und zwar für alle Screens und Levels Deines Programms. Nun wirst Du fragen: "Wie komme ich dann in verschiedene Screens?". Das geschieht mit einer Variablen Screen=0 bis Screen=16. Die Abfrage der Maus erfolgt einmalig zentral. Danach verzweigt die Hauptschleife in die Screens. Nur bei einem Wechsel des Screens wird auch das Menu und die Buttons neu erstellt. Dafür sorgt die Variable ScreenDone Das Menü wird ebenfalls einmal zentral gemalt. Beispiel symbolisch: BlitzBasic: [AUSKLAPPEN] Graphics 1280, 720l |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Flush |
Di, Apr 24, 2018 14:31 Antworten mit Zitat |
|
---|---|---|
Hallo zusammen,
vielen Dank für die unglaubliche Hilfe . @Xeres Includes habe ich bereinigt und in einen eigenen Ordner (Includes) verpackt. Auch das Bild hat jetzt seinen eigenen Ordner (Media). @Midimaster Und ob Du mich an die Hand nehmen kannst und mir Fehler-Findungsstrategien zeigen kannst Ich bin noch bei den Änderungen die Du in Deiner 1. Mail geschrieben hast. Das Hauptmenue funktioniert tadellos . Es wird mir mit den DEBUGLOGS allerdings nur "MENU" in MouseOver() angezeigt zu "hier Menu" in der Hauptschleife kommt es gar nicht. Die Buttons im WaveMenu funktionieren super, klicke ich ins schwarze dann kommt wieder eine MAV! Ich hab den gesäuberten Code nochmal hochgeladen: https://www.blitzforum.de/upload/file.php?id=13350 Ich habe einen DEBUGLOG in WaveView eingefügt: BlitzBasic: [AUSKLAPPEN]
Die Variable Menu ist richtig gefüllt und trotz der Sicherheitsabfrage wird eine "MAV" geworfen bzw eine "Object does not exist" in der Hauptschleife: BlitzBasic: [AUSKLAPPEN]
Vielen Dank für Eure Hilfe und Mühe, Flush |
||
Flush |
Di, Apr 24, 2018 15:29 Antworten mit Zitat |
|
---|---|---|
Um die Verwirrung zu vollenden :
Wenn ich im WaveMenue zuerst auf einen Button klicke dann kann ich auch einmal ins Schwarze klicken. Wieder auf einen Button, wieder ins schwarze use.. Aber wenn ich 2X ins Schwarze klicke oder 1X ohne vorher auf einen Button dann knallts! @MidiMaster Deine 1. Mail klang so als würde Sie beide Probleme (HauptMenu, WaveMenu) beheben und die 2. eine gründliche Optimierung. Ist das so. Ich habe, da das Programm noch nicht anstandslos läuft noch nichts gemacht was in der 2. Mail steht! Viele Grüße und Danke für Eure Mühe, Flush |
||
Midimaster |
Di, Apr 24, 2018 15:58 Antworten mit Zitat |
|
---|---|---|
Du machst es genau richtig. Zuerst das Problem beheben. Dann Mail 2 ansehen.
Bei mir läuft der Code einwandfrei.... Die DEBUGLOGs allein bringen nix. Sie dienen nur der Fehlerfindung. Wenn ein Fehler aufgetrten ist, geht das DEBUGLOG Fenster auf und zeigt die Fehlerstelle. Dort ist aber auch ein zweiter TAB, der die geloggten Werte für menu anzeigt. Die Abfrage "menu>0" muss 2x rein in deinen Code. Einmal schon in der MouseOver()-Funktion. Grundsätzliches zur Verwendung von DEBUGLOG Du startest Dein Programm und provozierst den FEhler bis es anhält. Jetzt schreibst Du in die Zeile vor der fehlerhaften Zeile einen DEBUGLOG mit einer eindeutigen Bezeichnung und der Variablen die wahrscheinlich verantwortlich ist z.b. BlitzBasic: [AUSKLAPPEN] DebugLog "Fehlerstelle A=" + menu Nun startest Du den Code erneut und provozierst den gleichen Fehler. Im Debugger sollte nun im 1.TAB deine Meldung und der Wert von menu stehen. Wenn ja, prüfst Du den Wert von menu. Ist er 0, dann musst Du jetzt nur noch herausfinden, wie er wieder zu 0 werden konnte. Also rückwärts im Programmcode immer weitere DEBUGLOGs einfügen z.b. BlitzBasic: [AUSKLAPPEN] DebugLog "Vorher A=" + menu |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Flush |
Di, Apr 24, 2018 16:26 Antworten mit Zitat |
|
---|---|---|
Hmmm,
ich hab die Abfrage "menu>0" dann 3X im Code. 1. in der Hauptschleife, 2. in WaveView und in MouseOver()????? Ich habe MouseOver so abgeändert: BlitzBasic: [AUSKLAPPEN]
Aber jetzt schließt sich das Fenster wenn ich im Hauptmenu ins Schwarze klicke. Im Wave Menu kann ich überall hinklicken und die Periode wird ständig erhöht. Außer wenn ich auf den Button x-Wave klicke dann nimmt die Welle wie gewünscht die Standardeinstellungen an. Ist an der Buttonabfrage mit MouseDown(1) und MouseHit(1) auch was falsch? Wenn Du einen 100%-tig funktionierenden Code hast könntest Du den vielleicht ins Archiv laden, sonst schaff ich's glaub ich nie Viele Grüße und vielen Dank, Flush |
||
Midimaster |
Di, Apr 24, 2018 16:29 Antworten mit Zitat |
|
---|---|---|
ich kann leider erst wieder nach 21:00 antworten. melde mich dann wieder.... | ||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Flush |
Di, Apr 24, 2018 16:39 Antworten mit Zitat |
|
---|---|---|
Werde da sein !
Viele Grüße, Flush |
||
Flush |
Di, Apr 24, 2018 19:21 Antworten mit Zitat |
|
---|---|---|
Es klappt
BlitzBasic: [AUSKLAPPEN]
Viele Grüße und vielen Dank für Eure Hilfe und Mühe, Flush |
||
Midimaster |
Di, Apr 24, 2018 21:29 Antworten mit Zitat |
|
---|---|---|
Je länger Dein Code ist, desto mehr Fehler kann er enthalten. So sollte man darauf achten, dass ähnliche Arbeitsschritte nicht mehrmals im Code stehen, sondern nur einmal in einer Funktion, die dann mehrfach aufgerufen wird.
Wäre dort ein Fehler, würde durch eine Ausbesserung danach das Programm dann an vielen Stellen stabiler laufen. Ich rate Dir dringend nun meine zweite E-Mail durchzuarbeiten. Die dort genannten Änderungen lassen sich jetzt noch leicht verwirklichen und es wird dir bei Deinem Projekt noch viel zukünftigen Ärger ersparen. Etwa das mehrfache Verwenden von MouseHit() bzw.MouseDown() ist so eine Fehlerquelle. Besser sollte die Maus einmal zentral erfragt werden, der Zustand in MausHit%, MausX% und MausY% gespeichert werden und dann nur noch diese Variablen im Code abgefragt werden. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Flush |
Mi, Apr 25, 2018 13:47 Antworten mit Zitat |
|
---|---|---|
@MidiMaster
Ich werd auf jeden Fall Deine 2.Mail durcharbeiten und optimierern was geht!. Ich melde mich auf jeden Fall!!!!. Wahrscheinlich habe ich am WE wider Zeit Viele Grüße und vielen Dank für Eure Hilfe und Mühe, Flush |
||
Flush |
Do, Apr 26, 2018 12:56 Antworten mit Zitat |
|
---|---|---|
Hallo MidiMaster,
ich hab Deie 2.Mail durchgearbeitet, alles aufgeräumt und Deine Codes angewendet (klar daß der Code symbolisch ist). Du hast mit allem Recht! Allerdings hat nach dem durcharbeiten überhauptnichts mehr funktioniert Einiges konnte ich korrigieren d.h. man sieht jetzt wieder etwas allerdings ist das auch alles. Ich hab mit B3D noch zu wenig Erfahrung um das alles so umzusetzen daß alles wieder funktioniert Ich hab die Dateien hochgeladen: https://www.blitzforum.de/upload/file.php?id=13351 Vielen Dank für Deine Mühe und Viele Grüße, Flusher |
||
Midimaster |
Do, Apr 26, 2018 13:27 Antworten mit Zitat |
|
---|---|---|
Ein klassischer Tippfehler bei einer Variablen....
mal steht im Code... ObjektIndex mit K ...manchmal aber auch... ObjectIndex mit C Nach dem Ausbessern läuft wenigsten schno mal wieder das MausOver() Ebenso muss Du zunächst die Zeile DrawResults in der Hauptschleife "ausschalten", bis das Menü wieder läuft: BlitzBasic: [AUSKLAPPEN] Repeat |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
- Zuletzt bearbeitet von Midimaster am Do, Apr 26, 2018 13:39, insgesamt einmal bearbeitet
Flush |
Do, Apr 26, 2018 13:36 Antworten mit Zitat |
|
---|---|---|
Hi MidiMaster,
Objek(c)tindex hab ich verbessert auch andere Rechtschreibfehler sind verbessert. Ich habe die Funktionen in den richtigen Dateien da ich keine Fehlermeldung bekomme! Es ändert sich nichts. Man bekommt das Hauptmenue zu sehen und das Image, bei klick irgendwokin ändertz sich die Periode! Bei mir werden die Buttons nicht neu gezeichnet wenn der Mouse Zeiger drüberfährt ! DrawResults ist deaktivert, die Buttons werden auch neu gezeichnet. Egal wohin ich klicke, es wird alles gelöscht. Hmmm, mal sehen was da noch so ist....! Viele Grüße und vielen Dank für Eure Hilfe und Mühe, Flush |
||
Midimaster |
Do, Apr 26, 2018 13:45 Antworten mit Zitat |
|
---|---|---|
Möglicherweise hast Du doch noch irgendwo eine OjectIndex mit C. Benutze die Suchfunktion, suche nach "object"
Zusätzlich musst Du zunächst die Zeile DrawResults in der Hauptschleife "ausschalten", bis das Menü wieder einwandfrei läuft: BlitzBasic: [AUSKLAPPEN] Repeat Außerdem muss der Menü-Button-Zähler beim Wechsel der Menüs immer auf 0 gestellt werden. Bei Dir 2x nötig. z.b. hier: BlitzBasic: [AUSKLAPPEN]
und hier: BlitzBasic: [AUSKLAPPEN]
|
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Flush |
Do, Apr 26, 2018 13:54 Antworten mit Zitat |
|
---|---|---|
ButtonNum = 0 ist eingefügt. Ich habe CreateMainMenue() und CreateWaveMenue() wieder in die Datei Sinus Effekte.bb eingefügt nicht mehr in Menue.bb.
Noch keine Änderung! Viele Grüße und vielen Dank für Eure Hilfe und Mühe, Flush |
||
Midimaster |
Do, Apr 26, 2018 14:12 Antworten mit Zitat |
|
---|---|---|
noch was ist mir aufgefallen:
Das WAV-Menü benötigt jetzt einen RETURN-Button, um wieder in das Hauptmenü zurückzukommen: BlitzBasic: [AUSKLAPPEN]
Abschließend noch die Geschichte mit der Image-Manipulation. Hier steht bei Dir noch immer eine Repeat/Until Schleife. Die muss jetzt natürlich raus, weil wir ja nur noch eine Hauptschleife erlauben wollen. Auch das MouseOver ist inzwischen unnötig: BlitzBasic: [AUSKLAPPEN]
So jetzt noch die Hauptschleife anpassen. Das Image-Fenster darf natürlich nur bei den Screens 1-16 erscheinen. Bei Screen 0 willst Du ja nur das Menü sehen: BlitzBasic: [AUSKLAPPEN] Repeat Kleiner Nachtrag. Fehler in der Funktion Quit(). Da Du die Variable Font nicht GLOBAL gesetzt hast, löst der FreeFont in der Funktion Quit() eine Fehlermeldung aus: BlitzBasic: [AUSKLAPPEN] Function Quit() Noch ein kleiner Nachtrag. Dein Graphics-Befehl muss bei mir so aussehen: BlitzBasic: [AUSKLAPPEN] Graphics 1280, 720, 2 Damit läuft es bei mir perfekt. Sende einfach nochmal das ganze ZIP, wenn es bei Dir nicht besser wird. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Flush |
Do, Apr 26, 2018 14:33 Antworten mit Zitat |
|
---|---|---|
Es läuft tatsächlich nicht !
Hier der neue Upload: https://www.blitzforum.de/upload/file.php?id=13352 Wenn gar nichts geht, könntest Du vielleicht den funktierenden Source uploaden? Viele Grüße und vielen Dank für Deine Mühe und Hilfe, Flusher |
||
Midimaster |
Do, Apr 26, 2018 15:05 Antworten mit Zitat |
|
---|---|---|
folgende Fehler gefunden:
1. ENDE in der Hauptschleife muss das UNTIL anders gelöst werden, z.b. so: BlitzBasic: [AUSKLAPPEN] ... sonst führt jeder Klick aufs schwarze immer zum Abbruch des Programms. Ende soll aber nur bei Ende erfolgen. 2. DrawResults in der Hauptschleife muss das DrawResult eingeschaltet werden und darf aber nur bei Screens>0 kommen, z.b. so: BlitzBasic: [AUSKLAPPEN] ... 3. RETURN du hast zwar einen Return-Knopf eingeführt, aber keine Aktion dafür festgelegt. So geht es: BlitzBasic: [AUSKLAPPEN] Function WaveMenue() Noch ein Fehler ist mir aufgefallen. Ein MouseHit sollte in jeder Runde abgeholt und verarbeitet werden. Dafür benötigen wir hier eine Änderung in der Hauptschleife: BlitzBasic: [AUSKLAPPEN] Cls Etwas kompliziert: der Select-Bereich wird nur noch erreicht, wenn entweder ein MausHit entdeckt wurde und gleichzeitig ein Menü zugeordet werden konnte, oder wenn ein gesamtes Button-Menü neu erstellt werden muss. Also bei mir läuft es mit diesen Änderungen perfekt. hier nochmal die ganze Sinus.bb. Ich habe diesmal nur in dieser Datei etwas geändert: BlitzBasic: [AUSKLAPPEN] Graphics 1280, 720, 24, 2 Noch eine Bitte: Nimm bitte die schrecklich langen "----------" Trennstriche aus dem Code! Die führen hier im Forum zur absoluten Unlesbarkeit des Codes. Die Scrollbalken verschwinden rechts aus dem Bildschirm. Man kann den code nicht mehr scrollen. 80 Zeichen lange Trennstriche sind lang genug!!! |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Gehe zu Seite Zurück 1, 2, 3 Weiter
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group