Hi!
Ich spiele gerade verschiedene Möglichkeiten durch, wie ein "Fenster" aufpoppen soll. Dabei habe ich das Problem, dass es nicht sofort erscheinen soll, sondern eine Verzögerung von ca. 2 - 3 Sekunden haben soll. Da ich in etwa diesen Timer benutze
GT=(GETTIMERALL()-Old_Timer)/1000
Old_Timer=GETTIMERALL()
bin ich mir nicht sicher, wie ich messen soll, da ich permanent meinen Starttimer überschreibe und mir inzwischen nicht mehr sicher bin, wie ich machen soll... =(
Kann mir wer helfen???
GLG
W.
PS.: Hier das Programm... (vergessen reinzustellen!!!)
GLOBAL GT, Old_Timer, hui
Mausload()
WHILE TRUE
FILLRECT 20, 20, 100, 100, RGB(0, 0, 255)
Maus()
IF mx >= 20 AND mx <= 100 AND my >= 20 AND my <= 100
window_true()
ELSE
window_false()
ENDIF
GT=(GETTIMERALL()-Old_Timer)/1000
Old_Timer=GETTIMERALL()
hui = hui + GT
PRINT hui, 0, 0
SHOWSCREEN
WEND
FUNCTION Mausload:
LOADSPRITE "Maus.png", 1000
ENDFUNCTION
FUNCTION Maus:
GLOBAL mx, my, b1, b2
MOUSESTATE mx, my, b1, b2
SPRITE 1000, mx, my
ENDFUNCTION
FUNCTION window_true:
ENDFUNCTION
FUNCTION window_false:
ENDFUNCTION
Hi
Also sobald du über das blaue Quadrat fährst erscheint nach 3 Sekunden ein
Rechteck (Window) im Screen .Verlässt du aber das Quadrat, und fährst erneut
darüber, mußt du wieder 3 Sekunden warten. Jetzt kannst du es ja nach deinen
Wünschen ausbauen oder umbauen.:)
Den anderen Timer in deinem Programm (kommt mir bekannt vor):D kannst du ja für
was anderes hernehmen.
FUNCTION window_true:
Cur_Timer=GETTIMERALL() //Current Timer
IF Cur_Timer>Timer+3000 //3 Seconds
FILLRECT 200, 200, 400, 400, RGB(255, 255, 0) //Window ;)
ENDIF
ENDFUNCTION
FUNCTION window_false:
Timer=GETTIMERALL()
ENDFUNCTION
So in etwa?
Habe jetzt bloß wenig Zeit. Muss schnell weg. Ich hoffe es stimmt so.
Bis dann.
Cheers
Hi!
Funktioniert super, danke! So richtig komme ich mit den Timer - Geschichten noch immer nicht klar.
Und ja, den anderen Timer benutze ich noch immer gerne! (Ist genau das, was ich suche! Echtzeittimer *freu*)
Aber das bringt mich zu einem anderen, schwierigen Problem. Und das ist bei weitem schwieriger als dieses:
In etwa möchte ich etwas ähnliches wie das hier programmieren:
(http://img296.imageshack.us/img296/8551/zzzinventarnh6.png) (http://imageshack.us)
Das Problem dabei ist aber, dass ich mir nicht sicher bin, wie ich ein solches System anlegen kann. Die einzelnen Bilder stellen ja 3D Objektteile dar, die zwar sehr schnell geladen sind (das ist ja nicht das Problem). Aber es sollte ja ein dynamisches Inventar sein, in das man Sachen rein geben kann, drinnen verschieben (was schon halbwegs funktioniert) und dann wieder positioniert werden kann.
Das mit dem Optischen System sollte halbwegs lösbar sein, aber ich bin mir wegen der Objekte nicht sicher, wie ich da tun soll und vor allem, wie man das "dynamisch" löst. Ich muss ja die Objekte auch irgendwie "speichern" (auch auf der Festplatte) und danach wieder laden können...
Hier der abgeänderte Code:
// --------------------------------- //
// Project:
// Start: Monday, January 08, 2007
// IDE Version: 4.051
GLOBAL GT, Old_Timer, hui, posx, posy
Mausload()
LOADSPRITE "Inventar.bmp", 999
WHILE TRUE
SPRITE 999, posx, posy
//FILLRECT posx, posy, posx + 100, posy + 100, RGB(0, 0, 255)
Maus()
IF mx >= posx AND mx <= posx + 100 AND my >= posy AND my <= posy + 100
window_true()
ELSE
window_false()
ENDIF
IF mx >= posx AND mx <= posx + 100 AND my >= posy AND my <= posy + 100 AND b1 = 1
window_false()
posx = mx - 40
posy = my - 40
ENDIF
PRINT LEN(posx), 0, 20
GT=(GETTIMERALL()-Old_Timer)/1000
Old_Timer=GETTIMERALL()
hui = hui + GT
PRINT b1, 0, 0
SHOWSCREEN
WEND
FUNCTION Mausload:
LOADSPRITE "Maus.png", 1000
ENDFUNCTION
FUNCTION Maus:
GLOBAL mx, my, b1, b2
MOUSESTATE mx, my, b1, b2
SPRITE 1000, mx, my
ENDFUNCTION
FUNCTION window_true:
Cur_Timer=GETTIMERALL() //Current Timer
IF Cur_Timer>Timer+500 //0.5 Seconds
FILLRECT 200, 200, 400, 400, RGB(0, 128, 255) //Window ;)
PRINT "Stärke: 56", 220, 220
ENDIF
ENDFUNCTION
FUNCTION window_false:
Timer=GETTIMERALL()
ENDFUNCTION
GLG
W.
PS.: Als Konkretbeispiel dachte ich an Diablo, Diablo 2 oder Titan Quest (Bild)...
Ich mach solche Sachen (z.B. ein- und ausfaden) immer so:
jetzt = GETTIMERALL()
start = jetzt + 3000 // fängt nach 3 sek an - kann man auch verschieben
ende = start + 3000 // 3 sekunden dauert das
WHILE TRUE
jetzt = GETTIMERALL()
// Jetzt "normalisieren", d.h. der Bereich zwischen
// start und ende wird auf die Werte 0 -> 1
// gestreckt
// wenn pos <0, ist jetzt noch vor start
// wenn pos >1, ist jetzt bereits nach ende
pos = (jetzt-start) / (ende - start)
SELECT pos
CASE <0
PRINT "Warten...", 100,100
// Mitten im Warteprozess
CASE 0 TO 1
ALPHAMODE -pos
PRINT "Fading", 100, 100
CASE >1
PRINT "Vorbei!", 100, 100
ENDSELECT
SHOWSCREEN
WEND