|
wo kommt der Script crash (E 1513) her ???
#379337
08/01/11 11:31
08/01/11 11:31
|
Joined: Mar 2011
Posts: 69 Munich (Germany)
LPF
OP
Junior Member
|
OP
Junior Member
Joined: Mar 2011
Posts: 69
Munich (Germany)
|
ich habe Diesen:
#include <default.c>
#include <ackphysx.h>
VECTOR dragon_force;
VECTOR rotatedragon_force;
ENTITY* dragon;
ENTITY* helper;
ENTITY* forceobject;
var follow = 0;
var zoomvar = 400;
var gravityvar = -10;
var flyvar=0;
var wingvar=0;
function camera_follow(ENTITY* ent)
{
while(1)
{
vec_set(camera.x,vector(zoomvar,0,25)); // camera position relative to the player
vec_rotate(camera.x,ent.pan); // rotate the camera position with the player
vec_add(camera.x,ent.x); // add player position
vec_set(camera.pan,vector(ent.pan-180,-ent.tilt,0));
//camera.roll = (helper.roll*-1)+90; ////////// sehr realistische Kameraführung... nicht zu empfehlen, aber lustig
wait(1);
}
}
action my_dragon()
{
dragon = my;
}
action my_forceobject()
{
forceobject = my;
while(1)
{
vec_set(my.x,vector(2,-60,5)); // camera position relative to the player
vec_rotate(my.x,dragon.pan); // rotate the camera position with the player
vec_add(my.x,dragon.x); // add player position
vec_set(my.pan,vector(dragon.pan-180,-dragon.tilt,0));
wait(1);
}
}
function main()
{
physX_open();
level_load ("Dragontestlevel.wmb");
video_mode=10;//auflösung:11 beste (chiras bildschirm),10 ursprung (cb)
//video_screen=1;
screen_size.x = 1000;
screen_size.y = 750;
mouse_mode=4;
wait(2);
pX_setgravity (vector(0, 0, -9.81)); // set the gravity
pXent_settype (dragon, PH_RIGID, PH_BOX); // set the physics entity type
pXent_setmass (dragon, 1); // and its mass
pXent_setfriction (dragon, 100); // set the friction
pXent_setdamping (dragon, 10, 200); // set the damping
pXent_setelasticity (dragon, 1); // set the elasticity
while (1)
{
if (key_x)
{
if(follow==1)
{
follow=0;
}
else
{
follow=1;
}
wait(-1);
}
rotatedragon_force.x = -4000 * time_step * (key_cur - key_cul); // move the dragon using the cursor keys
rotatedragon_force.z = 4000 * time_step * (key_cuu - key_cud);
rotatedragon_force.y = 4000 * time_step * (key_a -key_d);
dragon_force.x = 0;
dragon_force.y = 0;
dragon_force.z = 0;
//pXent_addcentralforce(dragon, dragon_force);
pXent_addtorquelocal (dragon, rotatedragon_force);
if(key_space && wingvar==0)
{
pXent_addexplosion(dragon, vector(forceobject.x,forceobject.y,forceobject.z),20,30);
wingvar=1;
}
if(key_space)
{
pXent_setdamping (dragon,100,200);
}
else
{
pXent_setdamping (dragon,10,200);
wingvar=0;
}
wait (1);
}
}
action my_uoc()
{
////////////////////////////////////////////////////////////////////////////
//hilfe für die kamera... //
//auf uoc basiert die gesamte zoom und drehsache,da die kamera uoc folgt //
////////////////////////////////////////////////////////////////////////////
helper = my;
set(my,PASSABLE);
set(my,IGNORE_PASSENTS);
vec_set(camera.pan,vector(my.pan-180,-my.tilt,0));
camera_follow(me);
while (1)
{
my.x = dragon.x;
my.y = dragon.y;
my.z = dragon.z+8;
if(follow==1)
{
my.pan = dragon.pan;
my.tilt = dragon.tilt;
my.roll = dragon.roll;
}
if (key_e)
{
my.pan += 5 * time_step;
}
if (key_q)
{
my.pan -= 5 * time_step;
}
if (key_pressed(74))
{
zoomvar += 10 * time_step;
}
if (key_pressed(78))
{
if (zoomvar>125)
{
zoomvar -= 10 * time_step;
}
}
if (key_r)
{
my.tilt += 5 * time_step;
}
if (key_f)
{
my.tilt -= 5 * time_step;
}
if (key_g)
{
my.pan = dragon.pan;
}
if (key_t)
{
my.pan = dragon.pan;
my.tilt = dragon.tilt;
zoomvar = 400;
}
wait(1);
}
}
code, der mir einen Drachen (hoffentlich) realistisch bewegt... abe neuerdings kommt jedes mal beim Starten 2 Fehlermeldungen: "script crash in camera_follow" und "script crash in my_forceobject" wo zum teufel kommt das her???????? es hat doch vorher geklappt... ich hab gerade rausgefunden, dass die dre zeilen in camera_follow
vec_rotate(camera.x,ent.pan); // rotate the camera position with the player
vec_add(camera.x,ent.x); // add player position
vec_set(camera.pan,vector(ent.pan-180,-ent.tilt,0));
der grund sind... aber wo genau und wie man das ausbessert... keine Ahnung
Last edited by LPF; 08/01/11 11:41.
..oooO ......... ..(....)..Oooo.. ...\..(...(....).. ....\_)....)../.. ...........(_/... ...ICH WAR.... ........HIER....
|
|
|
Re: wo kommt der Script crash (E 1513) her ???
[Re: Lukas]
#379355
08/01/11 14:59
08/01/11 14:59
|
Joined: Mar 2011
Posts: 69 Munich (Germany)
LPF
OP
Junior Member
|
OP
Junior Member
Joined: Mar 2011
Posts: 69
Munich (Germany)
|
ich habs jetzt mal mit while(!dragon) wait(1); in my_forceobject probiert und der dazugehörige fehler ist weg...
ich habs mal in my_uoc geschrieben und der fehler war vollständig weg...
vielen dank
eine Frage noch: was genau hat das jetzt gemacht? wenn ichs richtig verstehe wartet er solange bis dragon zugewiesen ist oder?
Last edited by LPF; 08/01/11 15:43.
..oooO ......... ..(....)..Oooo.. ...\..(...(....).. ....\_)....)../.. ...........(_/... ...ICH WAR.... ........HIER....
|
|
|
Re: wo kommt der Script crash (E 1513) her ???
[Re: LPF]
#379360
08/01/11 15:40
08/01/11 15:40
|
Joined: Dec 2008
Posts: 1,218 Germany
Rackscha
Serious User
|
Serious User
Joined: Dec 2008
Posts: 1,218
Germany
|
Camera_follow gehört von deiner logik her auch direkt in die action o.O
Camera_Follow(My);
Was du machst ist in LiteC/CScript möglich, aber ein grosses problem.
Du weißt bei dir gerade überhaupt nicht WANN welches object wo existiert.
z.B. weißt du dragon den my pointer zu, um dan später irgendwo anders auf dragon zuzugreifen. Auch wenn es bei den paar zeilen noch zu überschauen ist, das könnte dir mitunter später zum verhängniss werden, wenn du solche globalen pointer in größerer anzahl verteilst.
MY Website with news of my projects: (for example my current Muliplayer Bomberman, GenesisPrecompiler for LiteC and TileMaster, an easy to use Tile editor) Sparetime-Development
|
|
|
Re: wo kommt der Script crash (E 1513) her ???
[Re: Rackscha]
#379361
08/01/11 15:45
08/01/11 15:45
|
Joined: Mar 2011
Posts: 69 Munich (Germany)
LPF
OP
Junior Member
|
OP
Junior Member
Joined: Mar 2011
Posts: 69
Munich (Germany)
|
wie meinst du des?
na ja es funktioniert jetzt... ich bin vorerst glücklich aber wenn ich zukünftige fehler gleich vermeiden könnte wäre das schön
Last edited by LPF; 08/01/11 15:46.
..oooO ......... ..(....)..Oooo.. ...\..(...(....).. ....\_)....)../.. ...........(_/... ...ICH WAR.... ........HIER....
|
|
|
Re: wo kommt der Script crash (E 1513) her ???
[Re: LPF]
#379364
08/01/11 15:55
08/01/11 15:55
|
Joined: May 2007
Posts: 2,043 Germany
Lukas
Programmer
|
Programmer
Joined: May 2007
Posts: 2,043
Germany
|
Was Rackscha meinte ist, dass, wenn du die Entitiy, der du my_uoc zugewiesen hast, entfernst, camera_follow noch weiterläuft. Das heißt du musst dich selbst darum kümmern, dass diese Funktion angehalten wird, damit es keinen Crash gibt, weil der "ent"-Pointer dann nicht mehr gültig ist. Wenn du statt einem Parameter einen globalen Pointer nimmst, gilt das gleiche.
Wenn du das, was du in dieser Funktion machst, direkt in der action machen würdest, dann hättest du das Problem nicht, denn die action wird automatisch gestoppt, wenn du die Entity entfernst. Zusätzlich kannst du while(me) statt while(1) schreiben um nochmal extra sicher zu gehen.
|
|
|
|