springen, aber wie

Posted By: ello

springen, aber wie - 06/12/07 20:21

hallo zusammen,
ich überlege grad wie ich einen sprung programmiere, komme aber zu keiner lösung. wie funktioniert sowas, das ich jederzeit einen sprung ausführen kann, vorrausgesetzt das die figur festen boden unter den füßen hat? wie kann man solche abprall-sprünge realisieren, daß der spieler wenn er an eine wand prallt und die sprungtaste drückt einen "supersprung" von der wand weg macht.

das ganze soll ja trotzdem mit c_move arbeiten damit die kollision benutzt wird.

gibts hier schon irgendwelche brauchbaren ansätze die nicht mit den templates arbeiten?

danke schonmal für alles hilfreiche:)
Posted By: Puppeteer

Re: springen, aber wie - 06/13/07 12:48

klar:
Ich werde dir es jetzt aber nicht coden sondern erklären (du schaffst das schon)
also du Tracest beim Player zum Boden und prüfst die Distanz wenn sie gleich null ist und space==1 dann hüpft er nach oben wenn result!=0 dann tracest er nochmal nach links/rechts/vorn/hinten und wenn result so ca. <10 ist und space==1 dann hüpft er von der Wand weg.
Wie du jetzt das Springen mit Schwerkraft und Sprungrichtung machst überlasse ich dir
Wenn du aber gar nich klar kommst pm mich und ich code es für dich

Grüße
Omega
Posted By: ello

Re: springen, aber wie - 06/13/07 13:00

aha... ich werd mal versuchen das in code umzusetzen. wenn ich's nicht schaff dann meld ich mich nochmal:)
Posted By: Anonymous

Re: springen, aber wie - 10/02/08 19:26

welchen befehl gibt es denn um das auzumessen wie weit man vom boden entfernt ist?
Posted By: Flori

Re: springen, aber wie - 10/02/08 19:30

hi,

beispiel:

vec_set(temp,my.x);
temp.z-=5000;
boden_dist=c_trace(my.x,temp.x,ignore_me);

so müsste es gehen
wenn du weiter als 5000 vom boden entfernt sein kannst, musst du das ändern
Posted By: Anonymous

Re: springen, aber wie - 10/03/08 12:38

temp funktioniert bei mir nicht )=
und wieso benutzt du x koordinaten obwohl nur die z wichtig sind?
wieso soll temp die x-koordinaten vom spieler bekommen?
Posted By: Flori

Re: springen, aber wie - 10/03/08 17:05

das my.x gilt für xy und z koords glaube ich

also:
speicher spieler position in temp
erniedrige temp.z um 5000
boden_dist=sende einen test-strahl von spieler_pos nach temp

für temp kannst du jede beliebige variable einsetzen
Posted By: Anonymous

Re: springen, aber wie - 10/03/08 17:47

da steht " empty pointer in lite_c"
allerdinsg bemerke ich gerade das das das falsche forum für 3dgs7 ist^^
warscheinlich aknnst du mir deshalb nicht weiterhelfen
Posted By: Ralph

Re: springen, aber wie - 10/03/08 20:22

Schreib oben nach den include´s
Code:
VECTOR* temp=nullvector;

Dann müsste es funktionieren.. aus irgendeinem Grund gibt es Temp nicht mehr als vordefinierten Vektor.

MFG Ralph
Posted By: Anonymous

Re: springen, aber wie - 10/04/08 10:07

Vielen Dank das hat geklappt. Nun springt mein player auch, allerings springt er gleich an die decke und bleibt dort hängen, egal welche werte ich einsetze )=

if (key_space)
{
sprung=0.00005;
vec_set(temp,dragon.y);
temp.z-=0.05;
boden_dist=c_trace(dragon.x,temp.x,IGNORE_ME);
if (boden_dist<100)
{c_move (dragon, vector(0,0,sprung), nullvector, GLIDE | IGNORE_PASSABLE);
sprung-=3*time_step;
if (sprung<=-20)
{sprung=0;
tastenabfrage=0;
}
}
}
Posted By: Ralph

Re: springen, aber wie - 10/04/08 16:39

