3 registered members (Quad, VoroneTZ, 1 invisible),
862
guests, and 3
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
beendet die WHILE aber wieso?
#293920
10/14/09 19:37
10/14/09 19:37
|
Joined: Oct 2005
Posts: 612
Inari
OP
User
|
OP
User
Joined: Oct 2005
Posts: 612
|
Hallo Leute ich habe ein Problem mit einer Funktion welche ich nicht ganz nachvollziehen kann, vieleicht hat einer von euch eine Idee In Worten Ich lasse über die MAIN eine WHILE laufen worin über eine IF, per Taste eine Funktion gestartet werden kann. In der Funktion wird in Regelmäßigen abstand von ca ner Sekunde (mal mehr mal weniger) ein Entitie CREATET. Die Entites bewegen sich per C_MOVE durch das Level, wenn sie aber einen gewissen Punkt erreichen (die KILLER) wird ein SKILL verändert und sie lösen sich langsam auf und löschen sind letztlich. Sobald aber der erste sich gelöscht hat wird die WHILE in der MAIN beendet! Warum es so ist, ist das was ich nicht verstehe! In Skript-Form
function main()
{
...
while(1)
{
if(key_enter == 1 ...) {starte_funktion();}
wait(1);
}
}
function Lied()
{
while (my != NULL)
{
....
if(((vec_dist(Killer1.x, me.x) < 2)
|| (vec_dist(Killer2.x, me.x) < 2)
|| (vec_dist(Killer3.x, me.x) < 2)
|| (vec_dist(Killer4.x, me.x) < 2))
{
my.skill40 = 4;
}
else
{
if(my.skill40 == 4)
{
my.alpha-=5*time_step;
if(my.alpha <= 10){ent_remove(me);}
}
}
wait (1);
}
}
Inari
|
|
|
Re: beendet die WHILE aber wieso?
[Re: Superku]
#293976
10/15/09 09:16
10/15/09 09:16
|
Joined: Jul 2007
Posts: 424 EUROPE
maslone1
Senior Member
|
Senior Member
Joined: Jul 2007
Posts: 424
EUROPE
|
es ist zwar tatsächlich zu wenig code angeführt um hier eine eindeutige antwort bzw. lösungsvorschlag anzugeben, aber ich glaube nicht, dass die while schleife in der main "gelöscht" wird.
Leicht zu testen: schreibe in der main-while schleife folgende anweisung:
if(key_t != 0) {printf("While Schleife in Ordnung",0);} und nachdem der fehler eintritt drücke die taste "T". Wenn du nun die Meldung erhältst, dann ist die while schleife noch aktiv und der fehler liegt tatsächlich wo anders...
Ich denke eher, dass der fehler beim versehentlichen löschen einer anderen funktion oder einer falschen anweisung entsteht.
Last edited by maslone1; 10/15/09 09:17.
A8c, Blender, FlStudio, Unity3d
|
|
|
Re: beendet die WHILE aber wieso?
[Re: pegamode]
#293981
10/15/09 10:57
10/15/09 10:57
|
Joined: May 2005
Posts: 2,713 Lübeck
Slin
Expert
|
Expert
Joined: May 2005
Posts: 2,713
Lübeck
|
Um eine genaue Aussage machen zu können ist tatsächlich zu wenig Code da, da sich allerdings eine Veränderung ergibt, nachdem der ent_remove-Befehl aufgerufen wurde, deutet alles darauf hin, dass der my-Pointer an irgendeiner Stelle falsch gesetzt ist. Mit dem ent_remove werden alle Funktionen beendet, die zu dieser Entität gehören, samt ihrer Subfunktionen solange in diesen der my-Pointer nicht explizit auf NULL gesetzt wurde. Sag ich ja Aber mit deiner Erklärung wird anderen vielleicht klarer warum...
|
|
|
Re: beendet die WHILE aber wieso?
[Re: Slin]
#294026
10/15/09 17:02
10/15/09 17:02
|
Joined: Oct 2005
Posts: 612
Inari
OP
User
|
OP
User
Joined: Oct 2005
Posts: 612
|
Zu wenig Code, um Aussagen treffen zu können. Was ist z.B. starte_funktion ? ups... ich habe was vergessen tut mir leid Leute @maslone1 ich hatte in die WHILE der MAIN ne DRAW_TEXT Funktion gesetzt und es so erfahren das die WHILE beendet wird @Slin hab ich gemacht, hat das Skript aber überhauptnicht gemocht vergesst den Code zu Anfang, ich setzt ihn mal neu rein
function main()
{
...
while(1)
{
draw_text("ich bin aktiv!",100,10,vector(100,100,255));
if(key_enter == 1 ...) {starte_funktion();}
wait(1);
}
}
Der "Creator_1" ist der Punkt (Entitie) im Level von dem aus die Objekte geschaffen werden und ihren Weg durchs Level beginnen (per C_MOVE).
function Objekt1()
{
my = ent_create ("Kugel.mdl", temp, Kraft);
my.skill1=Creator_1.skill1; // in den Skills sind die Positionswerte gespeichert
my.skill2=Creator_1.skill2;
my.skill3=Creator_1.skill3;
}
function starte_funktion()
{
Objekt1();
wait(-0.5);
Objekt1();
wait(-0.5);
Objekt1();
wait(-0.5);
Objekt1();
}
Ich habe die Funktion etwas umgeschrieben, also nicht wundern
function Kraft()
{
...
while (my.alpha >= 10)
{
if(((vec_dist(Killer1.x, me.x) < 2)
|| (vec_dist(Killer2.x, me.x) < 2)
|| (vec_dist(Killer3.x, me.x) < 2)
|| (vec_dist(Killer4.x, me.x) < 2)) ...)
{
my.skill40 = 4;
}
else
{
if(my.skill40 == 4) {my.alpha-=5*time_step;}
}
wait (1);
}
ent_remove(me);
}
hoffentlich habe ich diesmal nichts vergesssen Inari
|
|
|
Re: beendet die WHILE aber wieso?
[Re: Widi]
#294043
10/15/09 19:18
10/15/09 19:18
|
Joined: Oct 2005
Posts: 612
Inari
OP
User
|
OP
User
Joined: Oct 2005
Posts: 612
|
es wird noch verrückter denn wie es aussieht wird die WHILE garnicht beendet! ich habe hinter die WHILE ein sys_exit(NULL); gesetzt aber es wird einfach nicht aufgerufen! Mit anderen Worten die WHILE wird garnicht beenden und ist doch nicht aktiv! hä? @Widi ich verhindere es durch eine "Verriegelung" if(key_enter && block == 0) {block = 1;} Außerdem will diese on_funktionen nicht bei funzen!? zb aus dem Manual: function gexit() { sys_exit("bye bye..."); }on_x = gexit; es reagiert nichts wenn ich auf X drücke!
|
|
|
|