Does anyone have any examples of code that allows users to enter their names while in the SDL subsystem? Example: User has completed the level or game and is the prompted to enter their name to be stored in a huigh score list.
Thanks, Jason
Does anyone have any examples of code that allows users to enter their names while in the SDL subsystem? Example: User has completed the level or game and is the prompted to enter their name to be stored in a huigh score list.
Thanks, Jason
Jason Brunson wrote:
Does anyone have any examples of code that allows users to enter their
names while in the SDL subsystem? Example: User has completed the level
or game and is the prompted to enter their name to be stored in a huigh
score list.Thanks, Jason
Here is what we use in freedroid (freedroid.sourceforge.net):
You can see if in action there and judge if that is what you would like
to have.
Also we use the BFont library for displaying font.
Just cut away any ‘DebugPrintf’ calls. They only do debug messages to
log likes. See ya, jp.
/*-----------------------------------------------------------------
(SLD) keyboard mode.*
-----------------------------------------------------------------/
int
getchar_raw (void)
{
SDL_Event event;
int Returnkey;
// keyboard_update (); /* treat all pending keyboard-events */
while (1)
{
SDL_WaitEvent (&event); /* wait for next event */
if (event.type == SDL_KEYDOWN)
{
/*
* here we use the fact that, I cite from SDL_keyboard.h:
* "The keyboard syms have been cleverly chosen to map to ASCII"
* ... I hope that this design feature is portable, and durable ;)
*/
Returnkey = (int) event.key.keysym.sym;
if ( event.key.keysym.mod & KMOD_SHIFT ) Returnkey = toupper(
(int)event.key.keysym.sym );
return ( Returnkey );
}
else if (event.type == SDL_KEYUP)
{
// do nothing here, but don’t push this event either
}
else
{
SDL_PushEvent (&event); /* put this event back into the queue /
keyboard_update (); / and treat it the usual way */
continue;
}
} /* while(1) */
} /* getchar_raw() */
/*-----------------------------------------------------------------
either to stdout or using graphics-text, depending on the
parameter "echo": echo=0 no echo
echo=1 print using printf
echo=2 print using graphics-text
values of echo > 2 are ignored and treated like echo=0
(dont forget to free it !)
-----------------------------------------------------------------/
char *
GetString (int MaxLen, int echo)
{
char input; / Pointer auf eingegebenen String /
int key; / last ‘character’ entered /
int curpos; / zaehlt eingeg. Zeichen mit */
int finished;
int x0, y0, height;
SDL_Rect store_rect, tmp_rect;
SDL_Surface *store = NULL;
if (echo == 1) /* echo to stdout */
{
printf (“\nGetString(): sorry, echo=1 currently not implemented!\n”);
return NULL;
}
x0 = MyCursorX;
y0 = MyCursorY;
height = FontHeight (GetCurrentFont());
store = SDL_CreateRGBSurface(0, SCREENLEN, height, ne_bpp, 0, 0, 0, 0);
Set_Rect (store_rect, x0, y0, SCREENLEN, height);
SDL_BlitSurface (ne_screen, &store_rect, store, NULL);
/* Speicher fuer Eingabe reservieren */
input = MyMalloc (MaxLen + 5);
memset (input, ‘.’, MaxLen);
input[MaxLen] = 0;
finished = FALSE;
curpos = 0;
while ( !finished )
{
Copy_Rect( store_rect, tmp_rect);
SDL_BlitSurface (store, NULL, ne_screen, &tmp_rect);
PutString (ne_screen, x0, y0, input);
SDL_Flip (ne_screen);
key = getchar_raw ();
if (key == SDLK_RETURN)
{
input[curpos] = 0;
finished = TRUE;
}
else if (isprint (key) && (curpos < MaxLen) )
{
/* printable characters are entered in string */
input[curpos] = (char) key;
curpos ++;
}
else if (key == SDLK_BACKSPACE)
{
if ( curpos > 0 ) curpos --;
input[curpos] = '.';
}
} /* while(!finished) */
DebugPrintf (2, “\n\nchar *GetString(…): The final string is:\n”);
DebugPrintf (2, input );
DebugPrintf (2, “\n\n”);
return (input);
} /* GetString() */
Sure, look at the IceBreaker source: http://www.mattdm.org/icebreaker/.
It’s not the most beautiful, perhaps, but it works. :)On Wed, Jul 10, 2002 at 11:07:30PM -0500, Jason Brunson wrote:
Does anyone have any examples of code that allows users to enter their names while in the SDL subsystem? Example: User has completed the level or game and is the prompted to enter their name to be stored in a huigh score list.
–
Matthew Miller @Matthew_Miller http://www.mattdm.org/
Boston University Linux ------> http://linux.bu.edu/
Here is what we use in freedroid (freedroid.sourceforge.net):
You can see if in action there and judge if that is what you would like
to have.
There is actually a better way. Turn on UNICODE translation with
SDL_EnableUNICODE(), and then look at the ‘unicode’ member of the
key event. Look at the checkkeys test program in the SDL source
archive, if you want to see an example of this.
See ya,
-Sam Lantinga, Software Engineer, Blizzard Entertainment