Ich glaube du verwechselst hier c_move mit den normalen Position-Eigenschaften einer Entity.(Wenn es doch richtig sein sollte, bitte hin hauen, kenn mich mit c_move auch nicht sooo gut aus wink )
Wenn du jetzt "Z" in dem c_move Vector immer niedriger setzt wird er immer schneller nach unten gehen (eigentlich zumindest, es sei denn pan/tilt/roll sind nicht auf 0).
Probier mal das aus:
Code:
if(key_space){
 var strecke=0;
 sprung=0;
 vec_set(temp.x,dragon.x);
 temp.z-=1000;
 result=c_trace(dragon.x,temp.x,IGNORE_ME);
 if(result<100){
  if(strecke>20){
   sprung=0;
   tastenabfrage=0;
  }else{
   sprung=3*time_step;
   strecke=c_move(dragon,vector(0,0,sprung),nullvector,GLIDE|IGNORE_PASSABLE);
  }
 }
} 

Jetzt sollte er 20 Quants nach oben fliegen, wenn er weniger als 100 Quants vom Boden entfernd ist.

MFG Ralph
Posted By: Anonymous

Re: springen, aber wie - 10/04/08 17:38

Leider passiert immernoch dasslebe )=
ich verstehe auch nicht warum. ich habe schon vieles probiert
)=
Aber trotzdem war der beitrag sehr hilffreich
Posted By: Ralph

Re: springen, aber wie - 10/04/08 17:41

Poste mal bitte den gesammten Code des Drachen evtl. liegt der Fehler ja wo anders.

MFG Ralph
Posted By: Anonymous

Re: springen, aber wie - 10/04/08 17:53

ok
hier ist er
Quote:
function physik ()
{dragon = ent_create ("dragon.mdl", vector(0, 0, 200), NULL);
set(dragon,SHADOW);
while (1)
{camera.x = dragon.x - 200 * cos(dragon.pan);
camera.y = dragon.y - 200 * sin(dragon.pan);
camera.z = dragon.z + 200;
camera.pan = dragon.pan;
camera.tilt = -30;

c_move (dragon, vector(0,0,-1), nullvector, GLIDE | IGNORE_PASSABLE);

if (key_cud)
{c_move (dragon, vector(-0.2*faktor,0,0), nullvector, GLIDE | IGNORE_PASSABLE);
ent_animate(dragon, "go", anim, ANM_CYCLE);
anim+=3.5*faktor*time_step;
}

if(key_cuu)
{
c_move (dragon, vector(0.8*faktor ,0,0), nullvector, GLIDE | IGNORE_PASSABLE);
ent_animate(dragon, "go", anim, ANM_CYCLE);
anim+=3.5*faktor*time_step;
}

if (key_cul)
{dragon.pan+=0.5;
}

if (key_cur)
{dragon.pan-=0.5;
}

if(key_space){
var strecke=0;
sprung=0;
vec_set(temp.x,dragon.x);
temp.z-=1000;
result=c_trace(dragon.x,temp.x,IGNORE_ME);
if(result<50){
if(strecke>20){
sprung=0;
}else{
sprung=3*time_step;
strecke=c_move(dragon,vector(0,0,sprung),nullvector,GLIDE|IGNORE_PASSABLE);
}
}
}




wait (1);





}
}

Posted By: Ralph

Re: springen, aber wie - 10/04/08 18:30

Ich habe dein Code mal komplett umgeschrieben ich hoffe das ist nicht schlimm...
Code:
var faktor=5;
VECTOR* temp=nullvector;

function dragon_physik(){
	while(!me){wait(1);}
	dragon=me;
	while(me){
		camera.x=my.x-200*cos(my.pan);
		camera.y=my.y-200*sin(my.pan);
		camera.z=my.z+200;
		camera.pan=my.pan;
		camera.tilt=-30;
		my.skill1=faktor*(key_w-key_s)*time_step;
		my.pan+=5*(key_a-key_d)*time_step;
		result=c_trace(my.x,vector(my.x,my.y,my.z-10000),IGNORE_ME|USE_BOX);
		if(result>5&&my.skill4==0){
			my.z-=(result/5)*time_step;
		}else{
			if(result<2&&my.skill4==0){
				my.z+=2*time_step;
			}
		}
		if(key_space&&my.skill4==0&&(result>2&&result<5)){
			while(key_space){wait(0.1);}
			my.skill4=50;
		}
		if(my.skill4>0){
			my.z+=(my.skill4/10)*time_step;
			my.skill4-=5*time_step;
		}else{
			my.skill4=0;
		}
		c_move(my,vector(my.skill1,0,my.skill3),nullvector,GLIDE|IGNORE_PASSABLE);
		wait(1);
	}
}

