Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Anfänger braucht hilfe für ein Jump and Run Spiel

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.06.2003, 10:39 Uhr
major-pain



Hallo alle,
bin neu hier und auch neu im C++ Leben, bitte respektiert das
Hab kein großes wissen in C++ und bin deshalb hier weil ich hilfe brauche und dazu sind foren ja da. also ich hab folgendes problem...
ich bin dabei ein kleines blödes jump and run spiel zu schreiben.
Ich programmiere mit dem C++ Builder 5 von Borland für Windows.
ich benutze ein image als figur. bewegt wird die figur über die w-a-s-d tasten und gesprungen wird auf w. das problem ist das ich den sprung nicht gebacken bekomme. hab versucht es über mehere timer laufen zu lassen (das sollte der richtige weg sein) aber ich brings nicht zustande. kann mir jemand dabei helfen??? Aber achtung ich bin NOCH anfänger
--
FTH
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.06.2003, 10:44 Uhr
virtual
Sexiest Bit alive
(Operator)


Jau. Ich respektiere das.
Dieses Forum ist für ANSI C gedacht und das kann kein Windows.
Ich denke, Du bist im BCB Forum besser aufgehoben, wohin ich Dich jetzt mal verschiebe.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.06.2003, 10:47 Uhr
major-pain



oh, war meine schuld, hätte ich sehen müssen. danke schön, und hoffentlich kann mir hier jemand helfen.
--
FTH
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.06.2003, 13:25 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Programmier einfach eine kleine Physik-Engine ;-) Überprüf in einem Timer, sagen wir alle 100 ms, ob Deine Figur den Boden berührt. Wenn nicht, wirds interessant:

Du speicherst irgendwo einen Geschwindigkeitsvektor, der angibt, wie schnell sich Deine Figur nach unten bewegt. Für einen Sprung setzt Du einen negativen Wert ein (= Bewegung nach oben). Jetzt berechnest Du aktuelle Höhe + Vektor = neue Y-Position. Der Vektor wird danach angepaßt durch Addition von 0.1 (je nach Wert andere Fallgeschwindigkeit; wenn Du "richtige" Physik willst, wirds "etwas" komplexer), und wenn die maximale Sinkgeschwindigkeit überschritten wird, sagen wir 10, stellst Du zurück auf diesen Wert. Berührt Deine Figur wieder den Boden, setzt Du den Vektor auf 0 und fertig!
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.

Dieser Post wurde am 17.06.2003 um 13:26 Uhr von Bruder Leif editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.06.2003, 13:55 Uhr
major-pain



das ist genau das was ich IRGENDWANN mal erreichen wollte. eigentlich wollte ich erstmal nur das der kleine kerl nur per W taste in die luft springt und wieder runterfällt aber das ist ja das maximum
zur information, ich bin 19 jahre alt und mache momentan mein fachabi in de richtung infotech in der 11 klasse. im unterricht haben wir bisher nur schleifen arrays und funktionen durchgenmommen. klassen und alles weiter hatten wir noch nicht, und nach den funktionen kam auf einmal der c++builder. bei uns läuft der unttericht sowieso seltsam. ich erzähl das damit ihr verstehen könnt das ich noch nicht soviel fachwissen der materie hab

also womit oder eher gesagt, WIE programmiere ich diese *kleine physik* engine???

freue mich über jegliche hilfe
--
FTH
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.06.2003, 17:59 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


na die physik dürfte ja relativ klar sein. Nehmen wir mal vereinfacht den senkrechten wurf. bzw in deinem fall sprung an.

Nach Newton gilt F=p' also Kraft ist gleich die änderung des Impulsen
Impuls ist definiert als m*v = m*x' weil v die änderung des ortes nach der zeit ist

