3 registered members (Ayumi, Akow, AndrewAMD),
1,505
guests, and 9
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
"Event" los-lassen
#431458
10/16/13 13:03
10/16/13 13:03
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
hallo ich habe gerade folgendes problem: nach einer kollision soll die variable wieder auf 1 gehen dieser code funtioniert nicht
var grav = 1
function my_event()
{
if(event_type == EVENT_ENTITY)
{
grav = 0;
my.tilt += 6*time_step;
}
else
{
grav = 1;
}
}
/////////////////////
action event_action()
{
my.emask |= (ENABLE_BLOCK | ENABLE_ENTITY);
my.event = my_event;
c_setminmax(my);
...
VECTOR vFeet;
vec_for_min(vFeet,me);
while(1)
{
if(grav == 1)
{
c_trace(my.x,vector(my.x,my.y,my.z-1000),GLIDE);
my.z = hit.z - vFeet.z;
}
...
wait(1);
}
}
wie sage ich das dem script, dass er bei einer "nicht-kollision" bezw nach einer kollision eine function ausführt ?
if(event_type == NULL) -> klappt auch nicht
|
|
|
Re: "Event" los-lassen
[Re: ratz]
#431462
10/16/13 13:40
10/16/13 13:40
|
Joined: Sep 2003
Posts: 6,861 Kiel (Germany)
Superku
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
|
Ich empfehle dir, wenn du dich an einem Movement-Skript versuchen möchtest, folgenden Artikel zu lesen und auch den Code herunterzuladen: http://opserver.de/nwik5/index.php?title=GravityZu deinem Problem: Du könntest bspw. am Ende oder Anfang (je nach Reihenfolge von c_move und anderen Anweisungen) deiner while Schleife einen Skill auf 0 setzen (jeden Frame also), und diesen im Event auf 1 setzen. Das Event wird natürlich auch nur ausgeführt, wenn eines der Events unter emask eintritt.
"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: "Event" los-lassen
[Re: Superku]
#431509
10/17/13 11:51
10/17/13 11:51
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
ich habs mir angeguckt , und versucht einzubinden ... egal irgentwie war das deck immer am schweben ich hab es jetzt geschafft !!! -> gravitation -> rampe hochfahren -> rampe runterfahren -> wenn man unten ist, ist das board wieder gerade -> und das gleiche rückwärts ... so gehts: skater fährt ... skater trifft auf rampe, schaltet gravitation ab solange kollision ist, drehe baord hoch und wird weiter bewegt ab höhe = 180, schaltet der script um so das man rückwärts fährt und rückwärts wird das board gedreht -> um unten über die rampe zu kommen, wird das deck wieder gerade gestellt , und gravitation wird wieder angeschaltet dabei wird ramp_switch auf 2 geschaltet und das gleiche passirt, "rückärts"auf der anderen seite...
///////////////////////////////
// SKATEBOARD-CODE v.1.0 //
// //
// written by Patrick Ratz //
///////////////////////////////
#include <acknex.h>
#include <default.c>
///////////////////////////////
var skate_move = 1;
var skate_ramp = 0;
var skate_grav = 1;
var ramp_switch = 1;
var i;
ENTITY* skater;
PANEL* my_info=
{
digits(35, 10, "move = %0.f", *, 1, skate_move);
digits(35, 19, "ramp = %0.f", *, 1, skate_ramp);
digits(35, 28, "grav = %0.f", *, 1, skate_grav);
digits(35, 37, "scha = %0.f", *, 1, ramp_switch);
flags = SHOW;
}
function main()
{
vec_set(screen_size,vector(800,400,0));
vec_set(screen_color,vector(50,1,1)); // dark blue
vec_set(sky_color,vector(50,1,1)); // dark blue
video_window(NULL,NULL,0,"My New Game");
d3d_antialias = 1;
shadow_stencil = 3;
level_load("skate.wmb");
}
//////////////////////////////////////////////
function skate_event();
action Skater()
{
skater = my;
skater.pan = my.pan;
skater.roll = my.roll;
skater.tilt = my.tilt;
my.emask |= (ENABLE_BLOCK | ENABLE_ENTITY);
my.event = skate_event;
c_setminmax(my);
VECTOR vFeet;
vec_for_min(vFeet,me);
while(1)
{
if(skate_grav == 1)
{
c_trace(my.x,vector(my.x,my.y,my.z-1000),USE_POLYGON);
my.z = hit.z - vFeet.z;
}
if(my.z > 180 && skate_ramp == 0)
{
skate_ramp = 1; // move back !!
}
if(my.z > 180 && skate_ramp == 1 && ramp_switch == 2) // again , agian ;-)..
{
skate_ramp = 0; // move front !!
}
//vorwärts
if(skate_move == 1 && skate_ramp == 0 )
{
c_move(my,vector(5*time_step,0,0),nullvector,USE_POLYGON);
}
//rückwärts//
if(skate_ramp == 1 && skate_move == 1)
{
c_move(my,vector(-5*time_step,0,0),nullvector,USE_POLYGON);
}
//
wait(1);
}
}
function skate_event()
{
// is on the ramp -> drive realistic up
if(event_type == EVENT_ENTITY && skate_ramp == 0)
{
my.tilt += 5*time_step;
skate_grav = 0;
}
// is down the ramp -> drive realistic down
if(event_type == EVENT_ENTITY && skate_ramp == 1)
{
my.tilt -= 5*time_step;
skate_grav = 0;
}
// is on the ground -> need for "over the ramp (under)" to the ground
if(event_type == EVENT_BLOCK && skate_ramp == 1)
{
my.tilt = 0;
skate_grav = 1;
ramp_switch = 2;
}
if(event_type == EVENT_BLOCK && ramp_switch == 2)
{
my.tilt = 0;
skate_grav = 1;
}
}
|
|
|
|