Wie sieht dieser B3d-Code in C++ aus?

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

 

Peak7810

BeitragMo, März 21, 2011 0:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch wenn ich grad einen uralt Thread ausgrab...meine Frage ist mir grad sehr wichtig...

Code: [AUSKLAPPEN]
If KeyDown(...)
      ;Vorwärts beschleunigen
ElseIf KeyDown(...)
      ;Rückwärts beschleunigen
Else
      If Speed>0 Then Speed=Speed-0.01
      If Speed<0 Then Speed=Speed+0.01
      If Speed<0.01 And Speed>0 Then Speed=0
EndIf


wenn das funktioniert, was es meiner meinung nach tun sollte, könnte mir das jemand nach c++ übersetzen...?
also nur diese speedberechnung...

ich hadere jetzt schon so 2 Stunden rum, und es tut nicht was es soll.....
wahrscheinlich liegt es an den bedingungen in c++, jedoch kommen keine fehler...

wäre supertoll wenn mir das jemand auf die schnelle schreiben könnte.

Mr.Keks

BeitragMo, März 21, 2011 1:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
if (wasauchimmerdeinkeydownabfragt()) {
  // vorwaerts
} else if (wasauchimmerdeinkeydownabfragt2()) {
  // zurueck
} else {
  if (speed > 0) speed -= 0.01;
  if (speed < 0) speed += 0.01;
  if (speed < 0.01 && speed > 0) speed = 0;
}


man beachte, dass je nach deiner umgebung möglicherweise ein zweifaches keydown-abfragen irgendwelche unerwarteten seiteneffekte hat, wodurch das zweite ignoriert wird... (tippfehler im c-code vorbehalten.)

~AUFSPALTUNG~
die frage ist nicht wirklich eine b3d-frage und passt erst recht nicht in den anderen thread.

the FR3AK

BeitragMo, März 21, 2011 1:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei den Keydown abfragen ist eben das Problem dass C++ die nicht so einfach zur verfügung stellt wie B3D und ich denke dass er gerade das wissen wollte wie es geht.

Mr.Keks

BeitragMo, März 21, 2011 2:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, wenn er nen Spiel schreibt, hat er vermutlich irgendeine Art Framework (möglicherweise die C-verwendbare Engine von B3d), das ihm so etwas ähnliches wie KeyDown zur Verfügung stellt... Was wirklich gemeint ist, wäre klar geworden, wenn Peak7810 einfach den nicht funktionierenden C++-Code gepostet hätte. Aber meinetwegen, kannst du ja einen Vorschlag mit der Eingabeschnittstelle deines Vertrauens posten, FR3AK Wink
MrKeks.net
 

Peak7810

BeitragMo, März 21, 2011 11:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein also das KeyDown kann ignoriert werden.
Mir geht es lediglich um die Geschwindigkeits-Beschleunigungs-Abbremsberechnung.

So funktioniert es irgendwie nicht...

Code: [AUSKLAPPEN]
float speed;
    if (xKeyDown(KEY_UP))
    {
        speed = speed -1;
    }
    else if (xKeyDown(KEY_DOWN))
    {
         speed = speed +1;
       
    }
    else
    {
        if (speed>0) speed=speed-0.01;
        if (speed<0) speed=speed+0.01;
        if ((speed<0.1)&&(speed>0))
        {
            speed = 0;
        }

    }

Jolinah

BeitragMo, März 21, 2011 11:55
Antworten mit Zitat
Benutzer-Profile anzeigen
So würde ich das vermutlich machen:

Code: [AUSKLAPPEN]
if (abs(speed) <= 0.01f)
    speed = 0;

if (speed > 0)
    speed -= 0.01f;
else if (speed < 0)
    speed += 0.01f;
 

Lador

BeitragMo, März 21, 2011 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Zugegeben, ich kann nur Java aus dem Schulunterricht, aber ich würde bei einer lokalen Variable die eigentlich erstmal auf 0 setzen bzw. ihr einen Standardwert geben. Und kann man wie in Blitz If, die Bedingung und die Folge in eine Zeile ohne Klammern schreiben?

Mein Vorschlag:
Code: [AUSKLAPPEN]
Float speed=0;
   If (xKeyDown(KEY_UP))
   {
      speed = speed -1;
   }
   Else
   {
      If (xKeyDown(KEY_DOWN))
      {
         speed = speed +1;
      }
      Else
      {
         If (speed>0.1)
         {
            speed=speed-0.01;
         }
         Else
         {
            If (speed<0)
            {
               speed=speed+0.01;
            }
            Else
            {
               If (speed<0.1)
               {
                  speed = 0;
               }
            }
         }
      }
   }
Mein aktuelles Projekt:
2D-Rollenspiel "Iliran"
Screenshot | Worklog
Fortschritt: ca. 70%

Jolinah

BeitragMo, März 21, 2011 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso, die Variable speed sollte natürlich nicht lokal sein, sondern schon vorher definiert worden sein. Ansonsten kann speed ja immer nur die Werte 1, -1 oder 0 annehmen und wird nie langsamer.

Goodjee

BeitragMo, März 21, 2011 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
was funktioniert eigentlich nicht?
ich nehme an du deklarierst "float speed;" irgendwo auf einer höheren ebene des programms, oder?
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

Peak7810

BeitragMo, März 21, 2011 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab noch nicht weitergearbeitet an meinem code.
Poste heut Abend was ich erarbeitet habe.

@lador: bei deinem code gibt es keine Beschleunigung.Ich probiere dann selber etwas.
 

Peak7810

BeitragDi, März 22, 2011 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry wegen doppelpost...
dieser code funktioniert nun...

Code: [AUSKLAPPEN]
    float speed;
   
    if (xKeyDown(KEY_UP))
    {
       speed -= 1.1f;
    }
    else if (xKeyDown(KEY_DOWN))
    {
       speed += 1.1f;
    }
    else
    {
       if (speed > 0.0f)
          speed -= 0.08f;
       if (speed < 0.0f)
          speed += 0.08f;
       if ((speed < 0.1f) && (speed > 0.0f))
       {
          speed = 0.0f;
       }
    }
   if (speed > 3.0f) speed = 3.0f;


wenn ich diesen nun aber in eine movement.h packe und includiere, bewegt es sich zwar, jedoch nur mit konstanter geschwindigkeit.

Alkan

BeitragDi, März 22, 2011 15:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann es sein, dass du die Variable speed immer wieder neu deklarierst und somit überschreibst?
Hauptrechner: Win7 Ultimate x64|AMD Phenom II X4 965 BlackEdition 4x3.4GHz|4 GB DualKit DDR3-1600 Ram|1.5 TB Samsung EcoGreen|Cougar CM 700Watt|ASRock M3A790GFX/120M|Nvidia GeForce 9500GT|Ati Radeon HD3300(Onboard-Deaktiviert)
Server(früher Hauptrechner): Ubuntu 9.1 x86|Intel P4 HT 3GHz|Ati Radeon X600Pro|200 GB HDD
Worklog: Planetensimulation
Homepage(Under Construction): alkan96.dyndns.org
Wenn schon falsch, dann richtig falsch.
 

Peak7810

BeitragDi, März 22, 2011 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Jup hab ich übersehen...
Da ichs ja in eine Funktion packe, musste die Variable natürlich vorher definiert sein.

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group