Also F=(m*x')'= m*x'' + m'x'
unter der annahme das deine masse konstant bleibt (dein figur kommt nicht ins schwitzen nimmt keine gegenstände auf usw. gilt also
F=m*x''
du willst ja den ort in abhängigkeit von der zeit haben
als x''=F/m = a = -g = konstant g ist die erdbeschleunigung 9,81 m/s^2
10 sollte eine gute approximation sein

zweimal integrieren liefert x(t) = -g/2 *t^2 + c1 *t + c2
c2 ist quasi die anfangsabsprungzeit die nehmen wir mal als 0 an
c1 ist die anfangsgeschindigkeit beim absprung deiner figur.
Da musst du dir einen sinnvolen wert ausdenken oder in abhängigkeit von der Aggressivität deines Players (also wie oft der wie ein hirnverbranter auf die taste haut) einen wert wählen. Ich nenne ihn jetzt mal v0

also was raus kommt ist x(t) = -g/2*t +v0*t

wenn nun deine figur springen soll kannst du die neue position deiner figur mit hilfe dieser formel errechnen

gleichzeit bewegt sich deine figur ja noch in laufrichtung aber die hab ich mal weggelassen weil dies ja nur eine einfache bewegung mit konstanter geschwindigkeit ist also z(t) = vz*t;

du musst also in etwa wie folgt proggen
nehmen wir mal an deine figur ist sehr sportlich dann schaft die ein v0 von 6 m/s (das sind fast 2m in der höhe)

C++:
double to,t,x,z, vo=6,vz=10; //vz von 10 bedeutet die figur rennt verdammt schnell 36km/h
//wenn w gedrückt
to=time();
x=z=0;
while(x>=0){
//figur mit x und z-position malen
Sleep(40);
  t=time()-to;  
  x=6000*t - 5000000*t*t;
  z=vz*t;

}



Gruss Heiko
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 17.06.2003 um 18:42 Uhr von Heiko editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.06.2003, 18:40 Uhr
~Major-Pain
Gast


das sieht sehr kompliziert aus, das versteh ich nicht, soweit bin ich noch nicht mit dem programmieren. in flash actionscript ist alles viel einfacher
momentan sieht das ganze so aus...nur als beispiel

char keyString[25];
keyString[0] = Key;
if (keyString[0]=='d') //nach rechts
{
if (opfer->Left>=0&&opfer->Left<=119)
{
opfer->Left=opfer->Left+10;
}
}

wenn ich auf d drücke, wird einfach zu dem left wert der figur+10 dazu gezählt, aber nur wenn sie sich in einem erlaubtem bereich befindet. ich hab mein level in 6 bereiche aufgeteilt (6 hochkantige rechtecke). im jeden sind dann die befehle anderst. so müsste es doch auch gehen oder? zumindestens die normale bewegung. und das mit dem sprung hab ich so gemacht das wenn ich auf w drücke, das zwei timer aktiviert werden. timer 1 lässt die figut jede millisekunde +1 zum Top wert dazu rechnen und timer 2 schalter nach 1 sekunde den timer 1 wieder aus damit die figur nur eine sekunde lang an höhe gewinnt....

ich muss halt sagen das ich ein wirklich blutiger anfänger bin in der ganzen c++ und programmier welt. das ganze ist ja für die schule und da kann ich. auch wenn ich es dann verstehen würde, nicht so was komplexes benutzen, weil die mir sonst nicht glauben das ich das selbst gemacht habe.
meinst du, du könntest mir das ein bisschen einfacher erklären? also mit benutzung der Top und Left Werte und Timern....
so haben die Lehrer uns das erklärt und so sollten wir das auch machen.....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.06.2003, 19:06 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


wie was komplex.
also die gleichung die ich dir hingeschrieben habe lernt man in Physik in der 11. Klasse (was ist daran so komplex)

was du haben willst ist doch der ort in abhängigkeit von der zeit und genau das machen diese gleichungen. Wie du das mit dem figur malen usw., dazu kann ich dir nicht so viel sagen. Mit solchen spielereien habe ich mich noch nicht vergnügt. Das hängt auch von der graphischen Oberfläche ab die du verwendest.

Um noch mal auf das angeblich komplizierte was ich geschrieben habe zurückzukommen

Hier deklariere ich nur variablen das sollte ja hoffentlich klar sein

C++:
double to,t,x,z, vo=6,vz=10; //vz von 10 bedeutet die figur rennt verdammt schnell 36km/h



wenn w gedrückt wurde, du musst ja irgendwie ne abfrage machen dann initialisiere ich nur die variablen mit ein paar werten wie die funktion die die zeit holt nun heisst spielt keine rolle ich habe einfach mal time() hingeschrieben, dafür gibt es massenweise funktionen die du verwenden könntest

C++:
//wenn w gedrückt
to=time();
x=z=0;



und hier wird der ort deiner figur in abhängigkeit von der zeit errechnet.
Initialisiert habe ich x(die bewegung in die höhe beim sprung) und z (die bewegung in laufrichtung)

C++:
while(x>=0){
//figur mit x und z-position malen hier musst du halt irgendwie eine routine aufrufen die deine figur in abhängigkeit von x und z auf dem desktop malt
Sleep(40); //dann wartest du 40 ms oder wie lange auch immer
t=time()-to; //holst dir die aktuelle zeit
x=6000*t - 5000000*t*t; //rechest den ort in abhängigkeit von der zeit aus
z=vz*t;
}


das ganze wird so lange gemacht bis x<0 ist, wie bruder leif dir schon erklärt hat, denn dann ist die figur wieder gelandet und du musst nur noch die laufrichtung beachten

Gruss Heiko
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: