brauche dringend hilfe bei meinem menü
Übersicht

dennis94Betreff: brauche dringend hilfe bei meinem menü |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
;anfangs menu
Graphics 800, 500 While Not KeyHit(28);enter Menu=LoadImage("menu.bmp") SetBuffer BackBuffer() ;Flüssige Bewegung DrawImage menu,1,1;Malt das Bild bei den Koordinaten x,y Flip Wend If KeyDown (31);s EndIf Menu2=LoadImage("menu2.bmp") SetBuffer BackBuffer() ;Flüssige Bewegung DrawImage menu2,1,1;Malt das Bild bei den Koordinaten x,y Flip If KeyHit(14) Then Return To menu ;backspace If KeyDown (19);r EndIf Menu3=LoadImage("menu3.bmp") SetBuffer BackBuffer() ;Flüssige Bewegung DrawImage menu3,1,1;Malt das Bild bei den Koordinaten x,y Flip If KeyHit(14) Then Return To menu ;backspace |
||
mDave |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
warum lädst du bilder in der schleife?
und warum benutzt du keine code-tags? und was ist überhaupt deine frage? |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ersten: Was willst du genau?
Hilfe? Ein Paar kleine Tipps bekommst du auf jedenfall. 1. Du kannst deinen Code in eine CodeBox einrücken. Das sieht erstens viel schöner aus und verschwendet auch nicht soviel Platz. 2. Man merkt, dass du grade erst angefangen hast zu Programmieren. Sry, aber da sind soviele Fehler drin... Du solltest deinen Code immer so aufbauen: Code: [AUSKLAPPEN] Graphics 800,600 SetBuffer Backbuffer() ;Bilder laden Timer=CreateTimer(60) While Not Keydown(1) Cls ;Berechnen ;Anzeigen WaitTimer(Timer) Flip 0 Wend Das ist quasi eine Form, die man eigentlich sogut wie bei jedem Programm benutzt. Du rufst SetBuffer BackBuffer() immer in einer Schleife auf. Das kannst du einmal am Anfang machen, dann reicht es. Ebenso lädst du jeden Schleifendurchlauf das Hintergrundbild neu in den Speicher. Einmal davor reicht ebenfalls. Flip wird eigentlich auch nur einmal pro Schleife benötigt, nachdem alle Bilder gezeichnet wurden. Noch ein Tpp zum Abschluss... Es kommt einem so vor, als ob du nicht viel Ahnung hättest, was die Befehle überhaupt machen bzw, was ihre genaue Funktion ist. Du kannst hier im Portal die Hilfe benutzen, und erstmal, wenn du einen neuen Befehl verwendest die Dokumentation lesen. Da ist meistens ein Beispiel bei, wo auch gezeigt wird, wie man die Sache richtig anwendet. Ansonsten... tutorials lesen! ![]() MFG Tank EDIT: Hier noch der Link zur Hilfe: https://www.blitzforum.de/help/ |
||
dennis94 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sry
meine frage ist wie man ein menu bekommt mit "spielen" , "steuerung "... das wenn man z.b die taste s drückt zu steuerung kommt und wenn man die taste backspace drückt zurück zum menu kommt i hab das hier versucht aba wir ham das nicht soo ausführlich in der schule durchgenimmen deshalb brauch i eure hilfe! ![]() |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jedes Programm besteht aus einem Vorspann. Dort schreibst Du alles rein, was nur 1x gemacht werden muss:
Graphics.. LoadImage Variablen definieren ...dann kommt die Hauptschleife, die meist so aussieht: Code: [AUSKLAPPEN] Repeat Cls Drawimage Hintergrund,0,0 If KeyDown(28) Then End ElseIf KeyDown(31) Then Blabla... ElseIf Keydown(...) Then Blablabla... Endif Flip Forever Bei blabla schreibst Du dann hin ,was in den einzelnen Teilen passieren soll Damit nun der Bildschirm nach einen Tastendruck in dem zuletzt gewählten "Mode" bleibt, kannst Du z.b. eine Variable AktMode% einführen, die dann im Zeichenteil ein dazu passenden Bild anzeigt: SpielBild=LoadImage(... SetupBild=LoadImage(... StartBild=LoadImage(... Code: [AUSKLAPPEN] Repeat Cls Select AktMode% Case 0 Drawimage StartBild,0,0 Case 1 Drawimage SetupBild,0,0 Case 2 Drawimage SpielBild,0,0 If KeyDown(28) Then End ElseIf KeyDown(31) Then AktMode=1 ElseIf Keydown(...) Then AktMode=2 Endif Flip Forever In dem folgenden Beispiel wir dann auch noch eine abgestimmter Spielablauf möglich. spätestens jetzt solltest Du erste Funktionen einfügen. Das ist nichts anderes als "augelagerter Codetext, der eigentlich an die Stelle in der Hauptschleife gehört. Aber so bleibt alles übersichtlich: Code: [AUSKLAPPEN] Repeat Cls Select AktMode% Case 0 Drawimage StartBild,0,0 StartFunktion Case 1 Drawimage SetupBild,0,0 Einstellungen Case 2 Drawimage SpielBild,0,0 Spielen End Select If KeyDown(28) Then End ElseIf KeyDown(31) Then AktMode=1 ElseIf Keydown(...) Then AktMode=2 Endif Flip Forever Function StartFunction() Text 100, 100, "Herzlich willkomen" blabla.... end function Function Einstellungen() Text 100, 100, "Einstellungen" blabla.... Repeat Cls Select EinstellungsMode% Case 1 Gegnerzahl=1000 Case 2 blabla End Select If KeyDown(28) Then EinstellungsMode=99 ElseIf KeyDown(31) Then EinstellungsMode=1 ElseIf Keydown(...) Then EinstellungsMode=2 Endif Flip Until EinstellungsMode=99 end function Function Spielen() If Gegner = WasAuchImmer then blabla else ...... endif End Function |
||
- Zuletzt bearbeitet von Midimaster am Sa, Dez 19, 2009 15:11, insgesamt einmal bearbeitet
![]() |
JamaginBetreff: wg. menu |
![]() Antworten mit Zitat ![]() |
---|---|---|
Am besten man fängt mal nicht mit dem menü an sondern mit dem eigentlichen Kern der Sache. Menü und grafisches Schnickschnack eher erst am Ende. Da sonst für die grafischen Spielerein zuviel Zeit draufgeht und man irgendwann die Lust verliert und das Projekt in der Schublade landet! Schade dann.
Am besten zuerst mal ein Konzept erstellen, was man proggen will und das dann eben Schritt für Schritt umsetzen. Für grafische Objekte kann man ja Platzhalter verwenden. Aber das bleibt jeden selbst überlassen. Und wie die anderen schon sagen, zuerst Tutorials lesen oder kleine Programme anschauen wie diese funktionieren und dann ein eigenes Projekt starten, sodaß man einmal die Befehle kennt. Will nicht kritisieren, aber programmieren besteht nicht aus, wie geht das, mach mir das, sondern sich selbst Gedanken machen und wenn es dann nicht geht, kann man ja Lösungsansätze oder Fragen posten! Bitte sehe das nicht als Müll an was ich schreibe, ich hab auch klein begonnen aber ich hab zu Beginn auch den gleichen Fehler gemacht. Zuerst ein schönes Titelbild erstellt, dann ein Menü und da ich in der Hauptsache (wo das eigentliche Spiel gesteuert wird) steckenblieb, landete mein erstes Projekt im Müll! Schade Also zuerst ein Konzept und dann den Rest... lg. Jamagin ![]() |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
@jamagin
ja, aber dennis94 hat ja eine echt wichtige Frage zum Startkonzept seines Programms. Er sollte schon zu Beginn die anstehenden Arbeiten in sinnvolle Abschnitte unterteilen. Und er sollte gleich weg vom Spaghetti-Code zu einem Konzept "Vorbereitung-Haupschleife" mit Sprüngen in Unterfunktionen. Mal sehen, wie sein nächster Versuch aussieht... |
||
dennis94 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das eigentiche spiel hab i ja schon gemacht^^
i cecks imma noch netwie dat geht?? so funktionierts auch nicht^^ Graphics 800, 500 Menu=LoadImage("menu.bmp") Menu2=LoadImage("menu2.bmp") Menu3=LoadImage("menu3.bmp") Repeat Cls DrawImage menu,1,1; If KeyDown(28) Then End ElseIf KeyDown(31) Then ;s DrawImage menu2,1,1; ElseIf KeyDown(19) Then ;r DrawImage menu3,1,1; EndIf Flip Forever SpielBild=LoadImage("menu.bmp") SetupBild=LoadImage("menu2.bmp") StartBild=LoadImage("menu3.bmp") Repeat Cls Select AktMode% Case 0 DrawImage StartBild,1,1; Case 1 DrawImage SetupBild,1,1; Case 2 DrawImage SpielBild,1,1; If KeyDown(28) Then End ElseIf KeyDown(31) Then AktMode=1 ElseIf KeyDown(19) Then AktMode=2 EndIf Flip ;Forever |
||
![]() |
JamaginBetreff: wg. Menü |
![]() Antworten mit Zitat ![]() |
---|---|---|
@midimann
huch! Dann hab ich diese wichtige Frage ganz einfach übersehen! Klar Einteilung ist alles. Sorry, hab es nur gut gemeint. Hab wieder mal zu weit gedacht!! Du hast schon recht - Der Aufbau ist ungemein wichtig, dennoch würde ich ein Menü eher zum Ende hin machen, weil ich nicht ständig die Lust habe, wenn ich das Programm starte, immer auswählen mag... Aber wie gesagt, das bleibt jeden selbst überlassen und wenn dennis94 schon etwas weiter ist mit dem Programmieren, dann wird er auch auf Include... setzen. Damit alles schön sauber bleibt. So mach ich das halt! Variablen, Bilderladen, Sounddateien, etc. alles in externen Dateien, somit hab ich die volle Übersicht und mein Code bleibt sauber...! Aber mein Grundsatz war ja das Konzept!! lg. Jamagin ![]() |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
JamaginBetreff: wg. menu |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Graphics 800, 600, 0, 2 setbuffer backbuffer() ; <--------------- WICHTIG Menu=LoadImage("menu.bmp") Menu2=LoadImage("menu2.bmp") Menu3=LoadImage("menu3.bmp") Repeat Cls DrawImage menu,1,1; If KeyDown(28) ; <---- das THEN kannst dir sparen End ElseIf KeyDown(31) ;s DrawImage menu2,1,1; ElseIf KeyDown(19) ;r DrawImage menu3,1,1 ; EndIf Flip Forever SpielBild=LoadImage("menu.bmp") ; <--- warum nochmals laden? SetupBild=LoadImage("menu2.bmp") ; <---- ?? StartBild=LoadImage("menu3.bmp") ; <---- ?? ha, wieso ladest die bilder 2x?? lg. Jamagin ![]() |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Alles unter Forever muss weg!!! Da kommt das Programm sowieso nie hin. Unterhalb von Forever stehen normalerweise nur noch Funktionen.
Mein Beispiel 2 sollte hier helfen: Die Unterscheidung erfolgen immer innerhalb der Repeat-Schleife. Dort gehört der Code zu jeden Menü hin, oder der Aufruf einer Funktion in der dieser Code steht. |
||
dennis94 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke funktioniert super
aber wie kombiniert man das mit einem anderen programm? Eigentlich sollte doch das programm starten wenn man enter(28) drückt? wie kombiniert man die 2 programme? |
||
![]() |
JamaginBetreff: wg. menü |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn du key(28) drückst, steht da end und nicht exit!!
lg. Jamagin ![]() |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein anderes Programm starten kann man mit
Code: [AUSKLAPPEN] ExecFile "Programm.exe startparameter"
Ich glaube aber kaum, dass das im Sinne deines Vorhabens ist. Das Spiel und das Menü sind beide in einem Programm. Oder habe deine Frage falsch vertstanden? Wie auch immer, ich geb dir nochmal einen Grundgerüst, das mit Kommentaren erklärt ist. Code: [AUSKLAPPEN] Graphics 800, 500, 16, 2 timer=CreateTimer(40) ; Ein Timer erstellen. Nötig damit das Programm nicht die komplette CPU-Auslastung verbraucht, um so schnell wie möglich zu laufen. ; Mehr als 40 Bilder pro sekunde sind nicht nötig, da man sowieso keinen Unterschied festsellen wird Global AktMode=0 ;Modus auf "Anfangsmenü" setzen SetBuffer BackBuffer() ; Backbuffer setzen. Alles was ab hier gezeichnet wird, wird nicht direkt angezeigt, sondern ist erst unsichtbar ; Bilder laden SpielBild=LoadImage("menu.bmp") SetupBild=LoadImage("menu2.bmp") StartBild=LoadImage("menu3.bmp") Repeat AppTitle AktMode Select AktMode Case 0 ; Anfangsmenü AnfangsMenuFunktion() If KeyHit(1) Then Exit ;Schleife wird beendet, sobald man im Anfangsmenü Escape drückt Case 1 ; Einstellungen EinstellungenFunktion() Case 2 ; Spiel Spiel() End Select Flip 0 ; Inhalt des Backbuffers auf den Bildschirm tun Cls ; Inhalt des BackBuffers löschen WaitTimer timer ;Solange warten, bis eine 40tel sekunde seit dem letzen Aufruf vergangen sind Forever End Function AnfangsMenuFunktion() ; Mit R wird das Spiel gestartet, mit S kommt man zu den Einstellungen If KeyHit(19) Then ;Taste R AktMode=2 ; Modus auf "Spiel" setzen ElseIf KeyHit(31) Then ;Taste S AktMode=1 ; Modus auf "Einstellungen setzen" EndIf DrawImage StartBild, 0, 0 ;Menu zeichnen ; 0,0 sind die Anfangskoordinaten in BB End Function Function EinstellungenFunktion() ; Mit Escape gehts zurück in das Anfangsmenü If KeyHit(1) Then ;Taste Esc AktMode=0 ; Modus auf "Anfangsmenü" setzen EndIf DrawImage SetupBild, 0, 0 ;Menu zeichnen End Function Function Spiel() ; Mit Escape gehts zurück in das Anfangsmenü If KeyHit(1) Then ;Taste Esc AktMode=0 ; Modus auf "Anfangsmenü" setzen EndIf ;Hier kann die Steuerung der Spielfigur hin ;Hier können Gegner Bewegt werden DrawImage SpielBild ; Hintergrundbild zeichnen ;Hier können Dinge gezeichnet werden, die vor dem Hintergrundbild erscheinen sollen End Function Das sollte dir mit deinen Problemen weiterhelfen MfG PS: Wie bereits erwähnt, solltest du hier im Forum die Codetags benutzen wenn du Code postest. Das macht den Thread übersichtlicher. Die gehen so: [*code] Hier steht der Quelltext [*/code] Wäre cool wenn du das in deinen vorherigen Beiträgen noch editierst. Danke. |
||
1 ist ungefähr 3 |
![]() |
JamaginBetreff: wg. menu |
![]() Antworten mit Zitat ![]() |
---|---|---|
@das wurgel
CreateTimer(60) wenn schon, denn die FPS bei den Monitoren sind standard auf 60 eingestellt bzw. 70-72. Die älteren Modelle hatten auch noch höhere Frequenzen aber mit 60 Frames/Sek fährt man gut!! lg. Jamagin ![]() NB: Noch was, wenn man mit CreateTimer(40) oder eben auf 60 hat Flip 0 keinen Unterschied zu Flip, da ja die FPS mit Variable = CreateTimer(Wert) und Waittimer(Variable) gedrosselt wird. |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für ein Menü reicht es aber durchaus, wenn es nur mit 20~40 Fps läuft. Es sei denn es sind irgendwelche Bewegungsspilereien oder HintergrundSzenen im Menü.. | ||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Leute.....
dennis94 weiss noch nicht so recht, wie sein Programm in einer Dauerschleife laufen könnte, da kommt Ihr ihm mit Timern und CPU-Auslastung und FPS.... Das ist ihm doch bei seinem ersten Programm total schnuppe und verwirrt hier nur! Der hat Repeat/Until noch nicht richtig verdaut! @dennis94 Deine anderen Programmteile werden zu Funktionen der ersten Hauptschleife. Alles das, was bei Deinem anderen Programm an "Vorarbeit" zu leisten ist, schreibst Du jetzt vor die Repeat-Schleife. Alles was, z.B. während des eigentlichen Spiels passiert gehört in eine... Code: [AUSKLAPPEN] Function Spielen()
blablabla End Function Alles was zum "Menü" gehört, gehört in eine Code: [AUSKLAPPEN] Function Menue()
blablabla End Function Das was Du als Menü bezeichnest, ist also im Grunde nichts anderes als ein "anderes Spiel". Das wie das "Spielen()" von der Hauptschleife Repeat/Until im Bedarfsfall gerufen wird. Diese Funktionen dürfen im Prinzip wieder einen Vorab-Teil und eine "Repeat/Until" enthalten, aus der Du dann mit z.B. ESC zum Hauptschleife zurückkehrst, oder eventuell gleich in die "Menue()" rüberwechselst: Code: [AUSKLAPPEN] Function Spielen()
vorweg-blablabla Repeat laufen() schiessn() schlagen() Bildaufbau If Keydown( blabla) Spieler nachrechts else ...... Until KeyDown(1) nachher blabla AktMode=1 ; sofort ins menü, wenn zurück in die hauptschleife End Function |
||
![]() |
das wurgel |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Midimaster
Das mit dem Timer habe ich ja auch nur reingebaut, weil ich nicht ruhig schlafen kann, wenn ich weis, dass irgendwo weit weg ein Rechner sehr leiden muss... nur wegen meinem beispielcode ![]() |
||
1 ist ungefähr 3 |
dennis94 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
viielen dank | ||
![]() |
JamaginBetreff: wg. menu |
![]() Antworten mit Zitat ![]() |
---|---|---|
@das wurgel
ha ha, eine gute Ausrede... ein armer leidender PC! *ich keks mi ab...* außerdem hab ich dennis94 eine pm (privatnachricht) geschickt, aber anscheinend will er das nicht! Ist ja auch egal... Wie midimaster schon erwähnte, jep das is es...! lg. Jamagin ![]() NB: lasst eam doch probieren |
||
Bevor du etwas neues beginnst, erledige das alte |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group