Gamestudio Links
Zorro Links
Newest Posts
Data from CSV not parsed correctly
by EternallyCurious. 04/25/24 10:20
Trading Journey
by howardR. 04/24/24 20:04
M1 Oversampling
by Petra. 04/24/24 10:34
Zorro FIX plugin - Experimental
by flink. 04/21/24 07:12
Scripts not found
by juergen_wue. 04/20/24 18:51
zorro 64bit command line support
by 7th_zorro. 04/20/24 10:06
StartWeek not working as it should
by jcl. 04/20/24 08:38
folder management functions
by VoroneTZ. 04/17/24 06:52
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
4 registered members (AndrewAMD, SBGuy, Petra, flink), 738 guests, and 8 spiders.
Key: Admin, Global Mod, Mod
Newest Members
Mega_Rod, EternallyCurious, howardR, 11honza11, ccorrea
19048 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 2 1 2
Code funktioniert nicht wie er soll #401396
05/18/12 15:05
05/18/12 15:05
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,
ich arbeite gerade an einem neuen Projekt, und erstelle gerade den Movementcode. Allerdings bleibt das Spielermodell in der Luft, fällt also nicht zu Boden. Hier meine Schwerkraftfunktion:

Code:
function schwerkraft()
{
	while(1){
	if (c_trace(my.x, vector(my.x,my.y,my.z-100000000), IGNORE_ME | IGNORE_PASSABLE | USE_POLYGON) >0)
		distanz_zum_boden = my.z + vFuesse.z - target.z;
	else
		distanz_zum_boden = 0;
		
	if (distanz_zum_boden > 0)
		distanz_zum_boden = clamp(distanz_zum_boden,0,accelerate(fallgeschwindigkeit,5,0.1));
	else
		fallgeschwindigkeit = 0;
		wait(1);
	}
	
}



Und hier mein ganzer Code, der dem Spielermodell zugewiesen ist:
Code:
var fallgeschwindigkeit = 0;
var distanz_zum_boden;
VECTOR vFuesse;
vec_for_min(vFuesse,me);

function kamera()
{
	while(1){
	camera.x = my.x;
	camera.y = my.y;
	camera.z = my.z;
	camera.pan = my.pan;
	wait(1);
	}
}

function schwerkraft()
{
	while(1){
	if (c_trace(my.x, vector(my.x,my.y,my.z-100000000), IGNORE_ME | IGNORE_PASSABLE | USE_POLYGON) >0)
		distanz_zum_boden = my.z + vFuesse.z - target.z;
	else
		distanz_zum_boden = 0;
		
	if (distanz_zum_boden > 0)
		distanz_zum_boden = clamp(distanz_zum_boden,0,accelerate(fallgeschwindigkeit,5,0.1));
	else
		fallgeschwindigkeit = 0;
		wait(1);
	}
	
}

function bewegen()
{
	while(1){
	my.pan += 2*(key_a-key_d)*time_step; 
	wait(1);
	}
	
}


action spieler()
{
	kamera();
	schwerkraft();
	bewegen();
}



Alles andere funktioniert, alles bis auf die "Schwerkraft".

Danke schonmal im Voraus,
TheShooter laugh


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: Code funktioniert nicht wie er soll [Re: TheShooter] #401397
05/18/12 15:21
05/18/12 15:21
Joined: Mar 2006
Posts: 1,993
Karlsruhe
PadMalcom Offline
Serious User
PadMalcom  Offline
Serious User

Joined: Mar 2006
Posts: 1,993
Karlsruhe
Du bewegst ja dein Modell auch nirgends mittels c_move laugh

Außerdem solltest du nicht so krass tracen, das geht auf die Performance. Check mal ob nicht eine Distanz von 1000 Quants reicht.

Re: Code funktioniert nicht wie er soll [Re: PadMalcom] #401399
05/18/12 15:38
05/18/12 15:38
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
Natürlich. grin Jetzt klappts, danke. laugh Die Quants beim tracen habe ich nur erhöht, da ich mir nicht sicher war, ob der trace auch wirklich am Boden ankommt.

Vielen Dank! laugh

€: Allerdings bewege ich mich jetzt viel zu schnell, aber ich kann keine Variablen verkleinern, um langsamer zu werden.

