Gamestudio Links
Zorro Links
Newest Posts
Blobsculptor tools and objects download here
by NeoDumont. 03/28/24 03:01
Issue with Multi-Core WFO Training
by aliswee. 03/24/24 20:20
Why Zorro supports up to 72 cores?
by Edgar_Herrera. 03/23/24 21:41
Zorro Trader GPT
by TipmyPip. 03/06/24 09:27
VSCode instead of SED
by 3run. 03/01/24 19:06
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
5 registered members (AndrewAMD, Nymphodora, Quad, TipmyPip, Imhotep), 852 guests, and 5 spiders.
Key: Admin, Global Mod, Mod
Newest Members
sakolin, rajesh7827, juergen_wue, NITRO_FOREVER, jack0roses
19043 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Sprinten mit Ausdauer - Denkfehler ? #408228
09/27/12 17:47
09/27/12 17:47
Joined: Jul 2010
Posts: 974
United Arab Emirates, Dubai
TheShooter Offline OP
User
TheShooter  Offline OP
User

Joined: Jul 2010
Posts: 974
United Arab Emirates, Dubai
Hi Leute,
in mein Script hat sich ein Denkfehler eingeschlichen. Ich möchte, dass mein Spieler nicht mehr sprinten kann, sobald die Ausdauervariable auf null fällt. Dies sollte sich dann natürlich wieder generieren. Geh- und Sprintsounds sollten auch funktionieren.

Mein Code bisher:
Code:
void moveplayer()
{
	var speed_down;
	VECTOR vFeet;
	
	move_min_z = -1;
	
	while(1)
	{
		my.pan -= mouse_force.x *20 *time_step;
		camera.tilt += mouse_force.y *20 *time_step;
		camera.tilt = clamp(camera.tilt,-90,90);
		
		var dist_down;
		if (c_trace(my.x,vector(my.x,my.y,my.z-5000),IGNORE_ME | IGNORE_PASSABLE | USE_POLYGON) > 0)
		dist_down = my.z + vFeet.z - target.z;
		else
		dist_down = 0;
		if(dist_down > 0)
		dist_down = clamp(dist_down,0,accelerate(speed_down,2,0.1));
		else
		speed_down = 0;
		
		
		
		
		
		var dist_ahead = 1*(key_w-key_s)*time_step;
		var dist_side = 1*(key_a-key_d)*time_step;
		var dist_sprint = 2* (key_w && key_shift) *time_step;
		move_min_z = 500;
		c_move(me,vector(dist_ahead,dist_side,0),vector(0,0,0), IGNORE_ME | IGNORE_PASSABLE | USE_POLYGON | GLIDE);
		c_move(me,vector(0,0,0),vector(0,0,-dist_down), IGNORE_ME | IGNORE_PASSABLE | USE_POLYGON | GLIDE);
		
		
		if(sprint_v > 2 && c_move(me,vector(dist_sprint,0,0),vector(0,0,0), IGNORE_ME | IGNORE_PASSABLE | USE_POLYGON | GLIDE))
		{
			sprint_act = 1;
			sprint_v = sprint_v -0.7 *time_step;
		}
		else
		sprint_act = 0;
		
		if(sprint_act == 0)
		{
			sprint_v = clamp(sprint_v,0,100);
			sprint_v = sprint_v +0.3 *time_step;
		}
		
		wait(1);
	}
	
}

function walksound()
{
	while(1)
	{
		while(sprint_act == 0 && key_w || key_a || key_s || key_d )
		{
			snd_play(walk_leaves01_snd,100,50);
			wait(45);
			snd_play(walk_leaves02_snd,100,50);
			wait(35);
		}
		while(sprint_act == 1 && key_w && key_shift)
		{
			snd_play(walk_leaves01_snd,100,50);
			wait(22);
			snd_play(walk_leaves02_snd,100,50);
			wait(22);
		}
		wait(1);
	}
}



Ich habe wirklich schon alles versucht, jedoch komme ich auf keine Lösung.

MfG,
TheShooter

PS:
sprint_v ist zuständig für die Ausdauer
sprint_act dient als Schalter fürs Rennen/Nicht Rennen bei z.B. der Soundfunktion

Ich habe mal die Variablen während der Laufzeit anzeigen lassen, und sprint_v kommt nie unter 2 (wie auch), dabei springt sprint_act dauernd zwischen 0 und 1 hin und her.

Last edited by TheShooter; 09/27/12 17:53.

Staub ist das neue Prime!!

Programming is like sex:
One mistake and you have to support it for the rest of your life.

Aktuelles Projekt: http://thisiswargame.bplaced.net/index.html

A8 Commercial *freu*
Re: Sprinten mit Ausdauer - Denkfehler ? [Re: TheShooter] #408232
09/27/12 19:33
09/27/12 19:33
Joined: Oct 2011
Posts: 1,082
Germany
C
Ch40zzC0d3r Offline
Serious User
Ch40zzC0d3r  Offline
Serious User
C

Joined: Oct 2011
Posts: 1,082
Germany
Vielleicht solltest du energie nur aufladen wenn man nicht sprintet.

Re: Sprinten mit Ausdauer - Denkfehler ? [Re: Ch40zzC0d3r] #408233
09/27/12 19:51
09/27/12 19:51
Joined: Jul 2010
Posts: 974
United Arab Emirates, Dubai
TheShooter Offline OP
User
TheShooter  Offline OP
User

Joined: Jul 2010
Posts: 974
United Arab Emirates, Dubai
Mhh, mach ich doch, oder etwa nicht?

