Gamestudio Links
Zorro Links
Newest Posts
AlpacaZorroPlugin v1.3.0 Released
by kzhao. 05/20/24 20:05
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
1 registered members (7th_zorro), 1,300 guests, and 3 spiders.
Key: Admin, Global Mod, Mod
Newest Members
Hanky27, firatv, wandaluciaia, Mega_Rod, EternallyCurious
19051 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 2 1 2
physX_open #349477
12/07/10 23:03
12/07/10 23:03
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline OP
Senior Expert
Superku  Offline OP
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Ich weiß nicht, ob es Absicht ist, aber der Algorithmus im Manual unter physX_open ist ein anderer als der, der tatsächlich implementiert ist.

Manual:
Click to reveal..
Code:
function physX_level_load()
{
  if (level_ent)
    pXent_settype(level_ent,PH_STATIC,PH_POLY);
  for (you = ent_next(NULL); you; you = ent_next(you))
  { 
    if (you.emask&DYNAMIC) continue;  // only register static ents
    if (you.flags&PASSABLE) continue;	    var type = ent_type(you);
    if (type >= 2 && type <= 5)  // blocks, models, or terrain
      pXent_settype(you,PH_STATIC,PH_POLY);
  }
}

function physX_ent_remove(ENTITY* ent)
{
  if (ent.body) // unregister entity before removal
    pXent_settype(ent,0,0);
}

function physX_open()
{
  physX_load();
  pX_setsteprate(60,8,0);
  pX_setunit(1/40);

  on_exit = physX_destroy;
  on_level_load = physX_level_load;
  on_ent_remove = physX_ent_remove;
 
  while(1) {
    physX_run(time_step/16);
    wait(1);
  }
}



In ackphysX.h:

Click to reveal..
Code:
function physX_level_load()
{
	if (!NxPhysicsSDK) return;
	if (level_ent)
		pXent_settype(level_ent,PH_STATIC,PH_POLY);
	for (you = ent_next(NULL); you; you = ent_next(you))
	{ 
		if (you.flags & PASSABLE) continue;	
		var type = ent_type(you);
		if (type == 5 && (you.emask & DYNAMIC)) continue;	// only register static models
		if (type < 2 && type > 5)  continue; // blocks, models, or terrain only
		pXent_settype(you,PH_STATIC,PH_POLY);
 	}
	on_level_load_px();
}

function physX_ent_remove(ENTITY* ent)
{
	if (!NxPhysicsSDK) return;
	if (ent.body)
		pXent_settype(ent,0,0);
	on_ent_remove_px(ent);
}

function physX_open()
{
	if (NxPhysicsSDK) return; // already initialized
	if (version < 8) {
		error("PhysX only supported in A8!");
		return;
	}
	if (level_ent) // level already loaded?
		error("Open PhysX before loading level!");
		
	NxPhysicsSDK = physX_load();
  NxScene = physX_run(0);
	pX_setsteprate(60,8,0);
	pX_setunit(1/40);

	on_exit_px = on_exit;	// store previous on_exit function
	on_exit = physX_close;
	on_level_load_px = on_level_load;
	on_level_load = physX_level_load;
	on_ent_remove_px = on_ent_remove;
	on_ent_remove = physX_ent_remove;

	while(NxPhysicsSDK) {
#ifdef FIXED_TIME
//This for-loop fixes the physX framerate to 60 when the frame rate is below 60 fps
		int loc_n = integer(time_step * 60 / 16) + 1;
		int loc_i = 0;
		if (freeze_mode <= 0)		
			for (; loc_i < loc_n; loc_i++)
			   physX_run(0);
#else
		if (freeze_mode <= 0)		
			physX_run(time_step/16);
#endif
		wait(1);
	}	
}



Was das ausmacht? Ich habe, da ich meine physX_level_load-Funktion anpassen musste, natürlich das Code-Beispiel aus dem Manual genommen und mich gewundert, warum das Spiel bei manchen Level-Wechseln abstürzte.

EDIT: Wenn ich in meinem Level PH_CHAR-Entities (BOX oder CAPSULE) registriere, erhalte ich einen invalid pointer/ handle im eigentlichen physX_open (oder meiner eigenen Funktion), wenn ich sie wieder aus der Physik-Registrierung löschen möchte (ganz mit settype(0,0) oder temporär mit enable(0)).
PH_CAR-Entities bekommen keinen entity.body-Physik-Pointer zugewiesen, korrekt?

Last edited by Superku; 12/09/10 18:05.

"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: physX_open [Re: Superku] #349632
12/09/10 18:02
12/09/10 18:02
Joined: Jul 2000
Posts: 27,986
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,986
Frankfurt
Ja, das ist Absicht. Im Handbuch sind stets die grundlegenden Algorithmen beschrieben. Der echte Code einer Funktion ist oft komplizierter, wenn z.B. Sonderfälle berücksichtigt werden. Der echte Code ändert sich auch mal, der Algorithmus bleibt immer gleich.

Alle Codebeispiele im Handbuch wurde aber getestet und funktionieren. Ihre Abstürze hängen also vermutlich mit etwas anderem zusammen.