Code:
function bewegen()
{
	while(1){
		var distanz_vorne = 5*(key_w-key_s)*time_step;
		distanz_vorne = sign(distanz_vorne)*(abs(distanz_vorne) + 0.5*fallgeschwindigkeit);
		c_move(me,vector(distanz_vorne,0,0),vector(0,0,-fallgeschwindigkeit), IGNORE_PASSABLE | GLIDE);
		my.pan += 2*(key_a-key_d)*time_step; 
		wait(1);
	}
	
}



€: mhh, wenn ich die ersten sekunden falle, falle ich langsam. Nach ca. 3 Sekunden aber falle ich mit einem Affenzahn nach unten. Was habe ich falsch gemacht?

Last edited by TheShooter; 05/18/12 15:59.

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: Code funktioniert nicht wie er soll [Re: TheShooter] #401405
05/18/12 16:54
05/18/12 16:54
Joined: Mar 2006
Posts: 1,993
Karlsruhe
PadMalcom Offline
Serious User
PadMalcom  Offline
Serious User

Joined: Mar 2006
Posts: 1,993
Karlsruhe
Geschwindigkeit: Verringere die Distanz mit der du dich bewegst (z.B. indem du den Faktor 5 durch eine 2 ersetzt).

Beschleunigung: Dass du schneller fällst hast du doch selber gecoded, mit der Funktion accelerate beschleunigst du deinen freien Fall. Sieht so aus als hättest du das Beispiel aus dem Manual abgetippt, dann solltest du auch mal die Kommentare lesen die dabeistehen wink

Re: Code funktioniert nicht wie er soll [Re: PadMalcom] #401408
05/18/12 16:58
05/18/12 16:58
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
Das habe ich natürlich schon versucht. Ich habe jetzt die Tracedistanz auf 1 gesetzt, und jetzt funktioniert alles wunderbar. Sehr komisch...


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: Code funktioniert nicht wie er soll [Re: TheShooter] #401417
05/18/12 21:45
05/18/12 21:45
Joined: Mar 2006
Posts: 1,993
Karlsruhe
PadMalcom Offline
Serious User
PadMalcom  Offline
Serious User

Joined: Mar 2006
Posts: 1,993
Karlsruhe
Sollte es nicht, die trace-distance hat damit absolut nichts zu tun.

Re: Code funktioniert nicht wie er soll [Re: PadMalcom] #401438
05/19/12 12:33
05/19/12 12:33
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
Das ist mir auch klar, nur weiß ich nicht wo das Problem liegen sollte. :S
Hier nochmal der komplette Code:

Code:
var fallgeschwindigkeit = 0;
var distanz_zum_boden;
VECTOR vFuesse;
vec_for_min(vFuesse,me);

function kamera()
{
	while(1){
		vec_set(camera.x,my.x);
		vec_set(camera.y,my.y);
		camera.z = my.z+45;
		camera.pan = my.pan;
		wait(1);
	}
}

function schwerkraft()
{
	while(1){
		if (c_trace(my.x, vector(my.x,my.y,my.z-1), IGNORE_ME | IGNORE_PASSABLE) >0)
		
			
			distanz_zum_boden = my.z + vFuesse.z - target.z;
		
		else
		
		distanz_zum_boden = 0;
		
		
		if (distanz_zum_boden > 0)
		
		
		distanz_zum_boden = clamp(distanz_zum_boden,0,accelerate(fallgeschwindigkeit,5,0.1));
		c_move(my,nullvector,vector(0,0,-5), IGNORE_PASSABLE | GLIDE);
		
		//else
		//{
			//	fallgeschwindigkeit = 0;
		//}
		
		
		
		wait(1);
	}

}

