Aktuelle Zeit: 22.12.2024, 06:59

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: SceneNodes bewegen
BeitragVerfasst: 08.05.2013, 12:01 
Offline

Registriert: 06.03.2013, 09:59
Beiträge: 4
Hallo zusammen,

ich habe eigentlich eine recht simple Frage. Dezeit bewege ich meine Charaktäre in meiner Welt auf folgende weiße:

Pseudo-Code

while(device.run)
{
charakter.Position = (1+i,0,0);
i+=1;
{

Ich positioniere also bei jedem zeichnen den Charakter (node) neu. Das funktioniert auch echt gut. Ich habe nur ein Problem. Auf unterschiedlichen Rechnern läuft das dann logischerweise unterschiedlich schnell. Nun habe ich schon versucht die FrameRate Konstant zu machen, was aber dazu führt dass das zeichnen zu Ruckel-Effekten führt.
Ich suche jetzt schon ne ganze Weile nach einer möglichkeit meine Figuren so von a nach b zu bewegen, dass dies auf allen Rechnern gleich schnell erfolgt.
Habt ihr einen Ansatz, ne Idee wie man das am sinnvolsten angeht? Ich hab inzwischen alles abgegrast was ich so an infos finden konnte.

Vielen Dank schonmal für die Hilfe!

Vielen Dank!!


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: SceneNodes bewegen
BeitragVerfasst: 13.05.2013, 08:34 
Offline
Benutzeravatar

Registriert: 17.04.2007, 08:42
Beiträge: 460
Wohnort: Willich, NRW
Da du frame based animation benutzst ist es klar, dass es auf anderen Rechnern unterschiedlich schnell läuft, da es auf jedem Rechner (abhängig von der Hardware) zu unterschiedlichen Renderzeiten kommt. Was du machen musst ist time based animation.

Die Kerndiee ist einen Timer mitlaufen zu lassen und dann inabhängigkeit von der Zeit zu animieren (Objekt bewegen). Damit garantierst du, dass es auf allen Rechnern gleich schnell läuft, da die Zeit auch überall konstant sein sollte ;)

Ich hab mal in einem etwas älteren Projekt von mir gekramt um dir mal was vorzusetzen, was dir das ganze vllt verdeutlicht. Bei Fragen einfach melden.

Code:
//nodes[nodePointer]->time = 500
//Jedes mal wenn es wieder Zeit zu "updaten" danns etze neuen timestamp und update (nodePointer++ in dem Fall)
if((appCore->getGlobalTimer()->getTime() - timeStamp) > nodes[nodePointer]->time)
{
   timeStamp = appCore->getGlobalTimer()->getTime();
   nodePointer ++;
}

In dem Codebeispiel wird aller 500ms der node pointer um 1 verschobene (Spriteanimation).

_________________
Bild

Irrlicht - From Noob To Pro A Guideline

--

Sonstige Projekte, Blog : http://www.rpdev.net


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de