Всем привет! Всех с наступающим Новым Годом!
Раз сегодня Новый Год, тогда сегодня мы будем писать новогоднюю программу.
Заполняем поля как на рисунке:
Сегодня я Вам немного расскажу о графике. Я напишу несколько частей о работе с графикой на PSP.
Мы с Вами напишем программу, в которой по экрану PSP будут летать снежинки.
Далее в папку с проектом Вам надо скопировать файлы
из архива.
А
этот архив киньте в корень карты памяти PSP.
И так, нам надо написать два исходных файла это "main.c" и "pspSetup.h"
Все пояснения что к чему я сразу писал в коде, чтобы было проще разбираться...
pspSetup.h:
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspdisplay.h>
#include <stdlib.h>//для генератора случайных чисел
#include "c:/pspsdk/psp/include/sys/time.h"//хедер для времени
#include "math.h"//математический хедер
#include <png.h>//хедер для работы с *.png файлами
#include <pspgu.h>//хедер для рисования картинки
#include "graphics.h"//хедер для работы графики
#include "framebuffer.h"//хедер для работы графики
PSP_MODULE_INFO("NewYear", 0, 2, 2);
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;
}
Ну и main.c:
#include "pspSetup.h"
typedef struct snow//создаём структуру с именем snow для хранения данных о снежинке
{
int pX, pY;//позиции снежинки по x и y
int ofX, ofY;//смещение позиций по x и y
}snow;
int snowDraw(const char* fileName, const int num)//создаём функцию для рисования снежинок, в функции два параметра: 1. имя файла с картинкой и 2. количество снежинок
{
int i;//переменная для использования в массиве
snow snowBall[num];//объявляем переменную снежинки с массивом num
Image* snow = loadImage(fileName);//загружаем файл картинки(снежинки)
srand(unsigned)time(NULL);//для генератора случайных чисел, чтобы каждый раз у снежинок при включении программы были новые позиции
fillScreenRect(RGB(255, 255, 255),0, 0, 480, 272);//рисуем фон(белый прямоугольник) 1. цвет 2. начальный x 3. начальный y 4. конечный x 5. конечный y
for(i=0;i<num;i++)
{
snowBall[i].pX=rand()%480+1;//генерируем начальную позицию снежинки по x
snowBall[i].pY=rand()%272+1;//генерируем начальную позицию снежинки по y
blitAlphaImageToScreen(0, 0, snow->imageWidth, snow->imageHeight, snow, snowBall[i].pX, snowBall[i].pY);//рисуем снежинку 1. начало рисования из картинки по x 2. начало рисования из картинки по y 3. конец рисования из картинки по x 4. конец рисования из картинки по y 5. путь к картинке 6. рисование картинки позиция по x 7. рисование картинки позиция по y
snowBall[i].ofX=rand()%8-4;//генерируем смещение снежинки по x
snowBall[i].ofY=rand()%8+1;//генерируем смещение снежинки по y
snowBall[i].pX+=snowBall[i].ofX;//суммируем данные для новой позиции снежинки по x
snowBall[i].pY+=snowBall[i].ofY;//суммируем данные для новой позиции снежинки по y
}
while(1)
{
fillScreenRect(RGB(255, 255, 255),0, 0, 480, 272);//рисуем фон(белый прямоугольник) 1. цвет 2. начальный x 3. начальный y 4. конечный x 5. конечный y
for(i=0;i<num;i++)
{
blitAlphaImageToScreen(0, 0, snow->imageWidth, snow->imageHeight, snow, snowBall[i].pX, snowBall[i].pY);//рисуем снежинку 1. начало рисования из картинки по x 2. начало рисования из картинки по y 3. конец рисования из картинки по x 4. конец рисования из картинки по y 5. путь к картинке 6. рисование картинки позиция по x 7. рисование картинки позиция по y
sceKernelDelayThread(8000);//задержка для плавного перемещения снежинок
snowBall[i].ofX=rand()%8-4;//генерируем смещение снежинки по x
snowBall[i].ofY=rand()%8+1;//генерируем смещение снежинки по y
snowBall[i].pX+=snowBall[i].ofX;//суммируем данные для новой позиции снежинки по x
snowBall[i].pY+=snowBall[i].ofY;//суммируем данные для новой позиции снежинки по y
//далее пойдёт код для возвращения снежинок на экран если они уже его пролетели
if(snowBall[i].pY>282)
{
snowBall[i].pY=-10;
}
if(snowBall[i].pX>490)
{
snowBall[i].pX=-10;
}
if(snowBall[i].pX<-10)
{
snowBall[i].pX=490;
}
}
flipScreen();//функция рисует все изображения и фигуры, которые мы загоняли в буфер
}
return 0;
}
int main()
{
pspDebugScreenInit();
SetupCallbacks();
initGraphics();//инициализация графики
snowDraw("src/snow.png", 20);//а вот и наша функция для рисования снежинок с параметрами: 1. имя файла с картинкой и 2. количество снежинок
sceKernelSleepThread();
return 0;
}
Компилируем и получившуюся программу копируем в "PSP/GAME/NewYear"
Ну вот и всё!
Ещё раз Всех с Наступающим Новым Годом! Удачи Вам, счастья, радости, ну и конечно же любви!Ваш,
MALEXKIY
Сообщение отредактировано 31 декабря 2012 15:59. Редактировалось 3 раз(а)