Name ändern duch Eingabeaufforderung
Übersicht

![]() |
MrJoneyBetreff: Name ändern duch Eingabeaufforderung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Guten tag ich habe mal ne frage weil ich einfach es nicht hin kriege eine namen change möglichkeit einzubauen
ich habe ein spiel geschreiben das aus einer datei beim start den namen ausliest die habe ich config.cfg genannt das klappt auch ich habe jetzt ein menü geschreiben mit dem mann in dem einstellungen den namen changen soll wie ein eingabeauforderung nur das mann zuerst mit der maus drauf klicken soll und den namen dann in der datei speichert nur ich kreige es ihrged wie nicht hin könnt ihr mir helfen zu verdeutlichung habe ich ein bild eingefügt http://62.141.56.46/BB/123.jpg vielen dank im voraus mfg MrJoney |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ehm.. interessantes Bild ![]() Ich würd mit den Write-Befehlen einfach den Namen in der Datei überschreiben |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
MrJoney |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja das ist mir schon klar ich offne mit openfile die config.cfg datei
dann soll in einem rechteck der name stehen der in der cfg datei steht darauf sollst du mit der maus draufdrüccken können und den namen selecktiren mit der tastartur den neuen namen eingeben und dann mit enter bestätigen sobal du dann auf Übernemmen klickst soll der name in die cfg datei mit writefile geschreiben werden und mit closefile beendt werden soweit ist mir das schon klar nur wie schreib mann sowas ? |
||
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: ja das ist mir schon klar ich offne mit openfile die config.cfg datei
Dann würdest du aber einen logischen Fehler in deinem Programm haben, wenn du z.B. den Namen von ABCD auf DEF änderst, weil dann in der Datei DEFD steht (zumindest bei einigen Write-Befehlen). Demnach solltest du vor der Anwendung der Write-Befehle die Datei löschen. Wenn du noch andere Informationen in deiner Konfigurationsdatei hast, dann bleibt dir nichts anderes übrig, als alle Informationen erneut in die Datei zu schreiben. Zitat: schon klar nur wie schreib mann sowas ?
Eine Input-Routine? Gibt es massenweise im Codearchiv. Oder meinst du etwa den Ablauf des Programms, dass es z.B. bei "Übernehmen" sichern soll? Wenn ja, dann musst du einfach nur beim Klick auf Übernehmen (RectsOverlap + MouseDown/MouseHit) die o.g. Schreibvorgänge ausführen. PS: Das Bild ist sinnlos. Du könntest zumindest etwas Code zeigen. |
||
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik |
![]() |
MrJoney |
![]() Antworten mit Zitat ![]() |
---|---|---|
so ich habe es jetzt soweit hinbekommen
Code: [AUSKLAPPEN] Function Einstellungen() text1$="Unnamed" Repeat Cls cfg = OpenFile("cfg\Config.cfg") TileImage HG,1,1 Mausx = MouseX() Mausy = MouseY() DrawImage zuruck,10,595 DrawImage Einstellungen,10,345 DrawImage Sound,10,395 DrawImage Grafik,10,445 DrawImage OM ,324,1 DrawImage OK ,375,710 DrawImage Abbruch ,575,710 DrawImage Apply ,775,710 If ImagesCollide(Zuruck,10,595,0,Mauspfeil,Mausx,Mausy,0) Then DrawImage Zuruck1,10,595 EndIf If ImagesCollide(Einstellungen,10,345,0,Mauspfeil,Mausx,Mausy,0) Then DrawImage Einstellungen1,10,345 EndIf If ImagesCollide(Sound,10,395,0,Mauspfeil,Mausx,Mausy,0) Then DrawImage Sound1,10,395 EndIf If ImagesCollide(Grafik,10,445,0,Mauspfeil,Mausx,Mausy,0) Then DrawImage Grafik1,10,445 EndIf MH = 0 If MouseHit(1) Then MH = 1 If MouseHit (2) If ImagesCollide(Zuruck,10,595,0,Mauspfeil,Mausx,Mausy,0) Then Menü() ElseIf ImagesCollide(Einstellungen,10,345,0,Mauspfeil,Mausx,Mausy,0) Then Einstellungen() ElseIf ImagesCollide(Sound,10,395,0,Mauspfeil,Mausx,Mausy,0) Then Sound() ElseIf ImagesCollide(Grafik,10,445,0,Mauspfeil,Mausx,Mausy,0) Then Grafik() ElseIf ImagesCollide(Abbruch,575,710,0,Mauspfeil,Mausx,Mausy,0) Then Optionen() ElseIf ImagesCollide(OK,375,710,0,Mauspfeil,Mausx,Mausy,0) Then Optionen() EndIf EndIf text1$ = Input$(100,20,text1$,1) DrawImage Mauspfeil,Mausx,Mausy Text 15, 350, "Einstellungen" Text 15, 400, "Sound" Text 15, 450, "Grafik" Text 15, 600, "Zurück" Text 430,715, "OK" Text 615,715, "Abbruch" Text 790,715, "Übernemmen" Text 340,15, "Einstellungen:" Text 340,60, "bitte hier deinen Spielnamen eingeben:" ;Rect 340,80,200,30,0 ;cfg = ReadFile("cfg\Config.cfg") ;Text 345,90, ReadLine (cfg) Flip Forever End Function Function Input$(x,y,txt$,id) Rect x-1,y-1,StringWidth(txt$)+15,StringHeight(txt)+2,0 If MH If RectsOverlap(x,y,StringWidth(txt)+16,StringHeight(txt),MouseX(),MouseY(),1,1) And gui_erra = 0 gui_selinp = id ElseIf gui_selinp = id gui_selinp = -1 EndIf EndIf If id=gui_selinp Then key=GetKey() If key>31 Then txt$=txt$+Chr(key) If KeyHit(82) Then txt$=txt$+"0" If KeyHit(79) Then txt$=txt$+"1" If KeyHit(80) Then txt$=txt$+"2" If KeyHit(81) Then txt$=txt$+"3" If KeyHit(75) Then txt$=txt$+"4" If KeyHit(76) Then txt$=txt$+"5" If KeyHit(77) Then txt$=txt$+"6" If KeyHit(71) Then txt$=txt$+"7" If KeyHit(72) Then txt$=txt$+"8" If KeyHit(73) Then txt$=txt$+"9" If KeyHit(181) Then txt$=Left(txt$,Len(txt$)-1):txt$=txt$+"/" If KeyHit(83) Then txt$=txt$+"," If KeyHit(14) And Len(txt$)>0 Then txt$=Left(txt$,Len(txt$)-1) Rect x+StringWidth(txt$)+4,y+11,5,1 EndIf Text x+3,y,txt$ Return txt$ End Function nur wie bkomme ich das hin das mann das nur mit der linken maustaste macht weil wenn ich bei functionen auf die linke mache functionirt die ein nicht |
||
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich glaube, du solltest dir erstmal einige BB-Tutorials anschauen, denn du machst grundlegende Sachen falsch. Ich könnte jetzt jede Einzelheit aufzählen, aber das würde zu lange dauern, deshalb solltest du dir die Robsite und andere Tutorials anschauen.
Um nur einige Dinge zu nennen: Code: [AUSKLAPPEN] Repeat
Cls cfg = OpenFile("cfg\Config.cfg") TileImage HG,1,1 Die config-Datei sollte nicht jedesmal geöffnet werden, sondern nur dann, wenn es nötig ist. Außerdem fängt das Koordinatensystem bei 0, 0 an. Da du TileImage benutzt, kannst du möglicherweise Cls weglassen, außer du benutzt eine Maske. Wenn nicht, kannst du auch TileBlock nehmen. Code: [AUSKLAPPEN] Flip
Forever Versuche, die CPU-Auslastung mit Delay oder WaitTimer gering zu halten. Code: [AUSKLAPPEN] DrawImage zuruck,10,595
DrawImage Einstellungen,10,345 DrawImage Sound,10,395 DrawImage Grafik,10,445 DrawImage OM ,324,1 DrawImage OK ,375,710 DrawImage Abbruch ,575,710 DrawImage Apply ,775,710 Das ist sehr umständlich und schlecht wartbar. Verwende Types, dazu gibt es mehrere Tutorials in diesem Forum. Code: [AUSKLAPPEN] If ImagesCollide(Zuruck,10,595,0,Mauspfeil,Mausx,Mausy,0) Then DrawImage Zuruck1,10,595 EndIf If ImagesCollide(Einstellungen,10,345,0,Mauspfeil,Mausx,Mausy,0) Then DrawImage Einstellungen1,10,345 EndIf If ImagesCollide(Sound,10,395,0,Mauspfeil,Mausx,Mausy,0) Then DrawImage Sound1,10,395 EndIf If ImagesCollide(Grafik,10,445,0,Mauspfeil,Mausx,Mausy,0) Then DrawImage Grafik1,10,445 EndIf Hier solltest du ebenfalls Types verwenden. Du kannst mit einer einzigen For-Schleife alle Menüpunkte anzeigen und auf Kollision überprüfen. Außerdem wäre es wahrscheinlich sinnvoller, nur den ersten Pixel der Maus auf Kollision überprüfen zu lassen. |
||
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik |
![]() |
MrJoney |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke für die verbesserungsvorschlege aber den code optimiren mochte ich erst nachdem es functionirt
und das tut es nicht leider hast du dafür ein verbesserungsvorschlag |
||
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: danke für die verbesserungsvorschlege aber den code optimiren mochte ich erst nachdem es functionirt
Die umgekehrte Reihenfolge wäre aber wesentlich sinnvoller, denn in diesem Fall heißt Optimieren nicht die Performance zu optimieren, sondern die Wartbarkeit und die Leserlichkeit deines Programms. Zitat: hast du dafür ein verbesserungsvorschlag
Überleg einfach mal: Was möchtest du erreichen? 1. Namen eingeben (Input-Routine schreiben oder eine aus dem Codearchiv nutzen) 2. Mausklick registrieren (MouseHit) 3. Auf Kollision mit den Menüpunkten prüfen (RectsOverlap oder ImageRectOverlap) 4. Bei "Übernehmen" den neuen Namen in die Datei schreiben (WriteLine) Dies in Programmcode umzusetzen entspricht schon fast einer Übersetzung ins Englische. Punkt 4 könntest du in etwa so implementieren: Code: [AUSKLAPPEN] If MausKlick Then
... If KollisionHatStattgefunden() Local cfg = WriteFile(CONFIG_FILE_NAME) WriteLine cfg, player[CURRENT_PLAYER]\name CloseFile cfg EndIf EndIf Ich habe es absichtlich nicht an deinen Code angepasst und du musst die Variablen und Funktionen anpassen. Aber bevor du versuchst, dein Problem in deinem jetzigen Code zu lösen, solltest du unbedingt darüber nachdenken, ob es nicht sinnvoller wäre, ein paar Tutorials zu lesen und den Code anschließend komplett neu zu schreiben. |
||
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group