|
|
Fragen zu Menüpanels
#389772
12/18/11 12:57
12/18/11 12:57
|
Joined: Dec 2011
Posts: 13
witzdestages
OP
Newbie
|
OP
Newbie
Joined: Dec 2011
Posts: 13
|
Hallo, habe mein Projekt mit nem Panel angefangen das das Hauptmenü darstellen soll, doch habe damit schon Probleme, da das im Handbuch und in der Hilfedatei des 3dgs nicht, oder nicht direkt beschrieben wird. Ich habe 2 Panels gemacht: 1 Hauptpanel und eins das per button geöffnet werden sollte und hier ist auch schon das erste Problem: wie kann ich ein zweites Panel und einen Text per Button öffnen ? Dann habe einem Button eine Funktion zugewiesen die eigentlich das erste Level laden soll, aber auch das funktioniert nicht, egal wie oft ich das klicke. Panels und Texte per Buttonklick wieder schließen wird auch niergendwo erklärt. Wenn ich das zweite Panel und den Text auf VISIBLE stelle wird der Text und das Panel angezeigt und es funktioniert nur die quit Funktion Ich arbeite gerade mit 3D Gamestudio 7,5 Extra Edition von Sybex (falls das wichtig ist) Habe hier mal das Script soweit wie ich gekommen bin. Der Button ist nur aus Testzwecken immer der selbe, weil ich erstmal sehen wollte obs überhaupt funktioniert.
//////////////////////////////////////////////////////////////////
#include <acknex.h>
#include <default.c>
//////////////////////////////////////////////////////////////////
BMAP* haupt_pan_bmp = "pan.bmp"; //Das erste Bild
BMAP* ende_pan_bmp = "pan2.bmp";
BMAP* maus_pcx = "mouse.pcx";
FONT* panelfont = "font.tga";
STRING* beenden = " Spiel beenden ?";
//////////////////////////////////////////////////////////////////
function main()
{
video_set(1280,720,32,2); // Bildauflösung
mouse_map = maus_pcx; // Mauszeiger
mouse_mode = 4; // Mausfunktion
}
function quit() // Beendet das Programm
{
sys_exit(NULL);
}
function neu(); // Sollte Level 1 Laden
{
level_load("project.wmb");
}
//////////////////////////////////////////////////////////////////
PANEL* haupt_pan = // Das Hauptmenü
{
pos_x = 0;
pos_y = 0;
layer = 1;
bmap = haupt_pan_bmp;
button_neu (40, 50, "neuc.bmp", "neu.bmp", "neuo.bmp", neu, NULL, NULL); // Dieser Button soll das Level Laden
button_ende (40, 100, "neuc.bmp", "neu.bmp", "neuo.bmp", ende_pan, NULL, NULL); // Dieser Button soll das Panel "ende_pan" und den Text "pantext" einbelden
flags = OVERLAY | VISIBLE;
}
PANEL* ende_pan = // Spiel Beenden ? JA - NEIN
{
pos_x = 200;
pos_y = 310;
layer = 1;
bmap = ende_pan_bmp;
button_ja (60, 50, "neuc.bmp", "neu.bmp", "neuo.bmp", quit, NULL, NULL); // Programm wird beendet
button_nein (280, 50, "neuc.bmp", "neu.bmp", "neuo.bmp", exit_ende_pan, NULL, NULL); // Soll das Panel "ende_pan" und den Text "pantext" schließen
flags = OVERLAY;
}
TEXT* pantext = // Dieser Text soll mit dem Panel "ende_pan" eingebeldet werden
{
pos_x = 300;
pos_y = 320;
font = (panelfont);
layer = 2;
string (beenden);
}
Last edited by witzdestages; 12/18/11 12:59.
|
|
|
Re: Fragen zu Menüpanels
[Re: witzdestages]
#389783
12/18/11 16:28
12/18/11 16:28
|
Joined: Sep 2003
Posts: 6,861 Kiel (Germany)
Superku
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
|
Hm wie willst du das Programm denn gestartet und die Buttons getestet haben, das kompiliert doch so gar nicht?
function neu(); // Sollte Level 1 Laden
{
level_load("project.wmb");
}
Dort ist ein Semikolon zu viel (hinter "neu()"). button_neu und button_ende (sowie die anderen beiden), die Befehle gibt es doch nicht, sondern nur "button". Derart benennen kannst du Elemente also nicht. Die Angabe von "ende_pan" als Funktion bei "button_ende" ist natürlich so nicht korrekt, button erwartet dort eine Funktion und kein Panel. In dieser Funktion setzt du das besagte Panel einfach auf sichtbar, was in lite-C SHOW und nicht VISIBLE heißt. Übrigens, dem ende_pan(el) würd ich einen höheren Layer als dem Hauptpanel geben.
"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: Fragen zu Menüpanels
[Re: witzdestages]
#389801
12/18/11 18:06
12/18/11 18:06
|
Joined: Sep 2003
Posts: 6,861 Kiel (Germany)
Superku
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
|
VISIBLE ist antiquiert, verwende es nicht, schreibe stattdessen SHOW. Eine Funktion, die das Panel "ende_pan" und den Text "pantext" einblenden soll, sähe aus wie folgt: void haupt_pan_ende_fnc() // der Name ist egal, sollte nur sinnvoll gewählt sein { set(ende_pan,SHOW); // zum Schließen schreibst du eine Funktion, die das SHOW-Flag resettet, also "reset(...,SHOW);" set(pantext,SHOW); } Dann im Haupt-Panel: button(40, 100, "neuc.bmp", "neu.bmp", "neuo.bmp", haupt_pan_ende_fnc, NULL, NULL);
"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: Fragen zu Menüpanels
[Re: Superku]
#389812
12/18/11 19:19
12/18/11 19:19
|
Joined: Dec 2011
Posts: 13
witzdestages
OP
Newbie
|
OP
Newbie
Joined: Dec 2011
Posts: 13
|
Danke, aber es kam eben erst eine Fehler Meldung: Error in 'MAIN' line 72 "SHOW" undeclared identifier Mit VISIBLE klappts aber... Vielen dank.
|
|
|
Re: Fragen zu Menüpanels
[Re: Superku]
#389814
12/18/11 19:34
12/18/11 19:34
|
Joined: Dec 2011
Posts: 13
witzdestages
OP
Newbie
|
OP
Newbie
Joined: Dec 2011
Posts: 13
|
Ich dachte es wäre lite-C in dem ich das Script als *.c abspeichere und die acknex.h + default.c scipte mit einfüge, habe mich nur ans Handbuch gehalten da dort auch stand das alles in lite-C geschieben wird.
C-Script sind doch die alten *.wdl Dateien ?
Oder du hast wieder ne neuere Version als ich, in der wieder vieles geändert wurde. Ich habe wie oben schon geschrieben 3dgs 7.5.
Last edited by witzdestages; 12/18/11 19:35.
|
|
|
Re: Fragen zu Menüpanels
[Re: witzdestages]
#390081
12/22/11 10:08
12/22/11 10:08
|
Joined: Dec 2011
Posts: 15 Germany
Waldnebel
Newbie
|
Newbie
Joined: Dec 2011
Posts: 15
Germany
|
Hatte ein ähnliches Problem.
Probier mal folgendes:
set(textoderpannel,SHOW); //Pannel oder Text auf Sichtbar reset(textoderpanne,SHOW); //Pannel oder Text auf Unsichtbar.
So hab ich es in einer Funktion die via Button aufgerufen wird
Gruß Waldnebel
Last edited by Waldnebel; 12/22/11 10:11.
|
|
|
|