В этом уроке я расскажу ,как же работать с кнопками на псп на примере приложения Таймер. Для начала (для облегчения работы) я создал класс таймер,с помощью которого можно засекать время вплоть до тысячных секунды!Скачать его можно здесь - Летитбит, Депозит.(надо же тоже на чем-то зарабатывать=)
Что же дальше спросите вы ?
- #include <pspdisplay.h> //тоже нужно для вывода на экран
- #include <pspctrl.h> //нужно для управления кнопками
- #include "Timer.h" //Мой класс
Теперь создаем обьект класса таймера до функции exit_callback
Timer time(0.1);//Цифра значит, например, если 0.1 то мы можем получить 0.3 десятые секунды или 0.2 ну и так далее любое число которое больше 0.1 ,но такое число как 0.12 не возможно получить!!!
Так же добавляем переменную
- SceCtrlData pad;//Структура хранящая информацию о нажатых кнопках!
Удаляем строку
printf ("Hello world!!!n");
и заменяем на
- while(1) {
- printf ("Press [X] To Start the Timer!!!n");
- printf ("Press O To Restart the Timer!!!n");
- printf ("Press [ ] To break the Timer!!!n");
- sceCtrlReadBufferPositive(&pad, 1);
- if(pad.Buttons & PSP_CTRL_CROSS) {
- time.startTimer();//Cтартанули таймер
- }
- if(pad.Buttons & PSP_CTRL_CIRCLE) {
- time.resetTimer();//Cтартанули таймер
- }
- if(pad.Buttons & PSP_CTRL_SQUARE) {
- break;//вышли из цикла
- }
- printf ("%d",time.getTimer());//Получаем текущее время
- pspDebugScreenClear();
- }
Теперь обьясняю sceCtrlReadBufferPositive(&pad, 1); записывает в пед информацию о нажатиях!
- pad.Buttons & PSP_CTRL_CROSS
- pad.Buttons & PSP_CTRL_CIRCLE
- pad.Buttons & PSP_CTRL_SQUARE
Мы видим побитовое сравнение, логическое не пойдет(сделаю специальную статью о побитовом сравнение и чем оно отличается от логического)!
Понимаем по названию функции ,что она очищает экран pspDebugScreenClear();
Что же мы получили в итоге
- #include <pspdisplay.h> //тоже нужно для вывода на экран
- #include <pspctrl.h> //нужно для управления кнопками
- #include "Timer.h" //Мой класс
- PSP_MODULE_INFO("Hello", 0, 1, 0);
- PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);
- Timer time(0.1);//Цифра значит, например, если 0.1 то мы можем получить 0.3 десятые секунды или 0.2 ну и так далее любое число которое больше 0.1 ,но такое число как 0.12 не возможно получить!!!
- SceCtrlData pad;//Структура хранящая информацию о нажатых кнопках!
- #define printf pspDebugScreenPrintf
- int exit_callback(int arg1, int arg2, void *common)
- {
- sceKernelExitGame();
- return 0;
- }
- int CallbackThread(SceSize args, void *argp)
- {
- int cbid;
- cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
- sceKernelRegisterExitCallback(cbid);
- sceKernelSleepThreadCB();
- return 0;
- }
- int SetupCallbacks(void)
- {
- int thid = 0;
- thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
- if(thid >= 0)
- {
- sceKernelStartThread(thid, 0, 0);
- }
- return thid;
- }
- int main(void)
- {
- SetupCallbacks(); //Устанавливаем колбеки
- pspDebugScreenInit(); //Инициализируем экран для вывода текста
- while(1) {
- pspDebugScreenClear();
- printf ("Press [X] To Start the Timer!!!n");
- printf ("Press O To Restart the Timer!!!n");
- printf ("Press [ ] To break the Timer!!!n");
- sceCtrlReadBufferPositive(&pad, 1);
- if(pad.Buttons & PSP_CTRL_CROSS) {
- time.startTimer();//Cтартанули таймер
- }
- if(pad.Buttons & PSP_CTRL_CIRCLE) {
- time.resetTimer();//Cтартанули таймер
- }
- if(pad.Buttons & PSP_CTRL_SQUARE) {
- break;//вышли из цикла
- }
- printf ("%d",time.getTimer());//Получаем текущее время
- }
- sceKernelDelayThread (1000*100); //Насколько мы задержали текущий поток! (1сек)
- sceKernelExitGame(); //Завершаем работу программы.
- return 0; //Ретурн)
- }
И конечно же мейкфайл .
Во вторую строчку добавляем новый обьект Timer.o.
- TARGET=Hello_World
- OBJS=main.o Timer.o
- INCDIR =
- CFLAGS=-G0 -O2
- CXXFLAGS=$(CFLAGS) -fno-exceptions -fno-rtti
- ASFLAGS=$(CFLAGS)
- BUILD_PRX=1
- LIBDIR=
- LDFLAGS=
- LIBS=
- EXTRA_TARGETS=EBOOT.PBP
- PSP_EBOOT_TITLE=HW
- PSPSDK=$(shell psp-config --pspsdk-path)
- include $(PSPSDK)/lib/build.mak
Комментариев нет:
Отправить комментарий