Gamestudio Links
Zorro Links
Newest Posts
AlpacaZorroPlugin v1.3.0 Released
by kzhao. 05/22/24 13:41
Free Live Data for Zorro with Paper Trading?
by AbrahamR. 05/18/24 13:28
Change chart colours
by 7th_zorro. 05/11/24 09:25
Data from CSV not parsed correctly
by dr_panther. 05/06/24 18:50
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
4 registered members (AemStones, AndrewAMD, gamers, Kingware), 1,679 guests, and 2 spiders.
Key: Admin, Global Mod, Mod
Newest Members
LucasJoshua, Baklazhan, Hanky27, firatv, wandaluciaia
19054 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
*German* problem mit c_trace #219770
08/04/08 13:54
08/04/08 13:54
Joined: Jun 2008
Posts: 11
B
birkin Offline OP
Newbie
birkin  Offline OP
Newbie
B

Joined: Jun 2008
Posts: 11
hi,

also ich habe folgendes problem, seitdem ich in mein player script das c_trace eingebaut habe, hat mein player physikalische grundsätze obwohl das gar nich sein soll, d.h. wenn ich mich bewege und dabei eine schräge hochlaufe bewegt sich der player langsamer und wenn ich sie herunterlaufe dementsprechend schneller. und wenn ich an einer kante stehe an die eine andere kante anliegt( die sind aber schief, bzw. diagonal) bewegt sich der player kurzzitig ganz schnell ein paa quants hoch und runter und rutscht dabei die kante entlang........
kann mir jemand erklären warum der player das tut oder wie man das beheben kann, weil ich wüsste keinen ansatz zur lösung.
schon ma danke im vorraus.

hier ist noch mein playerscript
Code:
FUNCTION rotate_entity(rotate_angle,rotate_speed);

DEFINE move_x,skill22; //movement skills
DEFINE move_y,skill23;
DEFINE move_z,skill24;
DEFINE force_x,skill25;
DEFINE force_y,skill26;
DEFINE force_z,skill27;
DEFINE velocity_x,skill28;
DEFINE velocity_y,skill29;
DEFINE velocity_z,skill30;

DEFINE animate,SKILL31; //animation skills
DEFINE animate2,SKILL32;
DEFINE animblend,SKILL33;
DEFINE currentframe,SKILL34;
DEFINE blendframe,SKILL35;

DEFINE z_offset,SKILL50; //gravity and jumping skills
DEFINE jumping_mode,SKILL51;
DEFINE gravity,SKILL52;

DEFINE movement_mode,SKILL53; //for various movement mainly combat
DEFINE moving,SKILL54;

DEFINE hit_by_player,SKILL55; //enemy skills
DEFINE entity_type,SKILL56;


DEFINE nullframe,-2;
DEFINE blend,-1;
DEFINE stand,0;
DEFINE run,1;
DEFINE walk,2;
DEFINE jump,3; 
DEFINE fall,4;


var camera_distance = 250;

Action player_maedel
{
	player = my;
	my.fat= off;
	my.narrow = on;
	c_setminmax(my);
	my.shadow = on;


	while (player != null)
	{
		kamera();
		bewegungen();
		gravitation();
		kamerazentrierung();
		player_animationen(1);
		wait(1); 
	}	
}


function rotate_entity(rotate_angle,rotate_speed)
{
	if (my.pan == rotate_angle) {return;}
	result = ang(rotate_angle - my.pan);
	if (result > 0) { my.pan += rotate_speed * time; }
	if (result < 0) { my.pan -= rotate_speed * time; }
	if (ang(rotate_angle - my.pan) < 0 && result > 0) { my.pan = rotate_angle; }
	if (ang(rotate_angle - my.pan) > 0 && result < 0) { my.pan = rotate_angle; }
}


function kamera()
{
	camera.pan -= mouse_force.x * 12 * time;
	camera.tilt += mouse_force.y * 8 * time;
	camera.tilt = clamp(camera.tilt,-70,- 5);
	temp = fcos(camera.tilt,-camera_distance);
	vec_set(camera.x,vector(my.x + fcos(camera.pan,temp),my.y +	fsin(camera.pan,temp),my.z + 70 + fsin(camera.tilt,-camera_distance)));
	camera.arc -= 0.25 * mickey.z * time_step;
	camera.arc = clamp(camera.arc,20,100);	
}


function kamerazentrierung()
{
	if (mouse_middle == 1)
	{
		if (camera.pan <= player.pan)
			{camera.pan += 20 * time;}
		if (camera.pan >= player.pan)
			{camera.pan -= 20 * time;}
		if (camera.tilt <= -5)
			{camera.tilt += 20 * time;}
		if (camera.arc >= 50)
			{camera.arc -= 13 * time;}
		if (camera.arc <= 50)
			{camera.arc += 13 * time;}
	}
}


