Gamestudio Links
Zorro Links
Newest Posts
Trading Journey
by howardR. 04/28/24 09:55
Zorro Trader GPT
by TipmyPip. 04/27/24 13:50
Help with plotting multiple ZigZag
by M_D. 04/26/24 20:03
Data from CSV not parsed correctly
by jcl. 04/26/24 11:18
M1 Oversampling
by jcl. 04/26/24 11:12
Why Zorro supports up to 72 cores?
by jcl. 04/26/24 11:09
Eigenwerbung
by jcl. 04/26/24 11:08
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
5 registered members (ozgur, howardR, AndrewAMD, exile, Ayumi), 725 guests, and 4 spiders.
Key: Admin, Global Mod, Mod
Newest Members
wandaluciaia, Mega_Rod, EternallyCurious, howardR, 11honza11
19049 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 2 1 2
beendet die WHILE aber wieso? #293920
10/14/09 19:37
10/14/09 19:37
Joined: Oct 2005
Posts: 612
Inari Offline OP
User
Inari  Offline 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 wink

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
Code:
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: Inari] #293945
10/15/09 02:16
10/15/09 02:16
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline
Senior Expert
Superku  Offline
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Zu wenig Code, um Aussagen treffen zu können. Was ist z.B. starte_funktion ?


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
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 Offline
Senior Member
maslone1  Offline
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: maslone1] #293977
10/15/09 10:04
10/15/09 10:04
Joined: May 2005
Posts: 2,713
Lübeck
Slin Offline
Expert
Slin  Offline
Expert

Joined: May 2005
Posts: 2,713
Lübeck
Setz mal testweise vor dem löschen der Entity my und you gleich NULL.

Re: beendet die WHILE aber wieso? [Re: Inari] #293979
10/15/09 10:38
10/15/09 10:38
Joined: Jun 2008
Posts: 428
Rasch Offline
Senior Member
Rasch  Offline
Senior Member

Joined: Jun 2008
Posts: 428
Ich hab das Gefühl das du einen Aufruf Fehler machst.

Statt key_enter == 1 in eine While Schleife zu packen und damit vermutlich deine Funktion aufzurufen die wiederum in einer While Schleife mit einer gewissen wait Zeit die Einheit erschafft wäre ein einmaliges starten korrekt.

Also entweder vor die while Schleife in der Main deine "Starte Funktion" legen oder per on_enter = starte_funktion aufrufen.

Da wir deinen Code nicht richtig einsehen können kann ich nur vermuten das deine Funktion so aussieht:

function starte_funktion()
{
while (1)
{
ent_create(entity, pos, Lied);
wait(random(-1));
{
}

Re: beendet die WHILE aber wieso? [Re: Slin] #293980
10/15/09 10:40
10/15/09 10:40
Joined: Feb 2006
Posts: 1,011
Germany
pegamode Offline
Serious User
pegamode  Offline
Serious User

Joined: Feb 2006
Posts: 1,011
Germany
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.

Zusätzlich würde ich die while-Schleife in der main entfernen und stattdessen lieber den on_enter-Befehl nutzen.

Gruß
Pegamode.

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 Offline
Expert
Slin  Offline
Expert

Joined: May 2005
Posts: 2,713
Lübeck
Originally Posted By: pegamode
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 tongue 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 Offline OP
User
Inari  Offline OP
User

Joined: Oct 2005
Posts: 612
Originally Posted By: H.F.Pohl
Zu wenig Code, um Aussagen treffen zu können. Was ist z.B. starte_funktion ?
ups... ich habe was vergessen crazy tut mir leid Leute

@maslone1
ich hatte in die WHILE der MAIN ne DRAW_TEXT Funktion gesetzt und es so erfahren frown das die WHILE beendet wird

@Slin
hab ich gemacht, hat das Skript aber überhauptnicht gemocht grin


vergesst den Code zu Anfang, ich setzt ihn mal neu rein
Code:
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).
Code:
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 wink
Code:
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: Inari] #294027
10/15/09 17:23
10/15/09 17:23
Joined: Aug 2007
Posts: 1,922
Schweiz
Widi Offline
Serious User
Widi  Offline
Serious User

Joined: Aug 2007
Posts: 1,922
Schweiz
Hast du auh schon den Vorschlag von Rasch probiert?

if(key_enter).... , da werden jedes Frame die Entities erzeugt, solange die Entertaste gedrückt wird. Wenn du die Taste nur eine halbe Sekunde drückst, wird bei einer Framerate von 60 die Function starte_function() 30 mal aufgerufen.
Verwende stattdessen on_enter...

Trotzdem sollte die main sich nicht beenden.

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 Offline OP
User
Inari  Offline 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!

Page 1 of 2 1 2

Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1