|
2 registered members (EW_bites, Lapsa),
2,391
guests, and 6
spiders. |
|
Key:
Admin,
Global Mod,
Mod
|
|
|
timing frage zur wait() funktion
#282903
08/04/09 14:57
08/04/09 14:57
|
Joined: Jun 2008
Posts: 146 Deutschland
M4sterm1nd
OP
Member
|
OP
Member
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. // 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 // // Menu ENDE //----- } // Ende von MAIN
// 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);
}
// 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;} }
}
}
// 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
Member
|
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:
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
M4sterm1nd
OP
Member
|
OP
Member
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  *Edit: getestet und funzt perfekt thx  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 // 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
Member
|
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:
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.^^
|
|
|
|