|
Verfasser |
Nachricht |
D4V3 $v1
Junior Mitglied
Beiträge: 13
Gruppe: User
Registriert seit: Apr 2011
Status:
Offline
Danke erhalten: 0
|
[C] Raster-Menü ?
Guten Tag,
Weiß einer von euch, wie ich ein Raster-Menü (like Handys etc.)
in C programmieren kann ?
Von den funktionen her weiß ich einiges.
Soviel ich weiß muss man:
[...]
menu = {"Test","TEST","TEST"}
aktivmenu = 0;
If (pad.Buttons & PSP_CTRL_DOWN)
{
aktivmenu+=3;
}
If (pad.Buttons & PSP_CTRL_UP)
{
aktivmenu-=3;
}
if (pad.Buttons & PSP_CTRL_LEFT)
{
aktivmenu-=1;
}
if (pad.Buttons & PSP_CTRL_RIGHT)
{
aktivmenu+=1;
}
[...]
Um den Code braucht ihr euch nicht zu kümmern, nur möcht ich wissen,
wie man das ganze jetzt grafisch darstellt,also:
Wenn man z.B. Links drückt, soll sich ein Bild nach Links bewegen und rechts...
Beispiel:
Bild von Google Bilder
Dieser Umriss,der sich beim drücken von tasten bewegt, wie kann ich so was darstellen ?
Ich bin für jede Antwort sehr dankbar und kriegt auch ein Danke x3
Liebe Grüße:
David
|
|
09.06.2011 14:25 |
|
|
|
Arktos
Junior Mitglied
Beiträge: 47
Gruppe: User
Registriert seit: May 2011
Status:
Offline
Danke erhalten: 8
|
|
09.06.2011 14:28 |
|
|
|
D4V3 $v1
Junior Mitglied
Beiträge: 13
Gruppe: User
Registriert seit: Apr 2011
Status:
Offline
Danke erhalten: 0
|
RE: [C] Raster-Menü ?
Könnte jemand ein Beispiel machen ?`
z.B. ein Codeschnipsel ...
@Arktos
Danke, aber ich kann aus deinem Beitrag keinen Entschluss ziehen....
An Alle:
Ich kann C;bin selber IT-Entwickler und habe IT-Entwicklung studiert...
Danke schön...
z.B.
Background:
Image* bg1;
bg1 = loadImage("bg1.png");
[...]
blitAlphaImageToScreen(0 ,0 ,480 , 272, bg1, 0, 0);
[...]
Icons:
Sagen wir mal, es gibt neun icons:
Icon1.png
Icon2.png
Icon3.png
Icon4.png
Icon5.png
Icon6.png
Icon7.png
Icon8.png
Icon9.png
[...]
blitAlphaImageToScreen(0 ,0 ,32 , 32, icon1, 25, 25);
[...]
Und der Umriss heißt:
Checked.png
Wie kann ich jetzt machen, dass Checked.png sich beim drücken der Tasten auf die Position der jeweiligen Icons verschiebt ?
Meine Teorie:
[...]
X = 128;
Y = 128;
[...]
blitAlphaImageToScreen(0 ,0 ,32 , 32, umriss, X, Y);
If (pad.Buttons & PSP_CTRL_LEFT)
{
X += 25;
}
Ich weiß der der obrige Code falsch ist und eine millionen syntax fehler hat,
aber ich meine so in der art....
Danke im Vorraus
Dieser Beitrag wurde zuletzt bearbeitet: 09.06.2011 14:46 von D4V3 $v1.
|
|
09.06.2011 14:30 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: [C] Raster-Menü ?
Ich würde das mit Strukturen machen, die Icons verwalten...
so in der Art:
#define N_ICONS 9;
typedef struct _Icon
{
int x, int y;
char *text;
Image *img;
void (* OnClick) (void);
} Icon;
Icon icons[N_ICONS];
x und y eben setzen, sodass sie am Raster sind.
Dann eben immer die Position in ner Variable (z.B. menu_position) speichern, immer auf die X-Taste testen, und wenn diese gedrückt ist, icons[menu_position].OnClick aufrufen.
|
|
09.06.2011 14:37 |
|
|
|
D4V3 $v1
Junior Mitglied
Beiträge: 13
Gruppe: User
Registriert seit: Apr 2011
Status:
Offline
Danke erhalten: 0
|
RE: [C] Raster-Menü ?
Okey danke für die antwort...
Aber meine eig. frage war ja, wie ich das mit den checked also diesem Umriss machen kann ?
David
Dieser Beitrag wurde zuletzt bearbeitet: 09.06.2011 14:50 von D4V3 $v1.
|
|
09.06.2011 14:49 |
|
|
|
Arktos
Junior Mitglied
Beiträge: 47
Gruppe: User
Registriert seit: May 2011
Status:
Offline
Danke erhalten: 8
|
RE: [C] Raster-Menü ?
Du musst doch checked.png einfach nur um die Breite bzw. Höhe deiner Icons verschieben oder was war das Problem?
Edit: Achso, du meinst dem Umriss. Funktioniert das denn nicht mit einem Alpha-Channel?
Dieser Beitrag wurde zuletzt bearbeitet: 09.06.2011 14:52 von Arktos.
|
|
09.06.2011 14:51 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: [C] Raster-Menü ?
void Menu(int icon_num, int icons_per_column, Icon *icons, Image *bg, Image *border)
{
SceCtrlData pad;
memset(&pad, 0, sizeof(SceCtrlData));
int menu_position = 0;
while(1)
{
sceCtrlReadBufferPositive(&pad, 1);
if((pad.Buttons & PSP_CTRL_LEFT) && (activmenu >= 0))
menu_position--;
else if((pad.Buttons & PSP_CTRL_RIGHT) && (activmenu < icon_num))
menu_position++;
else if((pad.Buttons & PSP_CTRL_UP) && ((activmenu - icons_per_column) >= 0)
menu_position -= icons_per_column;
else if((pad.Buttons & PSP_CTRL_DOWN) && ((activmenu + icons_per_column) < icon_num)
menu_position += icons_per_column;
if(pad.Buttons & PSP_CTRL_CROSS)
{
icons[menu_position].OnClick();
}
/* Hintergrund anzeigen */
ShowImage(0, 0, bg);
int i;
for(i = 0; i < icon_num; i++)
{
if(i == menu_position)
ShowImage(icons[i].x, icons[i].y, border); // Rand anzeigen
/* Icon anzeigen */
ShowImage(icons[i].x, icons[i].y, icons[i].img);
}
}
}
Das ist jetzt nicht getestet, aber sollte ungefähr das Prinzip zeigen.
Diese ShowImage Funktion gibts natürlich nicht, habs nur als Platzhalter genommen, setz dort einfach deine Bild-Anzeig Funktion ein.
Dieser Beitrag wurde zuletzt bearbeitet: 09.06.2011 14:56 von HacKmaN.
|
|
09.06.2011 14:54 |
|
|
|
D4V3 $v1
Junior Mitglied
Beiträge: 13
Gruppe: User
Registriert seit: Apr 2011
Status:
Offline
Danke erhalten: 0
|
RE: [C] Raster-Menü ?
Das verschieben der checked.png
Also soll ich
blitAlphaImageToScreen(0 ,0 ,32 , 32, test, X, Y);
X = 28;
Y = 28;
und wenn man links oder so drückt, soll sich X um z.B. 30 erhöhen ?
Ist das richtig wenn man:
X += 20;
macht ?
|
|
09.06.2011 14:55 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: [C] Raster-Menü ?
Hast du meinen Post gesehen? Einen über dir, wir haben gleichzeitig geschrieben
|
|
09.06.2011 15:08 |
|
|
|
Torky
Ex-Developer
Beiträge: 414
Gruppe: User
Registriert seit: Aug 2009
Status:
Offline
Danke erhalten: 598
|
RE: [C] Raster-Menü ?
Ich kann C;bin selber IT-Entwickler und habe IT-Entwicklung studiert...
Danke schön...
Also für einen der das Studiert haben soll hört sich das aber sehr unwissend an. Um solch ein problem zu lösen gibt es viele methoden. Alphablending wurde ja schon erwähnt oder einfach den kasten aussenrum selbst zeichnen. Das SDK dürfte dazu gut genug dokumentiert sein.
P.s. wenn du X und 30 erhöhen willst solltest du auch X+=30; machen und nicht 20.
Dieser Beitrag wurde zuletzt bearbeitet: 09.06.2011 17:26 von Torky.
|
|
09.06.2011 17:25 |
|
|
|