"Event" los-lassen

Posted By: ratz

"Event" los-lassen - 10/16/13 13:03

hallo
ich habe gerade folgendes problem:

nach einer kollision soll die variable wieder auf 1 gehen

dieser code funtioniert nicht frown
Code:
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 ?

Code:
if(event_type == NULL) -> klappt auch nicht

Posted By: Superku

Re: "Event" los-lassen - 10/16/13 13:40

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=Gravity

Zu 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.
Posted By: ratz

Re: "Event" los-lassen - 10/17/13 09:01

ja ich muss über die variable die gravitation abschalten
und wenn ich keine kollision mehr mit einem Entity habe,
soll die variable wieder auf 1 springen ,

das ganze ist immer noch für mein skater,
denn wenn ich die graviation nicht abschalte werdend er die rampe hochfährt,
drückt sich das Board in die rampe//boden und dreht sich dann rauerhaft

so brauche ich nur über die kollision mit hilfe von "my.tilt" und c_move
mich nach vorne bewegen, -> mithilfe von USE_POLYGON wirkt das ganze recht realistisch, was das hochfahren der rampe angeht

das ganze mit physX zu realisireen , wurde mit abgeraten
Posted By: Superku

Re: "Event" los-lassen - 10/17/13 11:40

Lies dir bitte den Artikel durch, den ich verlinkt habe. Du willst auf keinen Fall (!), dass das Skateboard durchgehend den Boden berührt, sprich die Gravitation mittels c_move-Kollisionen realisieren. Stattdessen soll die Entity stets einen gewissen Abstand über dem Boden schweben (natürlich nicht der sichtbare Teil, sondern die Bounding Box des Skateboards/ Skaters).

Und ja, mit physX würde das wahrscheinlich eher nichts.
Posted By: ratz

Re: "Event" los-lassen - 10/17/13 11:51

ich habs mir angeguckt , und versucht einzubinden ...
egal irgentwie war das deck immer am schweben

ich hab es jetzt geschafft wink !!!

-> 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...



Code:
///////////////////////////////
// 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;
   } 
}

Posted By: ratz

Re: "Event" los-lassen - 10/17/13 11:53

das springen wird später eingebunden ...
© 2024 lite-C Forums