Seite 4 von 7

Verfasst: 02.12.2008 12:43
von Dare Devil
Okay... hatte vergessen InitSprite3D() zu machen...
wow... jetzt ist es aber verdammt schnell - ne halbe Sekunde bei mir... :mrgreen: werd das aber auf 3 Sek. verlangsamen und die Moeglichkeit bieten, das Intro mit der ESC-Taste abzubrechen... Ich hoffe dann sind alle zufrieden und ausserdem hoffe ich, dass es jetzt bei jedem gleich schnell laeuft :allright:

edit: Update gibts vermutlich erst morgen - da mir heute etwas die Zeit fehlt...

Verfasst: 02.12.2008 13:38
von ZeHa
Du kannst es auch zeitlich so bauen, daß es auf jedem Rechner gleich ist. Einfach immer den Zeitabstand vom Start der Schleife bis zum jetzigen Zeitpunkt messen (mit ElapsedMilliseconds()), dann diese Zahl durch Deine gewünschte Zeit (3000 ms) teilen und als Float speichern, dann hast Du die prozentuale Helligkeit (also einen Wert zwischen 0 und 1). Diesen Wert mußt Du nur noch mit dem Helligkeitswert (also 255) multiplizieren und schon hast Du eine Blendanimation, die wirklich auf jedem Rechner 3 Sekunden dauert, egal wie schnell oder langsam CPU und Grafikkarte sind.

Das mit dem ESC würd ich aber trotzdem reinmachen, denn selbst 3 Sekunden können einem irgendwann zu viel sein ;)

EDIT: Hier mal ein beispielhafter Code-Schnipsel (ungetestet):

Code: Alles auswählen

#DURATION = 3000       ; gewünschte Dauer in Millisekunden

startTime.l = ElapsedMilliseconds()
deltaTime.l = 0
brightness.f = 0

While deltaTime < #DURATION And Not KeyboardReleased(#PB_Any)
    deltaTime = ElapsedMilliseconds() - startTime
    brightness = deltaTime / #DURATION
    
    DisplayTranslucentSprite(lvl, 0, 0, brightness * 255)
    FlipBuffers()
    ExamineKeyboard()

    ; hier natürlich noch WindowEvent() und Delay(1) usw.
Wend

Verfasst: 02.12.2008 13:50
von Dare Devil
ZeHa hat geschrieben:Du kannst es auch zeitlich so bauen, daß es auf jedem Rechner gleich ist. Einfach immer den Zeitabstand vom Start der Schleife bis zum jetzigen Zeitpunkt messen (mit ElapsedMilliseconds()), dann diese Zahl durch Deine gewünschte Zeit (3000 ms) teilen und als Float speichern, dann hast Du die prozentuale Helligkeit (also einen Wert zwischen 0 und 1). Diesen Wert mußt Du nur noch mit dem Helligkeitswert (also 255) multiplizieren und schon hast Du eine Blendanimation, die wirklich auf jedem Rechner 3 Sekunden dauert, egal wie schnell oder langsam CPU und Grafikkarte sind.

Das mit dem ESC würd ich aber trotzdem reinmachen, denn selbst 3 Sekunden können einem irgendwann zu viel sein ;)

EDIT: Hier mal ein beispielhafter Code-Schnipsel (ungetestet):

Code: Alles auswählen

#DURATION = 3000       ; gewünschte Dauer in Millisekunden

startTime.l = ElapsedMilliseconds()
deltaTime.l = 0
brightness.f = 0

While deltaTime < #DURATION And Not KeyboardReleased(#PB_Any)
    deltaTime = ElapsedMilliseconds() - startTime
    brightness = deltaTime / #DURATION
    
    DisplayTranslucentSprite(lvl, 0, 0, brightness * 255)
    FlipBuffers()
    ExamineKeyboard()

    ; hier natürlich noch WindowEvent() und Delay(1) usw.
Wend
Danke, das kann ich echt gut gebrauchen! :allright:
Haette jetzt ein Delay()-Gewurschtel gemacht :mrgreen:

Verfasst: 02.12.2008 13:56
von ZeHa
Jo ;) kenne ich von früher auch noch.
Gewöhne Dir am besten an, immer "nach der Zeit" zu gehen, damit kriegst Du es wirklich rechnerunabhängig hin. Eigentlich müßtest Du das fürs Spiel genauso machen... ;) aber da es ja scheinbar bei den meisten "normal" läuft, kannst Du Dir das natürlich auch fürs nächste Projekt aufheben. Habe "Gloomy Nights" auch nicht mehr "umgerüstet", das ist jetzt halt so wie es ist.

