brauche einen Tür coe wie in A5

Posted By: ratz

brauche einen Tür coe wie in A5 - 03/25/12 13:20

Hallo
ich suche eine möglichkeit eine Tür zu erstellen wie darmals
in A5

wenn man nah genug an der Tür stand und man Leertaste drückte ging sie auf und wenn man nochmals leertaste drückte ging sie zu.


... kann man sowas auch in lite c schreiben ?
oder gibs da ein einfaches sample ?

ein player code habe ich schon tongue
Posted By: Ch40zzC0d3r

Re: brauche einen Tür coe wie in A5 - 03/25/12 13:39

Hey, das ist ganz ganz einfach grin
Du machst nen c_scan im playercode. Die Tür wird gescannt und im scanevent machst du was wenn man space drückt z.B. die Tür aufklappen zu lassen.
Wenn du ein bissl code braucsht sag nur bescheid^^
Zogg grad bf3 deswegen nur ne Erklärung tongue
Posted By: ratz

Re: brauche einen Tür coe wie in A5 - 03/25/12 17:56

hi
ich wollte es so machen:

Code:
action player()
{
 player = me;
 
 my.skill1 = 40;
 my.skill2 = 60;
 my.skill3 = 300;
 ...
  if (key_space) 
  {
   c_scan(player.x, player.pan, vector(my.skill1, my.skill2,  
   my.skill3),IGNORE_ME);
  } 
 ...
}

/////////////////
var var_door = 0;
var drehung = 0;

action door_scan()
{	
 my.emask |= ENABLE_SCAN;
 my.event = door_event_scan;
}

function door_event_scan()
{
 if (event_type == EVENT_SCAN )
 {
  var_door = 1;	
 }
	
 while(var_door == 1)
 {
  drehung++;

   if(drehung == 90)
   {
   my.pan += 2*time_step;
   var_door = 0;
   }
   
  wait(1);
 }
}



aber irgentwie tut sich nichts
so wohl aber sie wird immer schneller tongue

Code:
var var_door = 0;
var drehung = 0;

action door_scan()
{	
 my.emask |= ENABLE_SCAN;
 my.event = door_event_scan;
}

function door_event_scan()
{
 if (event_type == EVENT_SCAN )
 {
  var_door = 1;	
 }
	
 while(var_door == 1)
 {
  my.pan += 2*time_step;  
  wait(1);
 }
}


Posted By: Widi

Re: brauche einen Tür coe wie in A5 - 03/25/12 18:14

Du hast doch schon einmal gefragt, wie man eine Kamera um 90 Grad dreht. Dort steht die Antwort, mach dasselbe mit der Türe.

EDIT: Schau dir dein erstes Beispiel nochmals genau an. Da hast du eine while Schleife, worin du "drehung" heraufzählst. Soweit gut. Aber: Die if() Abfrage wird nur durchgeführt, wenn drehung gleich 90 ist, also nur ein Mal. Aber sie sollte solange durchgeführt werden, wie "drehung" kleiner 90 ist.

EDIT 2: setze in der Event Function der Türe am Anfang
my.event = NULL;
Sonst wird der Event möglicherweise mehrmals aufgerufen, da der scan über mehrere frames dauern kann (solange die Spache Taste gedrückt wird) was zur Folge hat, dass die Türe sich immer schneller dreht.
Am Ende setze den event wieder auf die function. Warte davor besser, bis die Space Taste losgelassen wird.
Posted By: Ch40zzC0d3r

Re: brauche einen Tür coe wie in A5 - 03/25/12 19:49

Mach einfach ne variable die checkt wie oft du die tür geacannt hast...
Sonst startest du ja doe while immer wieder!
Posted By: ratz

Re: brauche einen Tür coe wie in A5 - 03/26/12 12:41

so laugh es tuts grin
Code:
action player_me()
{
 player = me;
 
 my.skill1 = 40;
 my.skill2 = 60;
 my.skill3 = 300;

 while(1)
 {
// ...
  if (key_space) 
  {
   c_scan(player.x, player.pan, vector(my.skill1, my.skill2,  
   my.skill3), IGNORE_ME);
  }
 
  wait(1);
 }
}


/////////////////////////////////////////
var door = 1;
var drehung;
var speed = 5;


action door_scan()
{	
 my.emask |= ENABLE_SCAN;
 my.event = door_event_scan; 
}

