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, Quad, EternallyCurious, 1 invisible), 737 guests, and 6 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
Problem mit c_trace und c_move, bitte helfen #420306
03/22/13 21:48
03/22/13 21:48
Joined: Apr 2005
Posts: 274
austria
Ascalon Offline OP
Member
Ascalon  Offline OP
Member

Joined: Apr 2005
Posts: 274
austria
Also ich habe folgenden Code, siehe unten. Wenn ich mit dem Terrain kollidiere, werde ich ein Stück zurückgeworfen und kann dann wieder weiterfahren. Geprüft wird das über c_move und dem trace_hit. So weit so gut. Verwende ich jetzt aber noch gleichzeitig ein c_trace, wie in meinem Bsp. um die Distanz zum Boden zu messen, bekomme ich Probleme mit meinem Code, da durch das c_trace ja ständig der Boden getroffen wird und somit meine Kollision über c_move zunichte macht. Vielleicht sehe ich aber das Problem vor lauter Bäumen nicht mehr. Kann mir jemand dabei bitte helfen ?

Code:
while(player) {
		//Rotationen des U-Bootes
		my.pan -= rotationSpeed * mouse_force.x * time_step;
		my.tilt -= rotationSpeed * mouse_force.y * time_step;
		my.tilt = clamp(my.tilt,-20,20);
		
		
		if(trace_hit) {
			collision = 1;
		}		
		
		if(collision == 1) {
			//U-Boot wird zurückgeschleudert
			vecSubmarineMoveSpeed.x = -accelerate(actualSpeedForward, 0,0.4);
			vecSubmarineMoveSpeed.y = -accelerate(actualSpeedSideward, 0,0.4);
			vecSubmarineMoveSpeed.z = -accelerate(actualSpeedUpDown, 0,0.4);
			
			if(vecSubmarineMoveSpeed.x >= 0 && vecSubmarineMoveSpeed.x <= 0 && vecSubmarineMoveSpeed.y >=0 && vecSubmarineMoveSpeed.y <= 0 && vecSubmarineMoveSpeed.z >=0 && vecSubmarineMoveSpeed.z <= 0 ) {
				collision = 0;
			}
		} else {
			vecSubmarineMoveSpeed.x = accelerate(actualSpeedForward, 0.8*(key_w-key_s),0.04);
			vecSubmarineMoveSpeed.y = accelerate(actualSpeedSideward,0.08*(key_a-key_d),0.04);
			vecSubmarineMoveSpeed.z = accelerate(actualSpeedUpDown,0.4*(key_e-key_c),0.04);
		}
			
		c_move(my,vecSubmarineMoveSpeed,nullvector,0);
		distToGround = c_trace(my.x,vector(my.x,my.y,my.z - 10000), IGNORE_ME);

                wait(1);
}



my webside : www.ascalon.jimdo.de
Re: Problem mit c_trace und c_move, bitte helfen [Re: Ascalon] #420309
03/23/13 01:47
03/23/13 01:47
Joined: Apr 2005
Posts: 4,506
Germany
F
fogman Offline
Expert
fogman  Offline
Expert
F

Joined: Apr 2005
Posts: 4,506
Germany
Versuch mal das

if(trace_hit)
{
collision = 1;
}

direkt zwischen die c_move und die c_trace Anweisung zu setzen.

Edit: Das ist sowieso viel sicherer, da sich trace_hit mit jeder wait Anweisung ändern kann, beispielsweise durch andere Entities, die c_Anweisungen ausführen.

Last edited by fogman; 03/23/13 01:49.

no science involved
Re: Problem mit c_trace und c_move, bitte helfen [Re: fogman] #420311
03/23/13 08:15
03/23/13 08:15
Joined: Apr 2005
Posts: 274
austria
Ascalon Offline OP
Member
Ascalon  Offline OP
Member

Joined: Apr 2005
Posts: 274
austria
Ok, das hat geklappt, vielen dank ! Heißt das jetzt aber, wenn irgend eine andere Entity durch c_move ein trace_hit auslöst, dass das auch meinen Player betrifft ? Kann man das trace_hit nicht der jeweiligen c_move ausführung zuordnen ?