function bewegen()
{
	while(1){
		if(distanz_zum_boden <1){
			
			var distanz_vorne = 15*(key_w-key_s)*time_step;
			var distanz_seite = 7*(key_a-key_d)*time_step;
			distanz_vorne = sign(distanz_vorne)*(abs(distanz_vorne) + 0.5*fallgeschwindigkeit);
			distanz_seite = sign(distanz_seite)*(abs(distanz_seite) + 0.5*fallgeschwindigkeit);
			c_move(me,vector(distanz_vorne,0,0),vector(0,0,-fallgeschwindigkeit), IGNORE_PASSABLE | GLIDE | USE_BOX);
			c_move(me,vector(0,distanz_seite,0),vector(0,0,-fallgeschwindigkeit), IGNORE_PASSABLE | GLIDE | USE_BOX);
			my.pan += 1.3*(-mickey.x)*time_step; 
			camera.tilt += 1.3*(-mickey.y)*time_step;
			
			
		}
		else
		{
			beep();
		}
		wait(1);
	}

}


action spieler()
{
	wait(3);
	set(me, INVISIBLE);
	kamera();
	schwerkraft();
	bewegen();
}




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: Code funktioniert nicht wie er soll [Re: TheShooter] #401444
05/19/12 14:56
05/19/12 14:56
Joined: Apr 2008
Posts: 245
GameScore Offline
Member
GameScore  Offline
Member

Joined: Apr 2008
Posts: 245
probier mal das,
ist von einem aus dem forum hier


Code:
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////

VECTOR force;
VECTOR dist;
VECTOR absdist;
VECTOR speed_xyz;
VECTOR old_mypos;

//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////

var my_height;
var jump_time = 1;
var jump_height = 55;
var speed_z = 0;
var fall_damage = 0;
var bit_press[10];
var damage;

//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////

#define health skill1

//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////

SOUND* damage_snd = "damage_snd.wav";
SOUND* death_snd = "death_snd.wav";

//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////

function main()
{
	fps_max = 75;
	fps_lock = 1; // NEEDED FOR PROPER WORK
	level_load("1.WMB");
	wait(3);
}

//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////

function handle_camera()
{
	camera.arc = 90;
	vec_lerp(camera.x,camera.x,vector(my.x,my.y,my.z + 50),0.5);
	my.pan = camera.pan;
	camera.pan -= 10 * mouse_force.x * time_step;
	camera.tilt += 10 * mouse_force.y * time_step;
	camera.tilt = clamp(camera.tilt,-80,80);
}

function handle_jump()
{
	proc_kill(1); 
	jump_time = 1;
	while (jump_time > -1 && player.health > 0)
	{
		on_space = NULL;
		absdist.z = jump_height * time_step * jump_time;
		jump_time -= 0.2 * time_step;
		wait (1);
	}
	while (my_height > 10) {wait (1);}
	jump_time = 1;
}

function handle_movement()
{
	if(my_height <= 10)
	{
		if(jump_time == 1){on_space = handle_jump;}
		if(!key_shift)
		{
			force.x = 10 * (key_w - key_s) * time_step;
			accelerate(dist.x,force.x,0.5);
			force.y = 10 * (key_a - key_d) * time_step;
			accelerate(dist.y,force.y,0.5);
		}
		else
		{
			force.x = 10 * (key_w - key_s) * time_step;
			accelerate(dist.x,force.x,1);
			force.y = 10 * (key_a - key_d) * time_step;
			accelerate(dist.y,force.y,1);
		}
	}
}

function handle_gravity()
{
	my_height = c_trace(my.x,vector(my.x,my.y,my.z - 1000),IGNORE_ME|IGNORE_FLAG2|IGNORE_PASSABLE|USE_POLYGON|USE_BOX);
	if(my_height > 10)
	{
		accelerate(absdist.z,-10 * time_step,-0.1);
	}
	else
	{
		if(jump_time == 1)
		{
			absdist.z = -(my_height/1.2) + 5;
			absdist.z = clamp(absdist.z,-5,5);
			if((my_height + absdist.z) > 10){absdist.z = -my_height -10;}
		}
	}
	vec_set(old_mypos,my.x); // NEEDED FOR PROPER WORK
}

function handle_falldamage()
{
	vec_diff(speed_xyz,my.x,old_mypos);
	speed_z = abs(speed_xyz.z) * time_step;
	if(speed_z > 3.5) // PLAY WITH 3.5 TO CUSTOMIZE THE HEIGHT
	{
		fall_damage += speed_z * time_step;
	}
	if(speed_z <= 1 && fall_damage != 0 && my_height <= 10)
	{
		my.health -= fall_damage * 4 + random(4); // PLAY WITH 4 TO CUSTOMIZE DAMAGE
		damage = 1;
		fall_damage = 0;
	}
	if(damage == 1 && fall_damage == 0 && my_height <= 10)
	{
		if(bit_press[0] == 0 )
		{
			snd_play(damage_snd,100,0);
			bit_press[0]= 1;
		}
		damage = 0;
	}
	else
	{
		bit_press[0]= 0;
	}
}