Verfasst: 02.12.2008 19:20
von Dare Devil
ZeHa hat geschrieben:Jo ;) kenne ich von früher auch noch.
Gewöhne Dir am besten an, immer "nach der Zeit" zu gehen, damit kriegst Du es wirklich rechnerunabhängig hin. Eigentlich müßtest Du das fürs Spiel genauso machen... ;) aber da es ja scheinbar bei den meisten "normal" läuft, kannst Du Dir das natürlich auch fürs nächste Projekt aufheben. Habe "Gloomy Nights" auch nicht mehr "umgerüstet", das ist jetzt halt so wie es ist.
Hab es geschafft deinen Code - leicht modifiziert - in mein Programm einzubinden, thx nochmal :allright:
Muesstest mir halt dann beim naechsten Update sagen, ob es bei dir wirklich nur noch 3 Sek dauert - das waere nett von dir, wenn du mir das mitteilen koenntest :) Und mit ESC kann man jetzt die ganze Funktion ueberspringen - wenn man nicht warten will

Also ich habe da zu meinem Spiel noch eine Kleinigkeit vor: Ich wuerde gerne eine Karte zeichnen, die jedesmal vor Levelbeginn eingeblendet wird und die aktuelle Position auf der Karte zeigt (wo man sich gerade befindet) - waer das ne gute Idee oder sinnlos?

Verfasst: 02.12.2008 19:54
von Criss
Jep, gute Idee! Kannst Du einfach mit einem Bild lösen.

Verfasst: 03.12.2008 11:26
von dllfreak2001
Also das dritte Level finde ich unfair, ab der stelle mit den vielen Kanonen komm ich nicht weiter. Die Treffererkennung mit dem Messer funzt nicht immer so richtig glaube ich und ich weiß nicht warum der manchmal nicht das Messer zückt auch wenn ich auf die Taste drücke.

Verfasst: 03.12.2008 14:29
von Dare Devil
dllfreak2001 hat geschrieben:Also das dritte Level finde ich unfair, ab der stelle mit den vielen Kanonen komm ich nicht weiter. Die Treffererkennung mit dem Messer funzt nicht immer so richtig glaube ich und ich weiß nicht warum der manchmal nicht das Messer zückt auch wenn ich auf die Taste drücke.
Das erste Problem: Der Trick ist zu wissen, wo man landet und wie man weitergeht. Wenn man erstmal den "Dreh" raushaut ist es keine wirklich grosse Kunst mehr :wink:

Das zweite Problem: Da gibt es einige Probleme seit dem letzten Update - an denen arbeite ich gerade - zwar funktioniert die Funktion im groben und ganzen, allerdings ist dem Spieler nicht so ganz klar, wie er das machen soll - aus diesem Grund werde ich diese Funktion noch komplett ueberarbeiten - heute Abend (wenn alles nach Plan verlaeuft) erscheint die naechste Alpha-Version, dann kannst du es ja nochmal testen und mir berichten, wie du die ueberarbeitete Messer-Steuerung findest....

Verfasst: 03.12.2008 20:17
von Dare Devil
Zweites Update
Aenderungen:

* Beine der Spielfiguren (sowohl der Hauptspielfigur als auch der Gegner) bewegen sich nicht mehr so rasch, sodass der Geh-Prozess "natuerlicher aussieht.

* Intro-Bildschirm mit ESC-Taste abbrechbar - ausserdem sollte dieser Prozess nicht laenger als 3 - 4 Sek. dauern.

* Messer-Stech-Funktion geaendert Jetzt bleibt das Messer einige Frames draussen, wenn man die TAB-Taste drueckt - es spielt dabei keine Rolle mehr - ob man die Taste gleich danach wieder loslaesst oder gedrueckt haelt.

* Bug in Level 4 ausgebessert: Es gab 2 Stellen im vierten Level in der ein Herz verlieren unumgaenglich war - dank eines netten Users konnte der Fehler entdeckt und ausgebessert werden. Jetzt ist es (theoretisch) moeglich das gesamte Level zu spielen ohne ein einziges Herz zu verlieren ;)



Ich hab so einiges geaendert - ich hoffe dass es reibungslos klappt - waere nett wenn ihr das wieder testen koennt und mir Bescheid geben koennt - ob es noch Bugs gibt.

Moechte mich bei allen Testern / Bugreportern an dieser Stelle fuer ihre Muehe bedanken! :wink:

Verfasst: 03.12.2008 22:17
von Milchshake
Ok, nach langem Versuchen habe ich Schlussentlich die 4te Level fast geschafft.
DOCH ich habe folgendes Problem.
Nach dem die 4te Tür erschienen ist, kann ich bei der oberen Plattform nicht mehr springen.
Bild

Ich habe die Türen Nummeriert, falls es dir hilft.