24. 1 --------------
Instalace z částí:
http://xorloser.com/PSPDevWin32.zip
rozbalte, instalovat na disk C (jinde muj update nepojede dobře)
vysledna složka by měla byt C:/pspdev
niní stahněte muj plus pack
http://zdoom.ic.cz/pspdev-kg.rar
a rozbalte ho přesně do složky PSPDEV, pokud udělate něco špatně nepujde to :lol:
spusťte run.bat, tim se pusti přikazovej řadek z přidavnym nastavenim pro PSP složky ... (a zobrazi se little help)
Doporučuju po přečtení jedné "lekce" tutoriálu něco vyskoušet (upravit) a pak teprve pokračovat z další
Začneme prvním tutoriálem ...
pro vstup do složky napsat "CD HelloWorld" a potom pro převedení do EBOOT.PBP napsat "MAKE"
Vysvětlení:
na začátku sou knihovny pro určitý funkce
// za tyto znamynka se pišou kometnaře
/* nebo za tohle
a plati to dokud se to neoběvi znova
(obraceně) */
#include <pspkernel.h> //to se nevyužije
#include <pspdebug.h> //pro psaní textů
#include <pspdisplay.h> //žeby display?
#include <pspctrl.h> //klavesy, 4 lekce
#include <stdio.h> //nějaky ty funkce pro text
#include <stdlib.h>//to samy
následuje identifikace programu, místo "HeWo" může být jakejkoliv text
PSP_MODULE_INFO("HeWo", 0, 1, 1);
define, zkrácení, místo pspDebugScreenPrintf budeme psát printf
#define printf pspDebugScreenPrintf
Exit Callback, určí co se má stát když po zmáčknutí HOME se odpoví YES
int exit_callback(int arg1, int arg2, void *common) {
sceKernelExitGame(); // Tohle se stane po "YES" teď to znamená konec.
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;
}
funkce MAIN která už obsahuje náš program
int main() {
SetupCallbacks(); //nastaveni ExitCallbacku
pspDebugScreenInit(); //zapnuti textu
printf("Hello World?\nNo ja myslim ze jo\n"); //tohle napíše, "\n" je skok na další řádek, když něco začíná znakem \ bere se to jako speciální znak, proto pokud chcem vypsat tenhle znak, musí se zapsat 2x zasebe.
sceKernelSleepThread(); //čeká ... jedině na konec hry ...
return 0; // navratova hodnota, niní se nebude řešit
}
lehký ne? no testnite to na PSP
Druhej tutoriál ... Vylepšený HelloWorld ... (ve složce HelloWorld-Barvy)
Vysvětlím jen nový funkce.
Celá tato část vytvoří barevnou, nadpisovou linku, uvidíte v PSP
printf(" ");
color(0x00FFFF); //změní barvu textu, HEX číslo naopak - po dvou (Modrá)(Zelená)(Červená)
backcolor(0xFF0000); //změní barvu pozadí
printf(" Barevny HelloWorld ");
color(0xFFFFFF);
backcolor(0x000000);
printf("\n");
Ještě jedna nová věc (dvě?)
sceKernelDelayThread(1000*1000); //čekání v mikrosekundách (celkem 1 sekunda)
gotoXY(20,5) //přesun kurzoru na tuhle souřadnici, nasledujici psani bude od tam
Toť vše, jednoduchý? No já myslim že jo.
3ti tutoriál (ve složce promeny)
Práce z proměnýma, podmínkama a cyklama, dost důležitá věc.
Do proměné můžeme uložit hodnotu (číslo, text) podle typu, niní bude proměná typu INT (což je číslo)
int cislo; //vytvoříme novou proměnou, ze začátku má hodnotu 0
Cyklus + podmínka
while(cislo!=14) { //začátek cyklu, to co je mezi { a } se bude opakovat dokud platí to v závorce (cislo se nerovná 14)
cislo++; //niní se k číslu přičte 1 (důležitý, kdyby se nepřičítalo, číslo by nikdy nebylo 14 a cyklus by jel pořád a nešel by vypnout)
if(cislo==5) color(0x0000FF); else color(0xFFFFFF); //podmínka, pokud se cislo rovna 5 tak se splní první příkaz, pokud ne splní se druhej
printf("Ted je cislo: %d\n",cislo); //vypíše text, %d bude nahrazeno obsahem proměné číslo
} //to co nasleduje dál se už nebode opakovat
Výsledek? to je snad jednoduchý ... testujte
Pozor, nepleťte si cislo=1 a cislo==1 !
cislo=1 nastaví proměnou na číslo 1
cislo==1 otestuje jestly se rovná 1
4 tutorial, tlačítka ...
na to je speciální proměná nemá smysl ji rozebirat
SceCtrlData pad;
Upravíme co se stane po odpovězení na "YES" protože ukončení hry v cyklu může dělat problémy
int exit_callback(int arg1, int arg2, void *common) {
konec=1; //proč 1? sledujte cyklus while(konec==0) (dokud se konec rovna 0) po odpovězeni "YES" se konec=1 a cyklus se ukončí
return 0;
}
cyklus, podmínky známe (pouze se mění obsah podmínky)
while(konec==0) { //opakuje se dokud číslo v proměné konec nebude jiný než 0
sceCtrlReadBufferPositive(&pad, 1); //zjištění stavu kláves
gotoXY(0,3);
if(pad.Buttons & PSP_CTRL_CROSS) printf("Krizek : ON \n"); else printf("Krizek : OFF\n");
if(pad.Buttons & PSP_CTRL_CIRCLE) printf("Kolecko : ON \n"); else printf("Kolecko : OFF\n");
if(pad.Buttons & PSP_CTRL_SQUARE) printf("Ctverec : ON \n"); else printf("Ctverec : OFF\n");
if(pad.Buttons & PSP_CTRL_TRIANGLE) printf("Trojuhelnik : ON \n"); else printf("Trojuhelnik : OFF\n");
if(pad.Buttons & PSP_CTRL_UP) printf("Nahoru : ON \n"); else printf("Nahoru : OFF\n");
if(pad.Buttons & PSP_CTRL_DOWN) printf("Dolu : ON \n"); else printf("Dolu : OFF\n");
if(pad.Buttons & PSP_CTRL_LEFT) printf("Doleva : ON \n"); else printf("Doleva : OFF\n");
if(pad.Buttons & PSP_CTRL_RIGHT) printf("Doprava : ON \n"); else printf("Doprava : OFF\n");
if(pad.Buttons & PSP_CTRL_LTRIGGER) printf("L : ON \n"); else printf("L : OFF\n");
if(pad.Buttons & PSP_CTRL_RTRIGGER) printf("R : ON \n"); else printf("R : OFF\n");
if(pad.Buttons & PSP_CTRL_START) printf("START : ON \n"); else printf("START : OFF\n");
if(pad.Buttons & PSP_CTRL_SELECT) printf("SELECT : ON \n"); else printf("SELECT : OFF\n");
sceKernelDelayThread(100*1000);
}
25. 1 --------------
Balíček http://zdoom.ic.cz/pspdev-kg-5-6.rar rozbalte přímo do složky C:\pspdev\zdrojaky
2D grafika ... (ve složce 2Dgraf)
nový funkce
pro vložení pixelu z určitou barvou na souřadnici x,y
void putpixel(int x,int y,int barva)
{
if(x<0||x>479||y<0||y>271) //omezi psani pixelu mimo display
{
return; //je mimo, návrat bez vložení pixelu
}
u32 *address=VRAM+((((512)*1)*y)+x); //pracuje se z video pamětí
*address=barva;
}
čára z jednoho bodu (x0,y0) do druhýho (x1,y1) z barvou
void line(int x0,int y0,int x1,int y1,int barva) //nemá cenu rozebírat
{
int dy = y1 - y0;
int dx = x1 - x0;
float t = (float) 0.5;
putpixel(x0,y0,barva);
if( dy == 0 && dx == 0 ) return;
if (abs(dx) > abs(dy)) // slope < 1
{
float m = (float) dy / (float) dx;
t += y0;
dx = (dx < 0) ? -1 : 1;
m *= dx;
while (x0 != x1)
{
x0 += dx;
t += m;
putpixel(x0,(int)t,barva);
}
}
else
{
float m = (float) dx / (float) dy;
t += x0;
dy = (dy < 0) ? -1 : 1;
m *= dy;
while (y0 != y1)
{
y0 += dy;
t += m;
putpixel((int)t,y0,barva);
}
}
}
kruh ze středem v bodě x,y z poloměrem a z barvou
void circle(int xcenter,int ycenter,int radius,int barva) //nema cenu rozebirat
{
int x=0;
int y=radius;
int p=3 - 2 * radius;
while(x <= y)
{
putpixel(xcenter+x,ycenter+y,barva);
putpixel(xcenter-x,ycenter+y,barva);
putpixel(xcenter+x,ycenter-y,barva);
putpixel(xcenter-x,ycenter-y,barva);
putpixel(xcenter+y,ycenter+x,barva);
putpixel(xcenter-y,ycenter+x,barva);
putpixel(xcenter+y,ycenter-x,barva);
putpixel(xcenter-y,ycenter-x,barva);
if(p < 0)
p += 4 * x++ + 6;
else
p += 4 * (x++ - y--) + 10;
}
}
výslednej obrázek pomocí funkcí
line(0,0,479,271,0x00FFFF); //z levýho horního rohu do pravýho spodního
line(0,271,479,0,0x00FFFF); //z levýho spodního rohu do pravýho horního
circle(239,135,50,0xFFFF00); //kruh ve středu displaye o průměru 50 pixelů
putpixel(239,135,0x00FF00); //pixel ve středu kruhu (je tam ale je hůř vidět)
Zobrazení grafu funkce ... (ve složce grafgen)
Vytvoří čtvercovou síť v pozadí. jak? kdo nechápe, návrat do "lekce" 3!
//vertikální čáry
while(x!=48) {
x++;
line(x*10-1,0,x*10-1,271,0x002200);
}
//horizontální čáry
while(y!=27) {
y++;
line(0,y*10-4,480,y*10-4,0x002200);
}
cyklus pro počítání ke každýmu X jedno Y
while(x!=480) {
x++;
xx=x-239; //uprava, aby to začlo od -238 na prvním sloupci displaye
y=(xx*xx*xx)/5000; //jednoduchá funkce X na třetí (a dělení pro lepší zobrazení)
putpixel(x,271-(y+135),0x00FF00);
}
28.1 --------------
Přehrávání zvuku wav, hodí se pro kratky zvukovy efekty (do menu, her)
http://zdoom.ic.cz/pspdev-kg-7.rar
rozbalte přímo do složky C:\pspdev\
7 "lekce" ve složce "wav"
pokud by vám tato lekce nešla zkompilovat (bezezměn) tak to neni vaše chyba ale moje, napište na fórum kdyžtak.
přibila nová knihovna knihovna
#include "../wav-knihovny/wavloader.h" //umožní používat wav funkce
nový typ proměné
char soubor[256]; // text o velikosti MAX 255 znaků (ano 255 NE 256!)
kód z vysvětlením
sprintf(soubor,"wav.wav"); // napíše text ale do textové proměné soubor (info: dá se použít %d z lekce 3)
WAV_Init(); //inicializace zvuku
printf("nacitani zvuku ...\n");
WAV* zvuk1 = WAV_Load(soubor); //načte data zvuku ze souboru do proměné typu WAV (* znamená ukazatel, nemá cenu zatím rozebírat)
sceKernelDelayThread(1000*1000);
printf("Prehravani ...\n");
WAV_Play(zvuk1); //pustí zvukový data z proměné zvuk1
sceKernelDelayThread(3000*1000);
printf("Ukoncovani ...\n");
WAV_Unload(zvuk1); //uvolní data zvuku z RAM, po tomhle nezle znova přehrát (neměl by, netestoval sem)
WAV_End(); //vypne zvuk
možná ste si všimli že tam vůbec neni exit callback ...
ano, zde není potřeba, program se ukončí sám ...
když zmáčknete HOME, nezobrazí se nabídka ...
v této lekci se aji změnilo makefile pro zkompilování wavloaderu
Dál:
1) Práce ze soubory (vytvoření, čtení, kopírování)
- 3D grafika (to jen možná ... celkem složitý, bojím se že z toho moc lidí nic neudělá)
Někomu asi došlo že sem se nezmínil o MAKEFILE, ten soubor pro tutoriály zatím zůstáva stejnej, jeho obsah nemusíte chápat, stačí ho mít na disku, ale můžete v něm změnit méno programu
PSP_EBOOT_TITLE = Sem nazev