function bewegungen()
{
	temp.x = -1000;
	temp.y = 0;
	if (key_w == 1 && key_s == 0 && key_a == 0 && key_d == 0) { temp.x = camera.pan; }
	if (key_s == 1 && key_w == 0 && key_a == 0 && key_d == 0) { temp.x = camera.pan + 180; }
	if (key_a == 1 && key_s == 0 && key_w == 0 && key_d == 0) { temp.x = camera.pan + 90; }
	if (key_d == 1 && key_s == 0 && key_a == 0 && key_w == 0) { temp.x = camera.pan - 90; }
	if (key_w == 1 && key_a == 1 && key_d == 0 && key_s == 0) { temp.x = camera.pan + 45; }
	if (key_w == 1 && key_d == 1 && key_a == 0 && key_s == 0) { temp.x = camera.pan - 45; }
	if (key_s == 1 && key_a == 1 && key_d == 0 && key_w == 0) { temp.x = camera.pan + 135; }
	if (key_s == 1 && key_d == 1 && key_a == 0 && key_w == 0) { temp.x = camera.pan - 135; }
	if (temp.x != -1000) 
	{
		if (key_shift == 1) 
			{temp.y = 10 * time;}
		else
			{temp.y = 20 * time;}
	}

	my.move_x = fcos(temp.x,temp.y);
	my.move_y = fsin(temp.x,temp.y);

	c_move(my,nullvector,my.move_x, ignore_passable | glide);
	
	result = c_trace(my.x,vector(my.x,my.y,my.z - 4000),use_box|ignore_me|scan_texture);
	if (result < 0) { my.z -= result; my.velocity_z = 0; }
	
	if (temp.y > 0) {rotate_entity(temp.x,20);}
	
	if (my.move_x == 0 && my.move_y == 0)
	{
		if (my.animblend > stand && my.animblend != jump && my.animblend != fall)
			{my.blendframe = stand;}
	}
	else
	{
		if (my.animblend == stand)
		{
			if (key_shift == 1)
			{my.blendframe = walk;}
			else
			{my.blendframe = run;}
		}
		if (my.animblend == run && key_shift == 1) 
			{my.blendframe = walk;}
		if (my.animblend == walk && key_shift == 0)
			{my.blendframe = run;}
	}
	
	
	
}


function gravitation()
{
	result = c_trace(my.x,vector(my.x,my.y,my.z - 4000),use_box|ignore_me|scan_texture);
	
	if (result < 3)
	{
		if (my.jumping_mode == 0)
		{
			my.force_z = -1 * result;
			if (key_space == 1 && my.animblend >= stand && my.animblend != jump && my.animblend != fall)
			{
				my.jumping_mode = 1;
				my.force_z = 32;
				my.blendframe = jump;
				my.animate2 = 0;
				my.animblend = blend;
			}		
		}
		if (my.jumping_mode == 2 || my.jumping_mode == 3) 
		{my.jumping_mode = 0;}
	}
	else
	{
		if (my.jumping_mode == 2)
		{
			if(result > 120)
			{
				my.animate = 60;
				my.jumping_mode = 3;
			}
			else
			{my.jumping_mode = 0;}
		}
		if (my.jumping_mode == 3 && result <= 120) { my.jumping_mode = 0;}
		if (my.jumping_mode == 0)
		{
			if (result > 120 && my.animblend >= stand && my.animblend != jump && my.animblend != fall)
			{
				my.jumping_mode = 3;
				my.blendframe = fall;
				my.animate2 = 0;
				my.animblend = blend;
			}
		}
		
		my.force_z -= 6 * time;
		my.force_z  = max(-30,my.force_z);
	}
	my.velocity_z += (time * my.force_z) - (min(time * 0.7,1) * (my.velocity_z));
	my.move_z = my.velocity_z * time;
	
}


