Posted By: Tecizo
menuskript - 04/19/09 12:41
Ich habe ein kleines Menuskript für eine art Piemenu geschriebn:
menu.zip
Hier ein Beispiel wie man es einbinden kann:
Und hier ein beispiel für die Datei menufunktionen.c:
Das Menu wird nur durch die Funktionen draw_quad und draw_text erstellt. Ich hab aber das Gefühl das der Alphawert bei Bildern mit Alphakanal nicht stimmt. Ausserdem sieht das Skalieren mit der draw_quad Funktion nicht so gut aus. Das Skript sollte ab der Version 7.60.0 funktionieren.
menu.zip
Hier ein Beispiel wie man es einbinden kann:
Code:
#include <acknex.h> #include "menu.c" function main() { wait(1); int hauptmenuitems_lenght = 5; //anzahl der elemente MENUITEM* hauptmenuitems = malloc(sizeof(MENUITEM) * hauptmenuitems_lenght); //pointer erstellen hauptmenuitems[0].bmap = bmap_create("fortsetzen.tga"); //bild des elements hauptmenuitems[0].text = "Spiel Fortsetzen"; //text des elements hauptmenuitems[1].bmap = bmap_create("speichern.tga"); //bild des elements hauptmenuitems[1].text = "Spiel Speichern"; //text des elements hauptmenuitems[2].bmap = bmap_create("laden.tga"); //bild des elements hauptmenuitems[2].text = "Spiel Laden"; //text des elements hauptmenuitems[3].bmap = bmap_create("neu.tga"); //bild des elements hauptmenuitems[3].text = "Neues Spiel"; //text des elements hauptmenuitems[4].bmap = bmap_create("beenden.tga"); //bild des elements hauptmenuitems[4].text = "Beenden"; //text des elements int speichermenuitems_lenght = 4; //anzahl der elemente MENUITEM* speichermenuitems = malloc(sizeof(MENUITEM) * speichermenuitems_lenght); //pointer erstellen speichermenuitems[0].bmap = bmap_create("1.tga"); //bild des elements speichermenuitems[0].text = "Spielstand 1"; //text des elements speichermenuitems[1].bmap = bmap_create("2.tga"); //bild des elements speichermenuitems[1].text = "Spielstand 2"; //text des elements speichermenuitems[2].bmap = bmap_create("3.tga"); //bild des elements speichermenuitems[2].text = "Spielstand 3"; //text des elements speichermenuitems[3].bmap = bmap_create("zurueck.tga"); //bild des elements speichermenuitems[3].text = "Zurück"; //text des elements int oeffnenmenuitems_lenght = 4; //anzahl der elemente MENUITEM* oeffnenmenuitems = malloc(sizeof(MENUITEM) * oeffnenmenuitems_lenght); //pointer erstellen oeffnenmenuitems[0].bmap = bmap_create("1.tga"); //bild des elements oeffnenmenuitems[0].text = "Spielstand 1"; //text des elements oeffnenmenuitems[1].bmap = bmap_create("2.tga"); //bild des elements oeffnenmenuitems[1].text = "Spielstand 2"; //text des elements oeffnenmenuitems[2].bmap = bmap_create("3.tga"); //bild des elements oeffnenmenuitems[2].text = "Spielstand 3"; //text des elements oeffnenmenuitems[3].bmap = bmap_create("zurueck.tga"); //bild des elements oeffnenmenuitems[3].text = "Zurück"; //text des elements MENUSEITE* hauptmenuseiten = malloc(sizeof(MENUSEITE) * 3); //pointer erstellen hauptmenuseiten[0].menuitems = hauptmenuitems; //items für diese seite hauptmenuseiten[0].hintergrund = bmap_create("hintergrund.tga"); //hintergrund für diese seite hauptmenuseiten[0].menuitems_lenght = hauptmenuitems_lenght; //anzahl der elemente hauptmenuseiten[1].menuitems = speichermenuitems; //items für diese seite hauptmenuseiten[1].hintergrund = bmap_create("hintergrund2.tga"); //hintergrund für diese seite hauptmenuseiten[1].menuitems_lenght = speichermenuitems_lenght; //anzahl der elemente hauptmenuseiten[2].menuitems = oeffnenmenuitems; //items für diese seite hauptmenuseiten[2].hintergrund = bmap_create("hintergrund2.tga"); //hintergrund für diese seite hauptmenuseiten[2].menuitems_lenght = oeffnenmenuitems_lenght; //anzahl der elemente MENU* hauptmenu = malloc(sizeof(MENU)); //pointer erstellen hauptmenu.auswahlmaske = bmap_create("auswahl.tga"); //bild als "curser" hauptmenu.s1 = 0.3; //geschwindigkeit zum wechseln zwischen elementen hauptmenu.s2 = 10; //geschwindigkeit zum ein/ausblenden hauptmenu.dist = 400; //groesse des kreises hauptmenu.normalsize[0] = 1680; //auflösung des hintergrundbildes hauptmenu.normalsize[1] = 1050; //auflösung des hintergrundbildes hauptmenu.menuseiten = hauptmenuseiten; //die seiten des menus hauptmenu.seite = 0; //ausgewählte seite hauptmenu.schriftart = "Comic Sans MS"; //schriftart hauptmenu.schriftmodus = 0; //schriftmodus 0=normal, 1=fett, 2=kursiv, 3=fett+kursiv hauptmenu.schriftgroesse = 26; //schriftgroesse show_menu(hauptmenu); //menu anzeigen }
Und hier ein beispiel für die Datei menufunktionen.c:
Code:
function menufunktionen(MENU* menu, int selektion) { switch(menu.seite) //funktionen dür die jeweilige seite { case 0: switch(selektion) //funktionen für das jeweilige element { case 0: resume(); break; case 1: menu.seite = 1; break; case 2: menu.seite = 2; break; case 3: new_game(); break; case 4: sys_exit(""); break; } break; case 1: switch(selektion) //funktionen für das jeweilige element { case 0: game_save("save", 0, SV_ALL); break; case 1: game_save("save", 1, SV_ALL); break; case 2: game_save("save", 2, SV_ALL); break; case 3: menu.seite = 0; break; } break; case 2: switch(selektion) //funktionen für das jeweilige element { case 0: game_load("save", 0); break; case 1: game_load("save", 1); break; case 2: game_load("save", 2); break; case 3: menu.seite = 0; break; } break; } }
Das Menu wird nur durch die Funktionen draw_quad und draw_text erstellt. Ich hab aber das Gefühl das der Alphawert bei Bildern mit Alphakanal nicht stimmt. Ausserdem sieht das Skalieren mit der draw_quad Funktion nicht so gut aus. Das Skript sollte ab der Version 7.60.0 funktionieren.