|
1 registered members (Grant),
999
guests, and 2
spiders. |
|
Key:
Admin,
Global Mod,
Mod
|
|
|
schnelle frage -> show Cam soll sich nur 90° drehen
#397685
03/22/12 09:58
03/22/12 09:58
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
Hi da ich zurzeit krank bin und zuhause an mein spiel wieter arbeite bin ich jetzt bei den Punkt angekommen, dass ich eine Camera brauche, die nach 5 Sec sich um 90 grad dreht. was mache ich falsch wenn ich es so versuche:
action cam_move()
{
wait(-5);
while(1)
{
camera.pan += 5* time_step;
wait(1);
}
}
oder anders gefragt: wie stoppe ich die drehung wieder  ?
|
|
|
Re: schnelle frage -> show Cam soll sich nur 90° drehen
[Re: ratz]
#397686
03/22/12 10:08
03/22/12 10:08
|
Joined: Dec 2003
Posts: 988 Germany, Magdeburg
JoGa
User
|
User
Joined: Dec 2003
Posts: 988
Germany, Magdeburg
|
naja, indem du eine Bedingung einbaust. im Moment heißt deine Bedingung in der while-schleife (1), ist also immer wahr und das ding dreht sich endlos. versuch die das doch mal mit der Bedingung, dass die Drehung 90° erreicht. also z.B
function drehung_90_grad()
{
var ist_drehung;
int max_drehung=90;
int speed = 5;
while(1)
{
wait(-5);
ist_drehung = 0;
while(ist_drehung < max_drehung)
{
camera.pan += speed * time_step;
ist_drehung += speed * time_step;
wait(1);
}
}
}
damit hättest ne funktion, die ab Aufrufen die Kamera alle 5 sec um 90° dreht.
Last edited by JoGa; 03/22/12 10:17.
|
|
|
Re: schnelle frage -> show Cam soll sich nur 90° drehen
[Re: JoGa]
#397688
03/22/12 10:14
03/22/12 10:14
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
habs ausprobiert ... dreht sich immer noch endlos nach 5 sec
Last edited by ratz; 03/22/12 10:15.
|
|
|
Re: schnelle frage -> show Cam soll sich nur 90° drehen
[Re: ratz]
#397689
03/22/12 10:18
03/22/12 10:18
|
Joined: Dec 2003
Posts: 988 Germany, Magdeburg
JoGa
User
|
User
Joined: Dec 2003
Posts: 988
Germany, Magdeburg
|
sry, hatte was im Code vergessen :-> ist_drehung muss natürlich erhöht werden, habs oben verbessert. aber ich glaube, der Code hier ist etwas schöner, als der obere:
function dreh_dich(var drehung)
{
int speed = 5;
var camera_neu_pan = camera.pan + drehung;
while(1)
{
wait(-5);
while(camera.pan < camera_neu_pan)
{
camera.pan += speed * time_step;
wait(1);
}
}
}
so Parameterangaben in den Funktionen kannst du dann verwenden, um die Funktion allgemeiner zu halten.
Last edited by JoGa; 03/22/12 10:26.
|
|
|
Re: schnelle frage -> show Cam soll sich nur 90° drehen
[Re: ratz]
#397690
03/22/12 10:29
03/22/12 10:29
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
SO GEHTS
function cam_move()
{
var drehung;
var speed = 5;
wait(-5);
while(1)
{
drehung++;
if(drehung == 90)
{
speed = 0;
}
camera.pan += speed* time_step;
wait(1);
}
}
danke für den anstups ^^
Last edited by ratz; 03/22/12 10:29.
|
|
|
Re: schnelle frage -> show Cam soll sich nur 90° drehen
[Re: ratz]
#397691
03/22/12 10:39
03/22/12 10:39
|
Joined: Dec 2003
Posts: 988 Germany, Magdeburg
JoGa
User
|
User
Joined: Dec 2003
Posts: 988
Germany, Magdeburg
|
kein Ding ;-) beachte jedoch, dass deine Funktion nicht beendet wird! die while-Schleife wird trotz des beenden nicht verlassen. Dein erster Post machte den Eindruck, dass sich die Entity alle 5 sec drehen soll (deine while(1)-Schleife). Wenn das nicht so ist, dann brauchst du bei meinem zweiten Beispiel die erste While-Schleife garnicht:
function dreh_dich(var drehung)
{
int speed = 5;
var camera_neu_pan = camera.pan + drehung;
wait(-5);
while(camera.pan < camera_neu_pan)
{
camera.pan += speed * time_step;
wait(1);
}
}
bzw bei deiner kannst du statt speed = 0; auch einfach return; schreiben und die Funktion braucht nicht mehr weiter "im Leerlauf Kreis zu fahren" 
Last edited by JoGa; 03/22/12 10:40.
|
|
|
Re: schnelle frage -> show Cam soll sich nur 90° drehen
[Re: JoGa]
#397730
03/22/12 21:43
03/22/12 21:43
|
Joined: Oct 2008
Posts: 341
ratz
OP
Senior Member
|
OP
Senior Member
Joined: Oct 2008
Posts: 341
|
ich will das immer ganz einfach und kurtz halten dann so:
function cam_move()
{
var drehung;
var speed = 5;
wait(-5);
while(1)
{
drehung++;
if(drehung == 90)
{
return 0;
}
camera.pan += speed* time_step;
wait(1);
}
}
danke nochmals 
|
|
|
Re: schnelle frage -> show Cam soll sich nur 90° drehen
[Re: ratz]
#397758
03/23/12 10:47
03/23/12 10:47
|
Joined: Aug 2007
Posts: 1,922 Schweiz
Widi
Serious User
|
Serious User
Joined: Aug 2007
Posts: 1,922
Schweiz
|
Schlecht (unübersichtlich) programmiert. Vermeide wenn möglich das "return"
function cam_move()
{
var drehung;
var speed = 5;
wait(-5);
for(drehung = 0; drehung <= 90; drehung ++)
{
camera.pan += speed * time_step;
wait(1);
}
}
Und falls du eine while Schleife verwenden willst, initialisiere "drehung" mit 0, weil sonst irgendwas in drehung enthalten ist. Auch ist der gedrehte Winkel am Schluss nicht unbedingt 90 Grad?
function cam_move()
{
var drehung;
var speed = 5;
wait(-5);
for(drehung = 0; drehung <= 90; drehung += speed * time_step;)
{
camera.pan += speed * time_step;
wait(1);
}
}
So drehst du deine Kamera um 90 Grad.
Last edited by Widi; 03/23/12 10:59.
|
|
|
Re: schnelle frage -> show Cam soll sich nur 90° drehen
[Re: Widi]
#397759
03/23/12 10:56
03/23/12 10:56
|
Joined: Jun 2009
Posts: 2,210 Bavaria, Germany
Kartoffel
Expert
|
Expert
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
|
Und falls du eine while Schleife verwenden willst, initialisiere "drehung" mit 0, weil sonst irgendwas in drehung enthalten ist. Bei vars geht das eigentlich... aber Vektoren machen damit ziemlich probleme EDIT: oder meitest du das "for(drehung = 0;..." Trotzdem ist es immer gut ne Variable/Vektor/etc. mit einem Wert zu initialisieren oder gleich nach dem initialisieren einen Wert zu setzten 
Last edited by Kartoffel; 03/23/12 10:57.
POTATO-MAN saves the day! - Random
|
|
|
Re: schnelle frage -> show Cam soll sich nur 90° drehen
[Re: Kartoffel]
#397762
03/23/12 11:06
03/23/12 11:06
|
Joined: Aug 2007
Posts: 1,922 Schweiz
Widi
Serious User
|
Serious User
Joined: Aug 2007
Posts: 1,922
Schweiz
|
from the manual: In C-Script werden sämtliche nicht initialisierte Variablen automatisch auf 0 initialisiert. Dies geschieht zu Ungunsten der Performance lokaler Variablen. LC Daher ist die Autoinitialisierung in Lite-C wählbar und kann mit der PRAGMA_ZERO-Definition angeschaltet werden:
#define PRAGMA_ZERO // initialize variables Wird diese Zeile am Anfang des Skriptes eingefügt, werden alle nicht initialisierten globalen und lokalen Variablen automatisch auf Null initialisiert. Funktionsaufrufe sind dann etwas langsamer.
var drehung; while (drehung < 90) --> drehung kann irgendwas enthalten, kann also schon über 90 sein und die Schleife wird nicht durchgeführt. Benutze: var drehung = 0; für die Lösung mit der while Schleife. Bei der for Schleife ist das nicht notwendig, da ja am ersten Punkt die Variable auf 0 initialisiert wird.
|
|
|
|