Как и обещал в прошлой части, здесь я расскажу об обработке нажатий кнопок. А также немного расскажу о цикле "while"
Что нам понадобится?
1. Редактор текста
2. SDK
3. MakefileEditor
4. Прямые руки и кривые извилины
Если у кого-то чего-то нет, то советую прочитать мою первую сатью
Программирование для PSPНу что же, начнём!
Чтобы мы смоги считывать нажатия надо подключить библиотеку(Заголовочный файл) под названием "pspctrl.h".
Открываем нашу папку с проектами"C:/projects/psp" в ней создадим папку с именем "TestCtrl"
Запускаем MakefileEditor и заполняем поля. В 1-е и 4-е напишем "TestCtrl", а остальное заполним, как в первом уроке
Программирование для PSPТеперь в папку с нашим проектом надо скопировать два файла это "main.c" и "pspSetup.h". Их можно скопировать из прошлого нашего поекта "HelloWorld".
И теперь добавим следующие строчки кода:
В pspSetup.h
#include <pspctrl.h>//библиотека обработки нажатий на кнопки PSP
Вставляем эту строчку после строчки
#include <pspdisplay.h>
Всё библиотека подключена!
Для тех у кого нет pspSetup.h
определение printf будет обладать всеми теми же свойствами как и pspDebugScreenPrintf
просто имя мы укоротили...
PSP_MODULE_INFO("TestCtrl", 1, 2, 2);//эта строчка тоже обязательна! В кавычках мы пишем название программы. В нашем случае "TestCtrl"
int ExitCallback(int Arg1, int Arg2, void *Common)
{
sceKernelExitGame();
return 0;
}
int CallbackThread(SceSize Args, void *Argp)
{
int CallbackId;
CallbackId = sceKernelCreateCallback("Exit Callback", ExitCallback, NULL);
sceKernelRegisterExitCallback(CallbackId);
sceKernelSleepThreadCB();
return 0;
}
int SetupCallbacks(void)
{
int ThreadId = 0;
ThreadId = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
if (ThreadId >= 0)
{
sceKernelStartThread(ThreadId, 0, 0);
}
return ThreadId;
//весь выше перечисленный код до PSP_MODULE_INFO нужен для выхода из программы
}
В main.c
int main()
{
pspDebugScreenInit();
SetupCallbacks();
SceCtrlData pad;
sceCtrlSetSamplingCycle(0);
sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);
sceCtrlReadBufferPositive(&pad, 1);
while(1)
{
sceCtrlReadBufferPositive(&pad, 1);
if(pad.Buttons & PSP_CTRL_UP)
{
printf("\nUP pressed!");
sceKernelDelayThread(200000);
}
if(pad.Buttons & PSP_CTRL_RIGHT)
{
printf("\nRIGHT pressed!");
sceKernelDelayThread(200000);
}
if(pad.Buttons & PSP_CTRL_DOWN)
{
printf("\nDOWN pressed!");
sceKernelDelayThread(200000);
}
if(pad.Buttons & PSP_CTRL_LEFT)
{
printf("\nLEFT pressed!");
sceKernelDelayThread(200000);
}
if(pad.Buttons & PSP_CTRL_TRIANGLE)
{
printf("\nTRINGLE pressed!");
sceKernelDelayThread(200000);
}
if(pad.Buttons & PSP_CTRL_CIRCLE)
{
printf("\nCIRCLE pressed!");
sceKernelDelayThread(200000);
}
if(pad.Buttons & PSP_CTRL_CROSS)
{
printf("\nCROSS pressed!");
sceKernelDelayThread(200000);
}
if(pad.Buttons & PSP_CTRL_SQUARE)
{
printf("\nSQUARE pressed!");
sceKernelDelayThread(200000);
}
if(pad.Buttons & PSP_CTRL_START)
{
printf("\nSTART pressed!");
sceKernelDelayThread(200000);
}
if(pad.Buttons & PSP_CTRL_SELECT)
{
printf("\nSELECT pressed!");
sceKernelDelayThread(200000);
}
if(pad.Buttons & PSP_CTRL_HOME)
{
printf("\nHOME pressed!");
sceKernelDelayThread(200000);
}
if(pad.Buttons & PSP_CTRL_LTRIGGER)
{
printf("\nL TRIGGER pressed!");
sceKernelDelayThread(200000);
}
if(pad.Buttons & PSP_CTRL_RTRIGGER)
{
printf("\nR TRIGGER pressed!");
sceKernelDelayThread(200000);
}
pspDebugScreenPrintf("\t\t\t\t\t\t\t\rJOYSTICK X:%i, Y:%i", pad.Lx, pad.Ly);
}
sceKernelExitGame();
return 0;
}
В коде я немного написал про использование джойстика..
Сохраняйте оба файла и компилируйте с помощью make.bat , котрый лежит в папке с Вашим проектом. Потом закиньте полученную программу "EBOOT.PBP" на свою PSP. В папку"TestCtrl", которуюнадо создать в папке "PSP\GAME"
Запустите програму и опробуйте все кнопки!
Вот и подошёл к концe наш урок.
Вам домашнее задание!!!
Взяв за снову код, который я Вам предоставил(main.c) напишите программу:
Чтобы при нажатии двух кнопок, например X и O на экране писалось"X and O Pressed!"Всем пока, всем удачи!
Ваш,
MALEXKIY
Сообщение отредактировано 10 ноября 2012 13:57. Редактировалось 3 раз(а)