function door_event_scan()
{
 if (event_type == EVENT_SCAN && door == 1)
 {
  door = 0;
  for(drehung = 0; drehung <= 270; drehung ++)
  {
  my.pan += speed * time_step;
  wait(1); 
  }
 }    
}



jetzt muss ich noch zusehen, dass die "door" variable wieder auf 1 gesetzt wird,
das soll aber erst wieder passieren, wenn die tür auf ist sonst kann ich leertaste drücken und die tür dreht sich die ganze zeit tongue


Posted By: JoGa

Re: brauche einen Tür coe wie in A5 - 03/26/12 13:07

also im letzten Thread hast du mir irgendwie nur auf einem halben Ohr zugehört, so wie jetzt dem Widi.

Er hat der den Tip mit my.event = NULL; gegeben. Das ist besser als dein var door.
Die globale Variable kannst nur verwenden, wenn du nur eine TÜr im lvl hast. Mach mal mehrere in dein lvl und du wirst merken, dass nur die erste auf geht.

Lass die door-var lieber weg und machs, wie widi vorgeschlagen hat, das ist besser.

dein letzter Code, modifiziert mit widis Tip:
Code:
action door_scan()
{	
 my.emask |= ENABLE_SCAN;
 my.event = door_event_scan; 
}

function door_event_scan()
{
 if (event_type == EVENT_SCAN)
 {
  my.event = NULL;
  for(drehung = 0; drehung <= 270; drehung ++)
  {
  my.pan += speed * time_step;
  wait(1); 
  }
  my.event = door_event_scan; 
 }    
}


Posted By: ratz

Re: brauche einen Tür coe wie in A5 - 03/26/12 16:58

so ich hab jetzt nochmal alles verändert , nur das ich jetzt wieder leertaste gedrückt halten kann und die tür sich solange dreht bis ich loslasse...
genau so wie die drehung .. mal geht sie bis 90 grad, mal nur bis 75... -> deswegen hab ich erstmal wieder "var door" verwendet und siehe da ? - jetzt geht die tür wieder richtig auf
ABER
ich kann auch irgendwie nicht durch den durchgang laufen, wo die tür ist
als were da eine kollision. da ist aber nichts !!


evtl mache ich ja was falsch:

level,player,tür

Code:
///////////////////////////////
#include <acknex.h>
#include <default.c>

///////////////////////////////

function door_event_scan();

///////////////////////////////

function main()
{
 level_load("map01.WMB");
}

///////////////////////////////
var walk_percentage;

action player_me()
{
 player = me;
 
 my.skill1 = 40;
 my.skill2 = 60;
 my.skill3 = 300;

 while(1)
 {
  camera.pan = my.pan;
  camera.x = my.x - 50 * cos(my.pan);
  camera.y = my.y - 50 * sin(my.pan);
  camera.z = my.z + 50;
  camera.tilt = -15;
  camera.roll = 0;

  my.pan += 3 * (key_a - key_d) * time_step; 
  c_move (my, vector(15 * (key_w - key_s) * time_step, 0, 0), nullvector, IGNORE_ME | GLIDE);   
  
  if (key_w)
  {
  ent_animate(my,"walk",walk_percentage, ANM_CYCLE); // "walk" Animationsloop
  walk_percentage += 6 * time_step; // 3 = Animationsgeschwindigkeit für"walk"
  }
  
  if (key_s)
  {
  ent_animate(my,"walk",walk_percentage, ANM_CYCLE); // "walk" Animationsloop
  walk_percentage -= 6 * time_step; // 3 = Animationsgeschwindigkeit für"walk"
  }
 
  
  if (key_space) // press "1" to start scanning around the player
  {
   c_scan(player.x, player.pan, vector(my.skill1, my.skill2, my.skill3), IGNORE_ME| GLIDE);
  }
 
  wait(1);
 }
}


/////////////////////////////////////////

var door = 1;
var drehung;
var speed = 5;


action door_scan()
{	
 my.emask |= ENABLE_SCAN;
 my.event = door_event_scan; 
}

function door_event_scan()
{
 if (event_type == EVENT_SCAN && door == 1)
 {
  door = 0;
  for(drehung = 0; drehung <= 90; drehung ++)
  {
   my.pan += drehung * time_step;
   wait(1); 
  } 
 }
}