Code:
if(sprint_v > 2 && c_move(me,vector(dist_sprint,0,0),vector(0,0,0), IGNORE_ME | IGNORE_PASSABLE | USE_POLYGON | GLIDE))
		{
			sprint_act = 1;
			sprint_v = sprint_v -0.7 *time_step;
		}
		else
		sprint_act = 0;
		
		if(sprint_act == 0)
		{
			sprint_v = clamp(sprint_v,0,100);
			sprint_v = sprint_v +0.3 *time_step;
		}



Wenn sprint_act null entspricht wird die Energie aufgeladen. (Siehe else)

Mach ich da was falsch? Zeigt mir ruhig meine Fehler auf. grin

Beste Grüße,
TheShooter


Staub ist das neue Prime!!

Programming is like sex:
One mistake and you have to support it for the rest of your life.

Aktuelles Projekt: http://thisiswargame.bplaced.net/index.html

A8 Commercial *freu*
Re: Sprinten mit Ausdauer - Denkfehler ? [Re: TheShooter] #408254
09/28/12 08:15
09/28/12 08:15
Joined: Feb 2005
Posts: 3,687
Hessen, Germany
T
Tempelbauer Offline
Expert
Tempelbauer  Offline
Expert
T

Joined: Feb 2005
Posts: 3,687
Hessen, Germany
Hiermit sprintet er solange sprint_v > 2, danach läuft er normal weiter bis du shift wieder loslässt und er sich regeneriert. Ist es das was du willst?
Code:
if(sprint_v > 2 )
{
	if(c_move(me,vector(dist_sprint,0,0),vector(0,0,0), IGNORE_ME | IGNORE_PASSABLE | USE_POLYGON | GLIDE) > 0)
	{
		sprint_act = 1;
		sprint_v = sprint_v -0.7 *time_step;
	}
	
}
else
	sprint_act = 0;

if(sprint_act == 0)
{
	sprint_v = clamp(sprint_v,0,100);
	sprint_v = sprint_v +0.3 *time_step;
}


Dass sprint_act hin und herspringt ist logisch:
runde 1 (sprint_act ist 0): sprint_v ist größer 2: du springst in die if und reduzierst sprint_v auf <= 2 und setzt sprint_act = 1. zweite if wird übersprungen weil sprint_act nicht 0 ist
runde 2 (sprint_act ist 1): sprint_v ist <= 2, damit geht er in die else und setzt sprint_act auf 0. er geht in die zweite if und erhöht sprint_v (nach 2 oder 3 durchläufen auf > 2)
und das spielt geht von vorne los.
zum checken of der spieler sprintet (für die soundausgabe) würde ich da lieber direkt sprint_v benutzen. da kannst du ja direkt sehen ob er sprinted oder nicht und musst keinen flag aktuell halten (was in deinem fall sowiso nicht geht, da er hin und herspringt)

Re: Sprinten mit Ausdauer - Denkfehler ? [Re: Tempelbauer] #408532
10/03/12 12:53
10/03/12 12:53
Joined: Jul 2010
Posts: 974
United Arab Emirates, Dubai
TheShooter Offline OP
User
TheShooter  Offline OP
User

Joined: Jul 2010
Posts: 974
United Arab Emirates, Dubai
Leider funktioniert dein Code nicht so, wie ich mir das vorstelle. Wenn ich mit z.B. 50 sprint_v aufhöre zu sprinten, regeneriert sich die Ausdauer nicht. Außerdem sprint sprint_act ebenfalls hin und her, wenn ich sprint_v = 2 erreicht habe.
ich stelle mir das so vor:

Ich kann solange sprinten, bis sprint_v auf null ist. Während des Sprintvorgangs wird sprint_act = 1 gesetzt, um später z.B. den Sound damit zu managen. Wenn die komplette Ausdauer verbraucht ist, sollte die Figur aufhören zu sprinten, und sprint_act = 0 sollte gesetzt werden. Wenn die Figur mit z.B. sprint_v = 50 aufhört zu sprinten, sollte sich die Ausdauer ebenfalls regenerieren.
Ich habe mich nocheinmal versucht:
Code:
//dist sprint ist der Sprintvektor
if(sprint_v > 1 && key_shift && key_w)
		{
			c_move(me,vector(dist_sprint,0,0),vector(0,0,0), IGNORE_ME | IGNORE_PASSABLE | USE_POLYGON | GLIDE);
			
			sprint_act = 1;
			sprint_v = sprint_v -0.7 *time_step;
		}
		else
		{
			sprint_act = 0;
			dist_sprint = 0;
			sprint_v = clamp(sprint_v,0,100);
			sprint_v = sprint_v +0.3 *time_step;
		}



Das scheint verzwickt zu sein, da das obige ebenfalls nicht richtig funktioniert. Die Regeneration funktioniert zwar, allerdings sprint sprint_act wieder wild umher wenn sprint_v = 1 erreicht ist. Was halt einen ziemlichen Performanceverlust mit sich bringt, da ja ständig sprint_act hin und her geändert wird, sprich, die Bewegung des Spielers gerät ins stocken. (Die FPS sagen allerdings was anderes, liegt wohl an time_step)

Viele Grüße, und einen schönen Tag Der Deutschen Einheit,
TheShooter

Last edited by TheShooter; 10/03/12 12:56.

Staub ist das neue Prime!!

Programming is like sex:
One mistake and you have to support it for the rest of your life.

Aktuelles Projekt: http://thisiswargame.bplaced.net/index.html

A8 Commercial *freu*

Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

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