[GELÖSTProgramm überprüft Bedingung erst beim zweiten Start?
Übersicht

![]() |
M0rgensternBetreff: [GELÖSTProgramm überprüft Bedingung erst beim zweiten Start? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Leute, ich bin im Moment ne kleine Desktopuhr mit nem Überraschungseffekt am schreiben.
Und zwar will ich ein Bild anzeigen, das jeden Tag ein Stückchen weiter auf dem Bildschirm wandert. Dazu lasse ich den Tag und Monat und die YPosition in einer Datei speichern und beim Start auslesen. Wenn dann der Tag ungleich dem jetzigen Datum ist, dann soll er den y Wert verringern. Aber irgendwie funktioniert das nicht richtig. Also, ich starte das Programm, beende es, ändere meine Systemzeit und starte das Programm wieder. Aber den yWert verändert er erst, wenn ich das Programm dann nochmal starte. Hier ist mal ein Teil des Codes: Code: [AUSKLAPPEN] Local Exist = 0
Global AlterTag, AlterMonat, AltY Global Uhrzeit$, Datum$, Tag$, Monat$ Global Day, Month Global StartZeit = MilliSecs() Global SaveTime = 1800000 Uhrzeit$ = CurrentTime() Datum$ = CurrentDate() Tag$ = Mid$(Datum$, 1, 2) Monat$ = Mid(Datum$, 4, 3) Day = Int(Tag$) SetDate() Exist = LoadData() If Exist = 1 Then If AlterMonat = Month Then If AlterTag < Day Then HerzY = AltY-10 ElseIf AlterTag = Day Then HerzY = AltY EndIf ElseIf AlterMonat < Month Then HerzY = AltY-15 EndIf EndIf SaveData() Danach geht er in die Hauptschleife über in der dann das Datum angezeigt wird und das Bild gemalt wird. Hier sind noch die Funktionen von oben: Code: [AUSKLAPPEN] Function LoadData()
Local Exist Local DateiSelbst DebugLog FileType("Data.txt") If FileType("Data.txt") = 1 Then Exist = 1 DateiSelbst = ReadFile("Data.txt") AlterTag = ReadByte(DateiSelbst) AlterMonat = ReadByte(DateiSelbst) AltY = ReadInt(DateiSelbst) CloseFile(DateiSelbst) Else Exist = 0 DateiSelbst = WriteFile("Data.txt") WriteByte(DateiSelbst, Day) WriteByte(DateiSelbst, Month) WriteInt(DateiSelbst, HerzY) CloseFile(DateiSelbst) EndIf Return Exist End Function Function SaveData() Local DateiSelbst DateiSelbst = WriteFile("Data.txt") WriteByte(DateiSelbst, Day) WriteByte(DateiSelbst, Month) WriteInt(DateiSelbst, HerzY) CloseFile(DateiSelbst) End Function Function SetDate() Monat$ = Lower$(Monat$) If Monat$ = "jan" Then Month = 1 If Monat$ = "feb" Then Month = 2 If Monat$ = "mar" Then Month = 3 If Monat$ = "apr" Then Month = 4 If Monat$ = "may" Then Month = 5 If Monat$ = "jun" Then Month = 6 If Monat$ = "jul" Then Month = 7 If Monat$ = "aug" Then Month = 8 If Monat$ = "sep" Then Month = 9 If Monat$ = "oct" Then Month = 10 If Monat$ = "nov" Then Month = 11 If Monat$ = "dec" Then Month = 12 End Function Kann sein, dass ich irgendwo nen Denkfehler drin hab. Wäre also echt nett, wenn mir jemand helfen könnte. Weil wenn ich drüber gucke, dann seh ich keinen Fehler. Lg, M0rgenstern |
||
- Zuletzt bearbeitet von M0rgenstern am Di, Jan 12, 2010 22:55, insgesamt einmal bearbeitet
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Leider sieht man nicht, wie du aus HerzY das Objekt verschiebst.
Ich vermute mal, es liegt daran, dass du HerzY nirgendwo definierst. z.b. GLOBAL HerzY% ...am Anfang Deines Programms. Das führt dazu, dass der Versetzungsbefehl immer das alte HerzY vom Vortag kennt, während deine Änderungsroutine zwar HerzY verändert, aber dann eben nur abspeichert. Zurück im Hauptprogramm gilt dann wieder das alte HerzY. Erst nach dem Neustart wird HerzY aus der Datei gelesen und jetzt liegt der neue Wert vor. Typisch BB-Coder: Bloß nix definieren? Mach dir für jeden Variable Gedanken über ihren Geltungsbereich! |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Typisch BB-Coder: Bloß nix definieren?
Das ist das schöne an BlitzMax: Es gibt Strict und SuperStrict. Das hilft wirklich enorm. |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Wenn du dir den COde genau anguckst, dann wirst du sehen, dass dort HerzY = AltY-10 steht.
Also benutzt mein Hauptprogramm auch das HerzY das schon verändert wurde. 2. Ich deklariere bis auf ein, zwei Ausnahmen alle Variablen die ich brauche VORHER. Ich habs hier nur nicht für nötig gehalten, das mit einzubringen. Aber bitte: Code: [AUSKLAPPEN] Global HerzX, HerzY
HerzX = GraphicsWidth()/2 HerzY = 605 Steht relativ weit oben, wo auch das Bild geladen wird. Falls ich dich jetzt flalsch verstanden haben sollte, dann tut es mir leid. Lg, M0rgenstern |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
schade, dann war es das nicht...
dann rate ich dir, mal jeweils vor und nach... - dem Laden des Wertes - dem Abändern des HerzY - dem Zeichnen des Image ein DEBUGLOG " Vor dem Zeichnen: " + HerzY ...zu setzen und im Debugger zu prüfen, ob die Reihenfolge der Funktionen wie erwartet abläuft, bzw wo HerzY welchen Wert hatte. Die 6 Ergebnisse kannste ja hier wieder reinsetzen. Event. auch mehr Code... |
||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also:
Debuglog gibt aus. Vor loaddata() 605 Direkt nach Loaddata() 605 Nach dem Ändern 595 Nach SaveData() 595 Problem hat sich grade erledigt. Ich hab gemerkt, dass ich die falsche Variable angezeigt bekomme. Tut mir leid, mein Fehler. Lg, m0rgenstern |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group