my webside : www.ascalon.jimdo.de
Re: Problem mit c_trace und c_move, bitte helfen [Re: Ascalon] #420321
03/23/13 13:10
03/23/13 13:10
Joined: Jul 2002
Posts: 3,208
Germany
Error014 Offline
Expert
Error014  Offline
Expert

Joined: Jul 2002
Posts: 3,208
Germany
"trace_hit auslösen" ist etwas unglücklich formuliert. Stell dir das lieber als eine globale Variable vor, die jede Funktion gleich ändert:

trace_hit wird von jeder c_move und c_trace - Anweisung in deinem Code verändert, auch wenn diese in anderen Funktionen schlummern. Daher ist nach einer c_move bzw. c_trace-Anweisung der Wert von trace_hit nur solange richtig, bis die nächste c_move oder c_trace-Anweisung ausgeführt wird. Man sollte diese Variablen nach einem wait (oder anderen c_move, c_trace-Anweisung) also nicht mehr nutzen.

Du musst also entweder alles, was du mit dem Wert von trace_hit machen möchtest vor dem nächsten wait/c_move/c_trace erledigen (daher das if(trace_hit).. direkt hinter die c_move setzen), oder den Wert in einer Variablen zwischenspeichern (wie du dsa letzendlich mit "collision" machst).


Dafür bieten sich Entity-Skills oder lokale Variablen an.


Perhaps this post will get me points for originality at least.

Check out Dungeon Deities! It's amazing and will make you happy, successful and almost certainly more attractive! It might be true!
Re: Problem mit c_trace und c_move, bitte helfen [Re: Error014] #420322
03/23/13 13:18
03/23/13 13:18
Joined: Apr 2005
Posts: 4,506
Germany
F
fogman Offline
Expert
fogman  Offline
Expert
F

Joined: Apr 2005
Posts: 4,506
Germany
In Deinem Fall ist das nun kein Problem mehr, da Du die Variable "collision" setzt. Solange die von keiner anderen Entity geändert wird, bist Du auf der sicheren Seite. Besser wäre es, wie von Error014 angemerkt, wenn Du dafür einen skill benutzt.


no science involved
Re: Problem mit c_trace und c_move, bitte helfen [Re: fogman] #420323
03/23/13 13:29
03/23/13 13:29
Joined: Apr 2005
Posts: 274
austria
Ascalon Offline OP
Member
Ascalon  Offline OP
Member

Joined: Apr 2005
Posts: 274
austria
wie soll das mit dem skill genau aussehen ? was ist der unterschied, ob ich einen skill verwende oder eine variable ? weil der skillwert sich auf die jeweilige entity bezieht ?


my webside : www.ascalon.jimdo.de
Re: Problem mit c_trace und c_move, bitte helfen [Re: Ascalon] #420325
03/23/13 13:50
03/23/13 13:50
Joined: Jul 2002
Posts: 3,208
Germany
Error014 Offline
Expert
Error014  Offline
Expert

Joined: Jul 2002
Posts: 3,208
Germany
Jede Entity hat von Haus aus 100 Skills - Variablen vom Typ "var". Außerdem hat sie noch ein paar andere Sachen, wie z.B. flags. Wenn du genauer wissen willst, was dich alles erwartet, schau doch mal in "atypes.h" nach - dort findest du die Definition der ENTITY-Struct (einfach nach "typedef struct ENTITY" suchen).

Da diese sowieso von der Engine für dich reserviert werden (ob du willst oder nicht), kannst du sie ja auch benutzen um den Speicher nicht zu verschwenden.

Du greifst auf die Dinger so zu:

Code:
my->skill1


in Lite-C kannst du auch my.skill1 schreiben, wenn du magst

(wobei my der Pointer ist, der auf die von dir gewünschte Entity zeigt - zB könntest du auch "player" verwenden).

Statt skill1 kannst du auch jede andere (ganze) Zahl bis 100 verwenden - Neat!

In deinem Fall kannst du also einfach "collision" durch einen (noch freien) Skill ersetzen (an den Pointer denken! Also zb collision durch player->skill20 ersetzen).
Welcher jetzt wirklich noch frei ist können wir ohne deinen Code zu sehen nicht wissen.

Last edited by Error014; 03/23/13 15:17. Reason: clarified wording

Perhaps this post will get me points for originality at least.

Check out Dungeon Deities! It's amazing and will make you happy, successful and almost certainly more attractive! It might be true!

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