Gamestudio Links
Zorro Links
Newest Posts
Zorro 2.70
by jcl. 09/29/25 09:24
optimize global parameters SOLVED
by dBc. 09/27/25 17:07
ZorroGPT
by TipmyPip. 09/27/25 10:05
assetHistory one candle shift
by jcl. 09/21/25 11:36
Plugins update
by Grant. 09/17/25 16:28
AUM Magazine
Latest Screens
Rocker`s Revenge
Stug 3 Stormartillery
Iljuschin 2
Galactic Strike X
Who's Online Now
3 registered members (AndrewAMD, Ayumi, NewbieZorro), 14,141 guests, and 5 spiders.
Key: Admin, Global Mod, Mod
Newest Members
krishna, DrissB, James168, Ed_Love, xtns
19168 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
timing frage zur wait() funktion #282903
08/04/09 14:57
08/04/09 14:57
Joined: Jun 2008
Posts: 146
Deutschland
M
M4sterm1nd Offline OP
Member
M4sterm1nd  Offline OP
Member
M

Joined: Jun 2008
Posts: 146
Deutschland
Hallo liebe GS-Comunity,

Ich habe ein kleines Script in lite-c geschrieben.

Es ist einfach nur ein kleines Menu wo man im Hintergrund einen Level sieht später sollen sich auch verschiedene Entitys ins Bild bewegen so das das Menu nicht langweilig ist.

Aber zuerst einmal eine ganz andere Frage:
Bevor das Menu kommt lasse ich noch ein Panel einblenden wo der Name vom Spiel steht. Dort soll eigentlich der Mauszeiger noch nicht eingeblendet werden. Allerdings wird er Angezeigt und ich verstehe nicht warum. Ich gehe einfach mal davon aus das ich die wait() funktion nicht richtig verstehe.
Den Code habe ich auf verschiedene scriptdateien aufgeteilt.

Schaut es euch doch bitte einmal an.

Click to reveal.. (main.c)


// Main

#include <acknex.h> // pure mode
#include <default.c>

#define PRAGMA_PATH "Vorspann"
#define PRAGMA_PATH "Menu"
#define PRAGMA_PATH "Endbildschirm"

#include "vorspann.c"
#include "endbildschirm.c"
#include "menu.c"



function main()
{

video_mode = 8; // screen size 1024x768
video_depth = 32; // 32 bit colour D3D mode
video_screen = 1; // Vollbild

vec_set(screen_color,vector(255,0,0)); // blau

wait(-3); //wartet bis das Fenster erscheint

//-----
// Vorspann
//

vorspann();

//
// Vorspann ENDE
//-----

//-----
// Menu
//

menu(); //Menu noch im bau laugh

//
// Menu ENDE
//-----


} // Ende von MAIN




Click to reveal.. (vorspann.c)


// Vorspann

BMAP* Titel_jpg;
PANEL* VorspannPANEL;

function vorspann()
{

Titel_jpg = bmap_create("Titel.jpg");
VorspannPANEL = pan_create("bmap = Titel_jpg;",3);

VorspannPANEL.flags = VISIBLE;


while (key_any == 0) { wait(1); }

ptr_remove(VorspannPANEL);
ptr_remove(Titel_jpg);


}




Click to reveal.. (menu.c)


// Menu

BMAP* Menu_Rahmen_tga;
BMAP* Menu_back_tga;
BMAP* Maus_tga;
BMAP* Exit_button_normal_tga;
BMAP* Exit_button_over_tga;
BMAP* Exit_button_click_tga;
PANEL* MainmenuPANEL;
PANEL* MainmenuBack_pan;


function menu()
{

level_load("menulvl.wmb");
wait(3);

//if(!VorspannPANEL)
mouse_mode = 2;

Maus_tga = bmap_create("Maus.tga");
mouse_map = Maus_tga;

Menu_Rahmen_tga = bmap_create("Menu_Rahmen.tga");
Exit_button_normal_tga = bmap_create("Exit_button_normal.tga");
Exit_button_over_tga = bmap_create("Exit_button_over.tga");
Exit_button_click_tga = bmap_create("Exit_button_click.tga");

MainmenuPANEL = pan_create("bmap = Menu_Rahmen_tga;
pos_x = 75;
pos_y = 100;
button (30, 380, Exit_button_click_tga, Exit_button_normal_tga, Exit_button_over_tga,endbildschirm,NULL,NULL);
",2);

Menu_back_tga = bmap_create("Menu_back.tga");
MainmenuBack_pan = pan_create("bmap = Menu_back_tga;pos_x = 75; pos_y = 101;",1);

MainmenuPANEL.flags = VISIBLE;
MainmenuBack_pan.alpha = 25;
MainmenuBack_pan.flags = VISIBLE | TRANSLUCENT;

while(MainmenuBack_pan)
{
while(mouse_mode > 0)
{
mouse_pos.x = mouse_cursor.x;
mouse_pos.y = mouse_cursor.y;
wait(1);
}

while(1)
{
MainmenuBack_pan.pos_y += 1;
wait(10);
if (MainmenuBack_pan.pos_y == 110) { break;}
}


while(1)
{
MainmenuBack_pan.pos_y -= 1;
wait(10);
if (MainmenuBack_pan.pos_y == 101) { break;}
}

while(1)
{
MainmenuBack_pan.alpha -= 1;
wait(10);
if(MainmenuBack_pan.alpha == 15) { break;}
}

while(1)
{
MainmenuBack_pan.alpha += 1;
wait(10);
if(MainmenuBack_pan.alpha == 25) { break;}
}



}

}



Click to reveal.. (endbildschirm.c)


// Endbildschirm

BMAP* Ende_jpg;
PANEL* EndbildschirmPANEL;

function endbildschirm()
{
while (key_any == 1) { wait(1); }

Ende_jpg = bmap_create("Ende.jpg");
EndbildschirmPANEL = pan_create("bmap = Ende_jpg;",5);

EndbildschirmPANEL.flags = VISIBLE;

while (key_any == 0) { wait(1); }

sys_exit("bis bald ...");

}



Wichtig finde ich auch den Speicher möglichst frei zu halten.
also die Panels und Bmaps sollen erst dann erstellt werden wenn sie benötigt werden und sobald sie nicht mehr benötigt werden auch wieder aus dem Speicher verschwinden!

DANKE!!!

Re: timing frage zur wait() funktion [Re: M4sterm1nd] #282909
08/04/09 15:42
08/04/09 15:42
Joined: Dec 2008
Posts: 271
Saturnus Offline
Member
Saturnus  Offline
Member

Joined: Dec 2008
Posts: 271
Hallo!

vorspann() und menu() werden direkt hintereinander aufgerufen. Dadurch werden der Mauszeiger und das Menü zusammen mit dem "Vorspann-Panel" eingeblendet. Das Menü wird wegen seines kleineren Layers vom Panel verdeckt, der Mauszeiger allerdings nicht.

Um dies zu vermeiden, solltest du Menü und Mauszeiger erst anzeigen, sobald der Panel nicht mehr existiert:
Code:
while (VorspannPANEL)
{
    wait(1);
}

//... jetzt erst Menü und Mauszeiger einblenden


Den Pointer "VorspannPANEL" müsstest du am Ende von vorspann() noch auf NULL setzen, damit dies funktioniert (geschieht durch ptr_remove() nicht automatisch).

Was glaubst du denn an wait() nicht verstanden zu haben?

Re: timing frage zur wait() funktion [Re: Saturnus] #282910
08/04/09 15:48
08/04/09 15:48
Joined: Jun 2008
Posts: 146
Deutschland
M
M4sterm1nd Offline OP
Member
M4sterm1nd  Offline OP
Member
M

Joined: Jun 2008
Posts: 146
Deutschland
Ach nee denn hatte ich einfach nur einen denkfehler drinn.


Danke für die schnelle Antwort und jetzt werde ich erstmal deinen Tip testen smile

*Edit: getestet und funzt perfekt thx wink

so jetzt zu meiner 2. frage:

das MainmenuBack_pan soll sich immer wenige Pixel hoch und runter bewegen und der alpha-wert soll sich auch immer so verändert das es leicht blinkt.

Wenn ich mein script starte dann bleibt einfach alles so wie es ist.

hier nochmal der code zur übersicht halber
Click to reveal.. (menu.c)

// Menu

BMAP* Menu_Rahmen_tga;
BMAP* Menu_back_tga;
BMAP* Maus_tga;
BMAP* Exit_button_normal_tga;
BMAP* Exit_button_over_tga;
BMAP* Exit_button_click_tga;
PANEL* MainmenuPANEL;
PANEL* MainmenuBack_pan;


function menu()
{

level_load("menulvl.wmb");
wait(3);

while (VorspannPANEL)
{
wait(1);
}

mouse_mode = 2;

Maus_tga = bmap_create("Maus.tga");
mouse_map = Maus_tga;

Menu_Rahmen_tga = bmap_create("Menu_Rahmen.tga");
Exit_button_normal_tga = bmap_create("Exit_button_normal.tga");
Exit_button_over_tga = bmap_create("Exit_button_over.tga");
Exit_button_click_tga = bmap_create("Exit_button_click.tga");

MainmenuPANEL = pan_create("bmap = Menu_Rahmen_tga;
pos_x = 75;
pos_y = 100;
button (30, 380, Exit_button_click_tga, Exit_button_normal_tga, Exit_button_over_tga,endbildschirm,NULL,NULL);
",2);

Menu_back_tga = bmap_create("Menu_back.tga");
MainmenuBack_pan = pan_create("bmap = Menu_back_tga;pos_x = 75; pos_y = 101;",1);

MainmenuPANEL.flags = VISIBLE;
MainmenuBack_pan.alpha = 25;
MainmenuBack_pan.flags = VISIBLE | TRANSLUCENT;

while(MainmenuBack_pan)
{
while(mouse_mode > 0)
{
mouse_pos.x = mouse_cursor.x;
mouse_pos.y = mouse_cursor.y;
wait(1);
}

while(1)
{
MainmenuBack_pan.pos_y += 1;
wait(10);
if (MainmenuBack_pan.pos_y == 110) { break;}
}


while(1)
{
MainmenuBack_pan.pos_y -= 1;
wait(10);
if (MainmenuBack_pan.pos_y == 101) { break;}
}

while(1)
{
MainmenuBack_pan.alpha -= 1;
wait(10);
if(MainmenuBack_pan.alpha == 15) { break;}
}

while(1)
{
MainmenuBack_pan.alpha += 1;
wait(10);
if(MainmenuBack_pan.alpha == 25) { break;}
}



}

}


Last edited by M4sterm1nd; 08/04/09 17:53.
Re: timing frage zur wait() funktion [Re: M4sterm1nd] #282955
08/04/09 20:18
08/04/09 20:18
Joined: Dec 2008
Posts: 271
Saturnus Offline
Member
Saturnus  Offline
Member

Joined: Dec 2008
Posts: 271
Gleich zu Beginn der Schleife "while(MainmenuBack_pan)" hast du eine weitere Schleife für die Maussteuerung eingefügt. Da die Bedingung dieser Schleife (mouse_mode > 0) - ausgehend von diesem Code-Ausschnitt - immer wahr ist, wird die Schleife zu keinem Zeitpunkt verlassen. Die nachfolgenden Schleifen für die Animation des Menüs werden dadurch gar nicht erst erreicht.

Es wird also nur die Schleife für die Maussteuerung ausgeführt und der Rest nicht.

Du könntest den Code vereinfachen und alles in eine einzige Schleife einfügen.

Zum Beispiel so:
Code:
var wave = 0;

while(MainmenuBack_pan)
{
	mouse_pos.x = mouse_cursor.x;
	mouse_pos.y = mouse_cursor.y;
	
	wave += 5 * time_step;
	wave %= 360;
	MainmenuBack_pan.pos_y = 100 + 10 * sin(wave);
	MainmenuBack_pan.alpha = 10 + 10 * abs(sin(wave));
	
	wait(1);
}


Für die Bewegungen und Transparenzänderungen des Menüs wird hier die Sinusfunktion verwendet. Ich habe hier lediglich Testwerte eingefügt, die gegebenenfalls angepasst werden müssten.^^

Re: timing frage zur wait() funktion [Re: Saturnus] #282959
08/04/09 21:00
08/04/09 21:00
Joined: Jun 2008
Posts: 146
Deutschland
M
M4sterm1nd Offline OP
Member
M4sterm1nd  Offline OP
Member
M

Joined: Jun 2008
Posts: 146
Deutschland
Du bist der größte!

Es funzt!!!


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

Gamestudio download | 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