function main(){
//.... irgendwas anderes
ent_create("dragon.mdl",vector(0,0,200),dragon_physik);

Hoffe das alles so ist wie du es wolltest.
MFG Ralph
Posted By: Anonymous

Re: springen, aber wie - 10/04/08 18:44

um ehrlich zu sein finde ich es ein wenig schlimm, da ich den code selber verstehen muss. deinen code versteh ich um ehrlich zu sien gar nicht.
mit den ganzen skills u.s.w.
aber ich danke dir für deine mühe und ich werde deinen code langsam aber sicher auseinanderpflücken^^
Posted By: Ralph

Re: springen, aber wie - 10/04/08 18:48

Im Grunde habe ich nur deinen Code verkürzt und eine (billige)Gravitation und ein Sprungbefehl hinzugefügt.
Aber verstehen solltest du es dennoch also viel Spaß damit.

Achja macht der Code denn das was du wolltest?

MFG Ralph
Posted By: Anonymous

Re: springen, aber wie - 10/04/08 18:53

ja alles funktioniert super, nur an der geschwindigkeit und animation mus noch gearbeitet werden^^
Posted By: Ralph

Re: springen, aber wie - 10/04/08 19:03

Gut dann bin ich ja beruhigt.
Viel Spaß noch!
MFG Ralph
Posted By: Anonymous

Re: springen, aber wie - 10/04/08 19:13

sehr interessant: ich ahbe jetzt einfach aus zwecksgründen den teil mit springen in mein projekt kopiert:
if (key_space)
{result=c_trace(dragon.x,vector(dragon.x,dragon.y,dragon.z-10000),IGNORE_ME|USE_BOX);
if(result>5&&dragon.skill4==0){
dragon.z-=(result/5)*time_step;
}else{
if(result<2&&dragon.skill4==0){
dragon.z+=2*time_step;
}
}
if(key_space&&dragon.skill4==0&&(result>2&&result<5)){
while(key_space){wait(0.1);}
dragon.skill4=50;
}
if(dragon.skill4>0){
dragon.z+=(dragon.skill4/10)*time_step;
dragon.skill4-=5*time_step;
}else{
dragon.skill4=0;
}
c_move(dragon,vector(dragon.skill1,0,(dragon.skill3)*(1)),nullvector,GLIDE|IGNORE_PASSABLE);
wait(1);

}



Nun springt der Drache auch, allerdings in die Richtung gen Boden. Wie kann das sein ? xD
Posted By: Ralph

Re: springen, aber wie - 10/04/08 19:43

Das das überhaupt funktioniert wundert mich....
Bei dir schien mir eh irgendwie alles falschrum eigentlich ist beim c_move die 3te Variable Positiv wenns hoch gehen soll...
Und was soll das eigentlich bewirken?
"(dragon.skill3)*(1)"
Macht doch garkeinen Sinn einen Wert mit eins zu Multiplizieren. tired
Abgesehen davon kannst du da auch "0" hinschreiben anstelle des "(dragon.skill3)*(1)" (ohne") da ich skill3 eh nicht mehr benutz habe, hatte ich wohl vergessen zu ändern.
MFG Ralph
Posted By: Anonymous

Re: springen, aber wie - 10/04/08 19:51

oh mist das sollte mal *-1 werden um die richtung zu ändern^^
es funktioniert allerdings der drache wird dabei in den boden gedrückt
Posted By: Anonymous

Re: springen, aber wie - 10/04/08 19:53

mit mal -1 klappts auch nicht )=
Posted By: Anonymous

Re: springen, aber wie - 10/09/08 09:44

Ich weiß jetzt warum das alles nicht geht. Ich habe einen Debug gemacht, und die boden_dist werte verhalten sich sehr merkwürdig. Ich weiß auch nicht warum, da ich mich auch noch nicht mit diesem befehl auskenne
© 2024 lite-C Forums