2 registered members (TedMar, AndrewAMD),
1,344
guests, and 7
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
PH_CHAR stopped before touching ground
#383342
09/19/11 08:51
09/19/11 08:51
|
Joined: Feb 2010
Posts: 320 TANA/Madagascar
3dgs_snake
OP
Senior Member
|
OP
Senior Member
Joined: Feb 2010
Posts: 320
TANA/Madagascar
|
Hi, PH_CHAR with pXent_move is stopped at some distance before colliding a static entity (A8.30.2).
#include <acknex.h>
#include <default.c>
#include <ackphysx.h>
void main()
{
physX_open();
// Set shadow
shadow_stencil = 2;
level_load("PLATE.WMB");
wait(3);
// Set camera
vec_set(camera->x, vector(-265, -30, 90));
vec_set(camera->pan, vector(0, -11, 0));
// Create player
ENTITY *e = ent_create("CUBE.MDL", vector(0, 0, 50), NULL);
//vec_set(e->scale_x, vector(2, 2, 2));
//vec_set(e->scale_x, vector(0.5, 0.5, 0.5));
set(e, SHADOW);
pXent_settype(e, PH_CHAR, PH_CAPSULE /*PH_BOX*/);
// Create
ENTITY *box = ent_create("CUBE.MDL", vector(20, 20, 50), NULL);
set(box, SHADOW);
pXent_settype(box, PH_RIGID, PH_BOX /*PH_CAPSULE*/);
// Player movement
var player_gravity = 0.1;
var player_speed = 0;
//
while(1)
{
// Add gravity to speed
player_speed += player_gravity;
// Move charachter downward
pXent_move(e, NULL, vector(0, -2 * time_step, -player_speed * time_step));
// Debug entity z
DEBUG_VAR(e->z, 10);
// Wait frame
wait(1);
}
}
|
|
|
Re: PH_CHAR stopped before touching ground
[Re: 3dgs_snake]
#383414
09/20/11 09:04
09/20/11 09:04
|
Joined: Feb 2010
Posts: 320 TANA/Madagascar
3dgs_snake
OP
Senior Member
|
OP
Senior Member
Joined: Feb 2010
Posts: 320
TANA/Madagascar
|
Hi, Please, can someone explain the 8 quants, keeping a PH_CHAR from colliding into a static actor? Files
#include <acknex.h>
#include <default.c>
#include <ackphysx.h>
void main()
{
physX_open();
// Set shadow
shadow_stencil = 2;
level_load("PLATE.WMB");
wait(3);
// Set camera
vec_set(camera->x, vector(-265, -30, 90));
vec_set(camera->pan, vector(0, -11, 0));
// Create player
ENTITY *e = ent_create("CUBE.MDL", vector(0, 0, 100), NULL);
//vec_set(e->scale_x, vector(2, 2, 2));
//vec_set(e->scale_x, vector(0.5, 0.5, 0.5));
set(e, SHADOW);
pXent_settype(e, PH_CHAR, PH_CAPSULE /*PH_BOX*/);
// Create
ENTITY *box = ent_create("CUBE.MDL", vector(20, 20, 50), NULL);
set(box, SHADOW);
pXent_settype(box, PH_RIGID, PH_BOX /*PH_CAPSULE*/);
// Player movement
var player_gravity = 0.1;
var player_speed = 0;
ENTITY *sphere = ent_create(SPHERE_MDL, vector(-20, 0, 100), NULL);
set(sphere, SHADOW);
pXent_settype(sphere, PH_RIGID, PH_SPHERE);
pXent_setmaterial(sphere, vector(100, 0, 0), vector(100, 100, 100), vector(0, 1, 0));
//
while(1)
{
// Add gravity to speed
player_speed += player_gravity;
// Move charachter downward
pXent_move(e, NULL, vector((key_cuu - key_cud) * 2 * time_step, (key_cul - key_cur) * 2 * time_step, -player_speed * time_step));
// Debug entity z
DEBUG_VAR(e->z, 10);
VECTOR temp;
vec_set(temp, e->x);
temp.z -= 1000;
my = e;
var dist = c_trace(e->x, temp, IGNORE_ME | USE_BOX);
DEBUG_VAR(dist, 22);
// Distance to ground
DEBUG_VAR(e->z - dist, 34);
//DEBUG_VAR(pX_stats(1), 50);
// Wait frame
wait(1);
}
}
Thanks in advance.
|
|
|
Re: PH_CHAR stopped before touching ground
[Re: rojart]
#383418
09/20/11 10:33
09/20/11 10:33
|
Joined: Feb 2010
Posts: 320 TANA/Madagascar
3dgs_snake
OP
Senior Member
|
OP
Senior Member
Joined: Feb 2010
Posts: 320
TANA/Madagascar
|
I used PH_RIGID for the box and sphere, but the level is PH_STATIC (created by physX_open()). Every frame, I move the box downward, but it is prevented from touching the ground. Below is a modified source code, and you can try to move to the left, but the PH_CHAR box can't touch the STATIC wall.
#include <acknex.h>
#include <default.c>
#include <ackphysx.h>
void main()
{
physX_open();
// Set shadow
shadow_stencil = 2;
level_load("PLATE.WMB");
wait(3);
// Set camera
vec_set(camera->x, vector(-265, -30, 90));
vec_set(camera->pan, vector(0, -11, 0));
// Create player
ENTITY *e = ent_create("CUBE.MDL", vector(0, 0, 100), NULL);
//vec_set(e->scale_x, vector(2, 2, 2));
//vec_set(e->scale_x, vector(0.5, 0.5, 0.5));
set(e, SHADOW);
pXent_settype(e, PH_CHAR, PH_CAPSULE /*PH_BOX*/);
// Create
ENTITY *box = ent_create("CUBE.MDL", vector(20, 20, 50), NULL);
set(box, SHADOW);
pXent_settype(box, PH_RIGID, PH_BOX /*PH_CAPSULE*/);
// Player movement
var player_gravity = 0.1;
var player_speed = 0;
ENTITY *sphere = ent_create(SPHERE_MDL, vector(-20, 0, 100), NULL);
set(sphere, SHADOW);
pXent_settype(sphere, PH_RIGID, PH_SPHERE);
pXent_setmaterial(sphere, vector(100, 0, 0), vector(100, 100, 100), vector(0, 1, 0));
// Create static wall
ENTITY *wall = ent_create(CUBE_MDL, vector(0, 40, 20), NULL);
vec_set(wall->scale_x, vector(5, 0.5, 5));
c_setminmax(wall);
set(wall, LIGHT | SHADOW);
vec_set(wall->blue, vector(150, 0, 0));
pXent_settype(wall, PH_STATIC, PH_BOX);
//
while(1)
{
// Add gravity to speed
player_speed += player_gravity;
// Move charachter downward
pXent_move(e, NULL, vector((key_cuu - key_cud) * 2 * time_step, (key_cul - key_cur) * 2 * time_step, -player_speed * time_step));
// Debug entity z
DEBUG_VAR(e->z, 10);
VECTOR temp;
vec_set(temp, e->x);
temp.z -= 1000;
my = e;
var dist = c_trace(e->x, temp, IGNORE_ME | USE_BOX);
DEBUG_VAR(dist, 22);
// Distance to ground
DEBUG_VAR(e->z - dist, 34);
//DEBUG_VAR(pX_stats(1), 50);
// Wait frame
wait(1);
}
}
|
|
|
Re: PH_CHAR stopped before touching ground
[Re: rojart]
#384471
10/03/11 15:30
10/03/11 15:30
|
Joined: Oct 2004
Posts: 900 Lgh
rojart
User
|
User
Joined: Oct 2004
Posts: 900
Lgh
|
I found a solution to reduce the distances, in the pX_setunit (var scale); function you need to increase the scale factor. eg:
void main()
{
physX_open(); pX_setunit(5);
...
|
|
|
|