function player_animationen(animation_speed)
{
	if (animation_speed <= 0) {animation_speed = 1;}
	if (my.animblend != blend && my.blendframe != nullframe)
	{
		my.animate2 = 0;
		my.animblend = blend;
	}
	if (my.animblend == blend)
	{
		if (my.currentframe == stand)	{ent_animate(my,"stand",my.animate,anm_cycle);}
		if (my.currentframe == run) {ent_animate(my,"run",my.animate,anm_cycle);}
		if (my.currentframe == walk) {ent_animate(my,"walk",my.animate,anm_cycle);}
		if (my.currentframe == jump) {ent_animate(my,"jumpnew",my.animate,0);}
		
		if (my.blendframe == stand) {ent_blend("stand",0,my.animate2);}
		if (my.blendframe == run) {ent_blend("run",0,my.animate2);}
		if (my.blendframe == walk) {ent_blend("walk",0,my.animate2);}
		if (my.blendframe == jump) {ent_blend("jumpnew",0,my.animate2);}
		if (my.blendframe == fall) {ent_blend("jumpnew",60,my.animate2);}
		
		
		my.animate2 += 45 * time;
		if (my.animate2 >= 100)
		{
			my.animate = 0;
			my.animblend = my.blendframe;
			my.blendframe = nullframe;
		}
	}
	if (my.animblend == stand) 
	{
		ent_animate(my,"stand",my.animate,anm_cycle);
		my.animate += 2 * animation_speed * time;
		my.animate %= 100;
		my.currentframe = stand;
	}
	if (my.animblend == run) 
	{	
		ent_animate(my,"run",my.animate,anm_cycle);
		my.animate += 6.8 * animation_speed * time;
		my.animate %= 100;
		my.currentframe = run;
	}
	if (my.animblend == walk) 
	{
		ent_animate(my,"walk",my.animate,anm_cycle);
		my.animate += 6 * animation_speed * time;
		my.animate %= 100;
		my.currentframe = walk;
	}
	if (my.animblend == jump || my.animblend == fall)
	{
		if (my.jumping_mode == 3) {my.animate = 80;}
		ent_animate(my,"jumpnew",my.animate,0);
		my.animate += 7 * animation_speed * time;
		my.currentframe = jump;
		if (my.animate >= 60 && my.jumping_mode == 1) {my.jumping_mode = 2;}
		if (my.animate >= 100)
		{
			ent_animate(my,"jumpnew",100,0);
			my.animate = 100;
			my.blendframe = stand;
			if (my.move_x != 0 || my.move_y != 0)
			{
				if (key_shift == 1) {my.blendframe = walk;}
				else {my.blendframe = run;}
			}
		}
	}
	
	
}


Re: *German* problem mit c_trace [Re: birkin] #219789
08/04/08 15:37
08/04/08 15:37
Joined: Aug 2003
Posts: 7,439
Red Dwarf
Michael_Schwarz Offline
Senior Expert
Michael_Schwarz  Offline
Senior Expert

Joined: Aug 2003
Posts: 7,439
Red Dwarf
weil du für die bewegung UND gravitation "glide" benutzt. Du musst 2 verschiedene c_moves machen, eines für die gravitation OHNE glide, und einen c_move für die bewegung des spielers, MIT glide


"Sometimes JCL reminds me of Notch, but more competent" ~ Kiyaku
Re: *German* problem mit c_trace [Re: Michael_Schwarz] #219882
08/05/08 11:58
08/05/08 11:58
Joined: Jun 2008
Posts: 11
B
birkin Offline OP
Newbie
birkin  Offline OP
Newbie
B

Joined: Jun 2008
Posts: 11
ok, danke für die schnelle antwort, prinzip is jetz klar, aber eine frage bleibt noch =)
muss das c_move an eine bestimmte stelle im script oder einfach nur in die graitationsfunktion unten dran?

Re: *German* problem mit c_trace [Re: birkin] #219891
08/05/08 13:19
08/05/08 13:19
Joined: Aug 2003
Posts: 7,439
Red Dwarf
Michael_Schwarz Offline
Senior Expert
Michael_Schwarz  Offline
Senior Expert

Joined: Aug 2003
Posts: 7,439
Red Dwarf
am besten direkt nach dem erstemn C-move, also da wo es jetzt schon ist. wenn du lust hast kannst du dir auch meinen kleinen artiekl über movement durchlesen : http://3dgsnerd.xware-cg.com/code-snippet-1/


"Sometimes JCL reminds me of Notch, but more competent" ~ Kiyaku
Re: *German* problem mit c_trace [Re: Michael_Schwarz] #220136
08/06/08 02:52
08/06/08 02:52
Joined: Jun 2008
Posts: 11
B
birkin Offline OP
Newbie
birkin  Offline OP
Newbie
B

Joined: Jun 2008
Posts: 11
ich habe mir den artikel mal angeschaut, und es auch mal mit einem 2. c_move ohne glide versucht. jedoch funktionierte es nicht =)
der fehler lag an den vectoren die ich verwendet habe.
weil wie in dem artikel wurden auch verschiedene vectoren verwendet. nur ich habe ja nur meinen einen move_x vector.
also nehme ich an mir fehlt nun der passende vektor, oder? leider verstehe ich auch nicht alles was in dem artikel steht, da mein englisch nicht so gut ist....
aber trotzdem schon mal danke es hat mir schon weitergeholfen, zumindest für das verständnis des scripts =P

Re: *German* problem mit c_trace [Re: birkin] #220230
08/06/08 14:21
08/06/08 14:21
Joined: Aug 2003
Posts: 7,439
Red Dwarf
Michael_Schwarz Offline
Senior Expert
Michael_Schwarz  Offline
Senior Expert

