|
1 registered members (Grant),
999
guests, and 2
spiders. |
|
Key:
Admin,
Global Mod,
Mod
|
|
|
brauche einen Tür coe wie in A5
#397913
03/25/12 13:20
03/25/12 13:20
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
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 
|
|
|
Re: brauche einen Tür coe wie in A5
[Re: ratz]
#397914
03/25/12 13:39
03/25/12 13:39
|
Joined: Oct 2011
Posts: 1,082 Germany
Ch40zzC0d3r
Serious User
|
Serious User
Joined: Oct 2011
Posts: 1,082
Germany
|
Hey, das ist ganz ganz einfach  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 
|
|
|
Re: brauche einen Tür coe wie in A5
[Re: Ch40zzC0d3r]
#397918
03/25/12 17:56
03/25/12 17:56
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
hi ich wollte es so machen:
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 
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);
}
}
Last edited by ratz; 03/25/12 17:56.
|
|
|
Re: brauche einen Tür coe wie in A5
[Re: ratz]
#397919
03/25/12 18:14
03/25/12 18:14
|
Joined: Aug 2007
Posts: 1,922 Schweiz
Widi
Serious User
|
Serious User
Joined: Aug 2007
Posts: 1,922
Schweiz
|
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.
Last edited by Widi; 03/25/12 18:32.
|
|
|
Re: brauche einen Tür coe wie in A5
[Re: Ch40zzC0d3r]
#398004
03/26/12 12:41
03/26/12 12:41
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
so  es tuts 
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 
Last edited by ratz; 03/26/12 12:42.
|
|
|
Re: brauche einen Tür coe wie in A5
[Re: ratz]
#398007
03/26/12 13:07
03/26/12 13:07
|
Joined: Dec 2003
Posts: 988 Germany, Magdeburg
JoGa
User
|
User
Joined: Dec 2003
Posts: 988
Germany, Magdeburg
|
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:
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;
}
}
|
|
|
Re: brauche einen Tür coe wie in A5
[Re: JoGa]
#398033
03/26/12 16:58
03/26/12 16:58
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
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
///////////////////////////////
#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.htmlkö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 ...
Last edited by ratz; 03/26/12 17:10.
|
|
|
Re: brauche einen Tür coe wie in A5
[Re: ratz]
#398034
03/26/12 17:04
03/26/12 17:04
|
Joined: Aug 2007
Posts: 1,922 Schweiz
Widi
Serious User
|
Serious User
Joined: Aug 2007
Posts: 1,922
Schweiz
|
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.  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.
Last edited by Widi; 03/26/12 17:11.
|
|
|
|