Re: physX_open [Re: jcl] #349633
12/09/10 18:05
12/09/10 18:05
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline OP
Senior Expert
Superku  Offline OP
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Ok, ich bumpe hiermit, damit Sie auf die Änderung aufmerksam werden.

EDIT: Funktioniert EVENT_FRICTION mit physX? Bei mir scheint kein Event ausgelöst zu werden.

Last edited by Superku; 12/09/10 18:15.

"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: physX_open [Re: Superku] #349680
12/10/10 09:26
12/10/10 09:26
Joined: Jul 2000
Posts: 27,986
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,986
Frankfurt
Events sind im Handbuch beschrieben. Schauen Sie sich die Beispiele für Physik- und andere Events an - vor allem in den Samples, z.B. im Earthball sample.

Das Problem mit dem Releasen von PH_CHAR schauen wir uns an.

Re: physX_open [Re: jcl] #349691
12/10/10 12:56
12/10/10 12:56
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline OP
Senior Expert
Superku  Offline OP
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
"z.B. im Earthball sample."

Hat mir geholfen und funktioniert jetzt, danke. Nur scheint der you-Pointer nicht in der event-Funktion gesetzt zu werden, wenn (event_type == EVENT_FRICTION) gilt.
Das Problem wurde bereits im Mai von Uhrwerk angemerkt:

Originally Posted By: Uhrwerk
It would be nice if the you pointer was set to the entity the entity receiving EVENT_FRICTION collided with, respectively to NULL when a collision with level geometry occurs.

Originally Posted By: Sie
The you pointer is set in a friction event AFAIK, although this is not explicitly mentioned in the manual.

Ich kann, wie bereits gesagt, jedoch nicht bestätigen, dass der Pointer beim Auslösen des Events gesetzt wird (Entity-Entity-Kollision, per pXent_setcollisionflag(ent1,ent2,NX_NOTIFY_ON_TOUCH) gesetzt).


Um noch einmal auf das Manual zurückzukommen:
Unter dem Eintrag "PhysX Fragen" gibt es folgenden Punkt:
Quote:
F: Wie kann ich die Bewegung auf zwei Dimensionen beschränken?
A: Sie können entweder zwei unsichtbare Hindernisebenen verwenden und so die Bewegungsmöglichkeit in der dritten Dimension vermeiden. Oder aber Sie messen die Position eines Objektes in der dritten Dimension und bringen proportional zur Ablenkung von der gewünschten Ebene eine kleine Kraft an.

Beim raschen Durchsehen der ackphysX.h ist mir folgendes Flag aufgefallen:

pXent_setbodyflag(entity,NX_BF_FROZEN_POS_Y,1);

Da es bei mir sehr gut zu funktionieren scheint, wäre es meiner Meinung nach angebracht, diese einfache, aber versteckte Möglichkeit im Manual zu erwähnen.


EDIT: Setze ich im SED mittels [STRG]+[0..9] eine Marke, was um einiges komfortabler ist als die gewöhnlichen "Bookmarks", so werden diese leider beim Verlassen des Skriptes nicht gespeichert.

Last edited by Superku; 12/10/10 13:45.

"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: physX_open [Re: Superku] #350422
12/15/10 22:49
12/15/10 22:49
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline OP
Senior Expert
Superku  Offline OP
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Im derzeitigen (deutschen) Manual wird die Funktion http_post aufgeführt und beschrieben, SED erkennt diesen Befehl auch (Rotfärbung).
Dieser wurde jedoch anscheinend, da der Compiler die Funktion nicht kennt, umbenannt in http_sendpost, wie dem Online-Manual zu entnehmen ist.


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: physX_open [Re: Superku] #350462
12/16/10 10:58
12/16/10 10:58
Joined: Jul 2000
Posts: 27,986
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,986
Frankfurt
Gut erkannt!

- Wir haben das PH_CHAR Problem überprüft, aber kein Problem festgestellt. Tritt das mit der aktuellen Version auf? Können Sie ein Beispiel posten?

Re: physX_open [Re: jcl] #351078
12/21/10 17:22
12/21/10 17:22
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline OP
Senior Expert
Superku  Offline OP
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Oh, die PH_CHAR-Änderung hatte ich leider übersehen.
Das Problem tritt auch mit der aktuellen Version auf, es scheint aber von meinem Level abhängig zu sein (da es auch bei mir in einem Minimalbeispiel nicht auftritt), ich werde daher ein wenig Zeit benötigen, um das Problem zu isolieren.


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: physX_open [Re: Superku] #351809
12/28/10 17:41
12/28/10 17:41
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline OP
Senior Expert
Superku  Offline OP
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Nach etlichen Stunden habe ich das PH_CHAR Problem ausmachen können:
Nur durch Setzen von warn_level auf 6 erscheint die Fehlermeldung
Empty Pointer in physX_open(),
und zwar unabhängig von Level und Skript.


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: physX_open [Re: Superku] #352403
01/03/11 14:22
01/03/11 14:22
Joined: Jul 2000
Posts: 27,986
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,986
Frankfurt
Danke - das werden wir uns ansehen. Ich hatte den warn_level noch nie auf 6.

Page 1 of 2 1 2

Moderated by  aztec, Inestical, Matt_Coles, Tobias 

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