Joined: Aug 2003
Posts: 7,439
Red Dwarf
joa, du brauchst 2 vektoren, einen der fürs erste c_move ist, und einen zweiten der fürs 2 c_move ist. Der erste ist z.b. für die bewegung des spielers, und bie zweite für umwelteinflüsse, wie z.b.in dem beispiel die Gravitation.


"Sometimes JCL reminds me of Notch, but more competent" ~ Kiyaku
Re: *German* problem mit c_trace [Re: Michael_Schwarz] #220305
08/06/08 21:16
08/06/08 21:16
Joined: May 2008
Posts: 301
Oxy Offline
Senior Member
Oxy  Offline
Senior Member

Joined: May 2008
Posts: 301
Für eine gute Playerbewegung solltest Du Mindestens 4 Bewegungen machen:

Nach oben (bein hoch)
Nach vorne (Schritt nach vorn, wobei das Bein gehoben ist)
Nach unten (bein nach unten, wie ein Mensch so läuft)
Weiter nach unten bewegen, wenn das bein noch in der Luft hägt (gravitation, wenn Loch oder Abschüssige Steigung)

-> Wenn der Player im letzten Frame nach unten gefallen ist, und keinen Boden erreicht hat in der zeispanne, dann
blockieren die ersten drei Bewegungen.

So Kannst Du einen Player machen, der Treppen hochlaufen kann,
und in Löcher fällt, und vor allem: nicht bei kleinen
Steinchen oder kanten hängen bleibt.
Die Schritthöhe sollte ungefär die Hüfthöhe sein.
(oder Kniehöhe, je nachdem wie agil er sein soll)


Einzigstes Problem: der Player kannn so an die Decke Stoßen, ist also nur gut bei Outdoor leveln, für Indoor:

Mach die Kollisionshülle beim laufen nur
für den Oberkörper+ Kopf. Lasse den Player mit Traces
auf Hüfthöhe schweben.
Ist der Trach nach unten größer als die Hüfthöhe, las ihn fallen.
ist sie kleiner lass ihn steigen.


Glaub mir diese Beiden Lösungen sind besser als 90%
aller Movementskripte hier. (Inclusive den Movement skripten von IntenseX)

Die meisten Movementskripte sehen einen Menschen praktisch als Kasten mit kleinen Röllchen. Dadurch bleibt dieser natürlich leich hängen. Sieh den Spieler als eine Kollisionsentity
die aktiv eine Bewegung ausführt und automatisch kleineren Hindernissen ausweicht (nach unten und auch zur Seite).
Den beinaperat kannst du auch praktisch als "flexieblen leeren raum" sehen, Da beine sich leicht anpassen.



Last edited by Oxy; 08/06/08 21:24.
Re: *German* problem mit c_trace [Re: Oxy] #220403
08/07/08 08:53
08/07/08 08:53
Joined: Jun 2008
Posts: 11
B
birkin Offline OP
Newbie
birkin  Offline OP
Newbie
B

Joined: Jun 2008
Posts: 11
wow das prinzip klingt ja ma sehr cool, aber gibts dafür n tutorial oder sowas? weil meine bisherigen gamestudio erfahrungen dafür definitiv nicht reichen werden, um sowas ma eben aus kopf zu bauen...

und noch mal auf den vorherigen post zu antworten, was ist denn mein vector für die gravitation? weil eigentlich läuft ja alles bis jetz nur über den move_x,move_y,move_z - vector läuft, oder seh ich das falsch?

Re: *German* problem mit c_trace [Re: birkin] #220404
08/07/08 08:57
08/07/08 08:57
Joined: Aug 2003
Posts: 7,439
Red Dwarf
Michael_Schwarz Offline
Senior Expert
Michael_Schwarz  Offline
Senior Expert

Joined: Aug 2003
Posts: 7,439
Red Dwarf
define absSpeed_x,skill10;
define absSpeed_y,skill11;
define absSpeed_z,skill12;

der wäre es, nach meinem code, du kannst antürlich auch ne neue var erstellen

var absSpeed;


"Sometimes JCL reminds me of Notch, but more competent" ~ Kiyaku
Re: *German* problem mit c_trace [Re: Michael_Schwarz] #220508
08/07/08 13:15
08/07/08 13:15
Joined: Jun 2008
Posts: 11
B
birkin Offline OP
Newbie
birkin  Offline OP
Newbie
B

Joined: Jun 2008
Posts: 11
ja das hab ich jetz soweit aufe reihe bekommen, das prinzip is auch klar, nur was ich ma überhaupt nicht verstehe(und leider auch unter zuhilfenahme deines artikels nicht =) ) ist was dieser vector denn beinhaltet, weil ich muss dem vector ja ma irgendwie sagen welche x,y,z er hat. sorry wenn das n bissen nervig is, aber ich versteh leider nich was dieser vector beinhalten soll


Moderated by  HeelX, Spirit 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1