Name ändern duch Eingabeaufforderung

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

MrJoney

Betreff: Name ändern duch Eingabeaufforderung

BeitragMo, März 24, 2008 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, März 24, 2008 14:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ehm.. interessantes Bild Laughing

Ich würd mit den Write-Befehlen einfach den Namen in der Datei überschreiben
Twitter
Download Jewel Snake!
Windows|Android

MrJoney

BeitragMo, März 24, 2008 15:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Urbach

ehemals "Basicprogger"

BeitragMo, März 24, 2008 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, März 24, 2008 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Urbach

ehemals "Basicprogger"

BeitragMo, März 24, 2008 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, März 24, 2008 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Urbach

ehemals "Basicprogger"

BeitragMo, März 24, 2008 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group