function handle_death()
{
	snd_play(death_snd,100,0);
   while(1)
	{
		if(my_height <= 10){vec_set(dist,nullvector);}
		handle_gravity(); // GRAVITY
		c_move(my,dist,absdist,IGNORE_PASSABLE|GLIDE);
		camera.arc = 90;
		vec_lerp(camera.x,camera.x,vector(my.x,my.y,my.z),0.5);
		my.pan = camera.pan;
		camera.pan -= 10 * mouse_force.x * time_step;
		camera.tilt += 10 * mouse_force.y * time_step;
		camera.tilt = clamp(camera.tilt,-80,80);	   
		wait(1);
	}
}

action hero()
{
	player = my;
	set(my,INVISIBLE);
	my.health = 100; // SET PLAYERS HEALTH TO 100 
	while(my.health > 0)
	{
		handle_movement(); // MOVEMENT
		handle_gravity(); // GRAVITY
		c_move(my,dist,absdist,IGNORE_PASSABLE|GLIDE);
		handle_falldamage(); // FALL DAMAGE FUNCTION
		handle_camera(); // CAMERA
		wait(1);
	}
	handle_death();
}

//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////

PANEL* gui_ =
{
	digits(10,0,4,"Arial#24bi",1,player.skill1); 
	flags = SHOW;
}



Re: Code funktioniert nicht wie er soll [Re: GameScore] #401447
05/19/12 15:03
05/19/12 15:03
Joined: Mar 2006
Posts: 1,993
Karlsruhe
PadMalcom Offline
Serious User
PadMalcom  Offline
Serious User

Joined: Mar 2006
Posts: 1,993
Karlsruhe
Du rufst 2x c_move hintereinander auf, warum? Du könntest distanz_seite einfach ins erste move mit integrieren indem du die 0 im ersten vektor dadurch ersetzt.

Versuche immer zu verstehen was du da schreibst, durch einfaches Probieren kommt man in der Mathematik oft nicht sehr weit wink Das Beispiel aus dem Manual ist klasse, hangel dich mal daran entlang.

Re: Code funktioniert nicht wie er soll [Re: PadMalcom] #401449
05/19/12 15:29
05/19/12 15:29
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
Oh, das habe ich nicht bemerkt. Aber leider löst das noch immer nicht das trace-problem. Aber ich habe etwas komisches herausgefunden. Wenn ich die Tracereichweite auf z.B. -100 setze, so kann ich mich überhaupt nicht mehr bewegen/umsehen. Wenn ich allerdings im folgendem Code in der If-Clause "Distanz_zum_Boden" auf "<101" setze, funktioniert alles wieder.
Code:
if(distanz_zum_boden < 1){
			
			var distanz_vorne = 15*(key_w-key_s)*time_step;
			var distanz_seite = 7*(key_a-key_d)*time_step;
			distanz_vorne = sign(distanz_vorne)*(abs(distanz_vorne) + 0.5*fallgeschwindigkeit);
			distanz_seite = sign(distanz_seite)*(abs(distanz_seite) + 0.5*fallgeschwindigkeit);
			c_move(me,vector(distanz_vorne,distanz_seite,0),vector(0,0,-fallgeschwindigkeit), IGNORE_PASSABLE | GLIDE | USE_BOX);
			my.pan += 1.3*(-mickey.x)*time_step; 
			camera.tilt += 1.3*(-mickey.y)*time_step;
			
			
		}



Nur leider bin ich zu beschränkt, um das Problem alleine zu lösen. Ich glaube ich verstehe nicht so ganz, wie Vektoren funktionieren.

Es scheint so, als wenn der trace irgendwie nicht den Boden treffen würde, und die höhe anhand der Tracedistanz setzen würde. Oder liege ich falsch?

Last edited by TheShooter; 05/19/12 15:55.

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*
Page 1 of 2 1 2

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