und hier nochmals mein sampel level...
http://www.file-upload.net/download-4214764/sample.rar.html

könntet ihr mal nen blcik drüber schmeissen ?

die tür hab ich als WMB entity gespeichert, versetzt so das sie sich richtig drehen soll und textur drüber gezogen ...
Posted By: Widi

Re: brauche einen Tür coe wie in A5 - 03/26/12 17:04

Quote:

genau so wie die drehung .. mal geht sie bis 90 grad, mal nur bis 75...

Was sollen wir dir noch helfen, wenn du die Antworten nicht liest oder anwendest:
siehe hier

Da habe ich dir schon eine Lösung für dieses Problem gepostet. mad

Quote:

ich kann auch irgendwie nicht durch den durchgang laufen, wo die tür ist
als were da eine kollision. da ist aber nichts !!

drück mal F11, dann solltest du einen blauen Rahmen (Kollisionsbox) sehen. Wenn die bei offener türe immer noch den Weg versperrt, nutze c_setminmax um die Box anzupassen.

Posted By: ratz

Re: brauche einen Tür coe wie in A5 - 03/26/12 17:11

bitte post richtig lesen wink
Posted By: Widi

Re: brauche einen Tür coe wie in A5 - 03/26/12 17:13

Es hat wohl keinen Sinn, bin draussen...
EDIT: Du bist ja ein ganz Schlauer: nach meiner Antwort deinen Post editieren und dann mir vorwerfen, ich könne nicht lesen?
lol

Lies du lieber mal die Antworten... wink
Posted By: ratz

Re: brauche einen Tür coe wie in A5 - 03/27/12 17:48

so kann ich durch gehen .... danke wink

egal an der tür arbeite ich noch bez GUCK nochmal alles nach und mache es SO wie du es wolltest
Posted By: ratz

Re: brauche einen Tür coe wie in A5 - 03/27/12 19:42

okey an der tür muss ich noch dran

... jetz suche ich noch eine Möglichkeit, dass die Kamera eine Kollision mit der wand erzeugt , weil ... sieht nen bisschen sch**** aus wenn man durch die wand guckt beim drehen

geht das so ?
Posted By: Ch40zzC0d3r

Re: brauche einen Tür coe wie in A5 - 03/27/12 19:56

Man denk mal logisch...
Du erstellst nen model und bewegst die canera mit dem modell.
Es sollte natürlich nicht passable sein...
Dann setzt du im code anstatt camera.pan und camera.x einfach obj.pan usw.....
Posted By: ratz

Re: brauche einen Tür coe wie in A5 - 03/28/12 16:52

ich hab mich mal schlau gemacht , jemand meinte mal in ein forum folgendes:

erstelle eine 3d sphere genau auf der poision wo deine Cam ist und mache diese Unsichbar und gib ihr ein Kollisions Code ..

das ganze hört sich nicht schlecht an, was meint ihr ?

so sieht mein Player mom aus.

Like GTA tongue

[code]
///////////////////////////////
var walk_percentage;
VECTOR vFeet;


action player_me()
{
player = me;
c_setminmax(me); // Passe Kollision an

while(1)
{
camera.pan = my.pan;
camera.x = my.x - 150 * cos(my.pan);
camera.y = my.y - 150 * sin(my.pan);
camera.z = my.z + 100;

camera.tilt += mouse_force.y *3*time_step;
camera.roll = 0;

//////////////////
vec_for_min(vFeet,me);

my.pan -= mouse_force.x *6*time_step;


c_move (my, vector(15 * (key_w - NULL) * time_step, 0, 0), nullvector,
IGNORE_ME | GLIDE);

c_trace(my.x,vector(my.x,my.y,my.z-1000),IGNORE_ME);

my.z = hit.z - vFeet.z;

//////////////////

if (key_w)
{
ent_animate(my,"walk",walk_percentage, ANM_CYCLE);
walk_percentage += 6 * time_step;
}



if (key_space)
{
c_scan(player.x, player.pan, vector(40,60,300), IGNORE_ME| GLIDE);
}

wait(1);
}
}


/////////////////////////////////////////

[code]
Posted By: ratz

Re: brauche einen Tür coe wie in A5 - 03/31/12 13:16

GELÖST !!!:)
© 2023 lite-C Forums