Přejít na obsah
  • Vytvořit účet

C/C++ Tutorialy


kweensey

Recommended Posts

psp_tuts.gif

Zdravim,

potom, co mootoo udelal uvod do programovani v C/PSP, rozhodl jsem se - po vzoru myschooa - zacit delat takove jednoduche tutorialy na zajimave aplikace.

Napred se budu inspirovat myshooovymi tutorialy v LUA a budu ukazovat, jak je udelat v C/PSP a az mi dojdou, tak zacnu delat svoje vlastni..

Pokazde, kdyz neco noveho pribyde, tak budu aktualizovat tento prispevek a napisu do tohoto tematu. Tak doufam, ze to bude aspon k necemu a nekoho tim na chvili zabavim.

kweensey

-----------------------------------------------------------------------

Upozorneni: Pokud nemate ani zaklady nebo vyvojarske prostredi Cygwin, prectete si nejprve Mootooho kruzok mladeho programatora. Pokud byste meli s instalaci a nastavenim Cygwinu nejake problemy, zkuste to podle tohoto (anglickeho) navodu.

-----------------------------------------------------------------------

Seznam tutorialu:

* Buttons Tester

* Battery Stats

* Pixel Unsticker

-----------------------------------------------------------------------

Buttons Tester

bt_screen.gif

Buttons Tester bude programek, ktery Vam rekne, jake tlacitko prave drzite.. :D

Budete potrebovat nasledujici soubory: lesson_1_buttons-tester.zip

Jak na to:

Vytvorime si novy soubor main.c.

A jdeme na to, zacneme s includama (tedy nadefinujeme knihovny, ze kterych budeme pouzivat prikazy).

#include <pspkernel.h>
#include <pspctrl.h>

#include "graphics.h"

pspkernel.h - zaklad vsech PSP programu

pspctrl.h - pristup ke tlacitkum PSP

graphics.h - pristup k displayi a zobrazovani (je uvedena v uvozovkach misto v hranatych zavorkach proto, ze ji mame vedle naseho programu a ne v jadru Cygwinu)

Ted nadefinujeme informace o nasem programu:

PSP_MODULE_INFO("Buttons Tester", 0, 1, 0);

Buttons Tester - jmeno naseho programu

0 - bude bezet pod uzivatelskym rezimem

1 - verze naseho programu (v1.0)

0 - desetinne cislo verze (v1.0)

Nasledujici kod je velice slozity, avsak vubec mu nemusite rozumet.

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;
}

Tento kod obsahuje funkce, ktere budeme pouzivat. V podstate se stara o to, aby hra bezela na PSP, aby se nezasekavala a nevypinala, kdy nebudeme chtit.

Doted jsme se starali o to, aby se nase hra rozjela na PSP a v poradku jela. Odted se budeme zabyvat tim, co nase hra ma delat.

main()
{

Kazdy program tuto cast musi mit. Je to v podstate ta cast, kde je napsane, co ma program delat. Doted jsme si jenom definovali funkce, ted je budeme pouzivat. Otevrena slozena zavorka oznacuje, ze tady cast main zacina.

SetupCallbacks();

Timto prikazem vyvolame ten kod, ktery se stara o stabilitu hry na PSP. Definovali jsme si ho vyse, vzpominate? ;)

initGraphics();

Vyvolame grafickou knihovnu, abychom mohli pouzivat obrazky.

Ted se dostavame k ovladani - tedy tlacitkum.

SceCtrlData pad;

Nadefinovali jsme si promennou pad, ktera v sobe bude obsahovat zmacknute tlacitko.

Ted se dostavame k casti, kdy PSP nahraje nase obrazky (pozadi a ikonky tlacitek) do sve pameti a pote je bude pouzivat.

Image* Background;
Background = loadImage("./images/background.png");

Image* Background; - budeme nahravat obrazek pojmenovany Background

Background = loadImage("./images/background.png"); - nahrat obrazek Background ze sveho umisteni (slozky images)

Ted budeme delat tu samou akci, akorat nebudeme kazdou ikonku tlacitka nahravat jako novy obrazek, ale udelame skupinu obrazku nazvanou Buttons a do ni nahrajeme vsechny tlacitka a kazde bude mit svoje cislo.

Image* Buttons[10];
Buttons[0] = loadImage("./images/no_button.png");
Buttons[1] = loadImage("./images/up_arrow.png");
Buttons[2] = loadImage("./images/down_arrow.png");
Buttons[3] = loadImage("./images/left_arrow.png");
Buttons[4] = loadImage("./images/right_arrow.png");
Buttons[5] = loadImage("./images/cross_button.png");
Buttons[6] = loadImage("./images/circle_button.png");
Buttons[7] = loadImage("./images/square_button.png");
Buttons[8] = loadImage("./images/triangle_button.png");
Buttons[9] = loadImage("./images/left_trigger.png");
Buttons[10] = loadImage("./images/right_trigger.png");

Image* Buttons[10]; - skupina obrazku Buttons, ktera obsahuje obrazku od 0 do 10

Buttons[0] = loadImage("./images/no_button.png"); - obrazek 0 ve skupine Buttons nahrajeme ze sveho umisteni

Ted si nadefinujeme promennou button pro urcovani jednotlivych obrazku ze skupiny (pochopite potom).

int button = 0;

int - zkracene integer nam rika, ze se bude jednat o promennou, ktera v sobe bude uchovavat cislo

button - jmeno nasi promenne

= 0 - nastavime jeji pocatecni hodnotu na 0

Ted udelame smycku, ktera se bude opakovat do te doby, dokud neukoncime program.

while(1)
{

Kdybychom ji neudelali, tak program bezi setinu sekundy a dodela kod a ukonci se, tak se budou nasledujici veci provadet porad dokola a bude to program udrzovat v chodu.

Ted uz doopravdy zacina samotna cinnost naseho programu.

sceCtrlReadBufferPositive(&pad, 1);

Precteme tlacitko, ktere je zmacknute a ulozime do vyse definovane promenne pad.

A ted zjistime, ktere tlacitko bylo stisknuto, abychom mohli urcit vhodny obrazek.

if (pad.Buttons & PSP_CTRL_UP) 
{
 button = 1;
}

Cesky receno: Pokud je stisknuta sipka nahoru, nastav promennou button na hodnotu 1 (1 protoze je to obrazek 1 ve skupine obrazku Buttons nahravanych do pameti).

A ted to budeme opakovat se vsema ostatnima tlacitkama (kazdemu priradime jeho cislo).

if (pad.Buttons & PSP_CTRL_DOWN) 
{
 button = 2;
}

if (pad.Buttons & PSP_CTRL_LEFT) 
{
 button = 3;
}

if (pad.Buttons & PSP_CTRL_RIGHT) 
{
 button = 4;
}

if (pad.Buttons & PSP_CTRL_CROSS) 
{
 button = 5;
}

if (pad.Buttons & PSP_CTRL_CIRCLE) 
{
 button = 6;
}

if (pad.Buttons & PSP_CTRL_SQUARE) 
{
 button = 7;
}

if (pad.Buttons & PSP_CTRL_TRIANGLE) 
{
 button = 8;
}

if (pad.Buttons & PSP_CTRL_LTRIGGER) 
{
 button = 9;
}

if (pad.Buttons & PSP_CTRL_RTRIGGER) 
{
 button = 10;
}

K tomuto, si myslim, ze neni co dodat, kazdy chape, ne? :)

A pokud nebude zmacknute zadne tlacitko, tak se obrazek da na 0.

if (pad.Buttons == 0)
{
 button = 0;
}

Taky jednoduche.. :)

Doted se veci delaly a my nic nevideli. Tak jdeme na to.. :wohow:

blitAlphaImageToScreen(0, 0, 480, 272, Background, 0, 0);

blitAlphaImageToScreen - prikaz k zobrazeni obrazku

0, 0 - stredy (nepotrebujeme, nechame na nulach)

480, 272 - velikost naseho obrazku (stejne velky jako displej PSP, aby pokryl celou plochu)

Background - jmeno obrazku (zadavali jsme ho, kdyz jsme ho nahravali do pameti, pamatujete?)

0, 0 - zacatek obrazku (udeva se levy horni roh, takze uplne do rohu)

Ted udelame to same, ale s nasim obrazkem zmacknuteho tlacitka.

blitAlphaImageToScreen(0, 0, 34, 34, Buttons[button], 224, 120);

To same jako predtim. Stredy jsou 0, akorat velikost je jina a vykreslit na 224 a 120 (stred obrazovky). Pozastavim se u jmena. Jmeno nasich obrazku je Buttons[0-10], ze? Ale aby se vykreslil ten obrazek, ktery patri stisknutemu tlacitku, tak jsme do promenne 'button' ulozili cislo daneho obrazku a misto cisla ted dame 'button', chapete? Tim padem se misto 'button' da cislo obrazku a ten se potom vykresli.

A ted uz to jenom cele vykreslime na obrazovku.

flipScreen();

Kdybychom toto neudelali, tak uvidime jenom cerny display. Sice by vse fungovalo, ale nic by se nezobrazovalo.

Tak a ted uz jenom pozavirame otevrene slozene zavorky (od while(1) a od main() ).

 }

 return 0;
}

Return 0 znamena, ze to nema vracet zadnou hodnotu.

Tak a to je vse.. :) Ted uz jenom udelat Makefile a zkompilovat.

Dal bych tady, jak by mel vypadat vas cely soubor main.c, ale 95% by to zkopirovalo, zkompilovalo a podepsalo se pod to a o to nestojim.. ;)

Makefile:

TARGET = Buttons_Tester
OBJS = main.o graphics.o framebuffer.o

CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

LIBDIR =
LIBS = -lpspgu -lpng -lz -lm
LDFLAGS =

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Buttons Tester

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

A ted uz je to opravdu vse. Ted uz jenom hodit do PSP a vyzkouset.

Pozor: Vsechny soubory z prilozeneho archivu musi byt ve stejne slozce, jako vas soubor main.c! Po zkompilovani dejte soubor EBOOT.PBP a celou slozku images do ms0:/PSP/GAME/Buttons Tester/ .

-----------------------------------------------------------------------

Battery Stats

bs_screen.gif

Battery Stats bude - jak uz musi byt z nazvu jasne - program, ktery nam vypise informace o beterce..

Dneska budete potrebovat soubory z archivu lesson_2_battery-stats.zip..

Takze si udelejte novou slozku a do ni novy soubor main.c.


#include <pspkernel.h>
#include <pspctrl.h>
#include <psppower.h>

#include "graphics.h"

Myslim, ze netreba vysvetlovat, kazdy chape, o co tady jde.. :) Akorat nam pribyla nova knohovna - psppower.h.


PSP_MODULE_INFO("Battery Stats", 0, 1, 0);

Nadefinujeme jmeno a verzi.


#define RGB(r, g, b) ((r)|((g)<<8)|((b)<<16))

Tento kod nam umozni pouzivat klasicke RGB (cervena/zelena/modra) definice barev a pak je prevede do BGR, ktere knihovna pouziva.


#define colBlack RGB(0, 0, 0)

Nadefinujeme si v RGB barvu naseho pisma - tedy cernou a pojmenujeme ji colBlack.


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;
}

A callbacky.. :)


int print(int x, int y, const char* text)
{

Vytvorime si novy prikaz print, ktery bude pracovat se tremi argimenty: x, y (pozice) a text.


printTextScreen(x, y, text, colBlack);

A kdyz se ten prikaz vyvola, tak vypise text na pozici x, y. V podstate je nam to k nicemu, ale - jak rika nas ucitel - programator je tvoj liny a tak si vse usnadnuje. Tento prikaz je nejenom kratsi na psani, ale take diky nemu nemusime pokazde uvadet barvu.


return 0;
}

Uzavreme nas prikaz a protoze nechceme, aby vracel nejaky vysledek, dame return 0;.


int main()
{

A je to zase tady - samotna cinnost programu.. ;)


SetupCallbacks();
initGraphics();
SceCtrlData pad;

Vyvolame callbacky, graicke rozhrani a nadefinujeme promennou pro tlacitka.


char string[256];

Nadefinujeme promennou string, do ktere budeme pozdeji ukladat texty. Neni tam int, ale char, protoze se jedna o promennou, ktera bude obsahovat znaky a ne cislelnou hodnotu. V hranatych zavorkach je uvedena kvota znaku.


int batteryLifeTime = 0;

Znamym zpusobem nadefinujeme promennou batteryLifeTime a nastavime na 0.


Image* background;
background = loadImage("./images/background.png");

Nacteme pozadi ze slozky images pod nazvem background.


while(1)
{

A nase nekonecna smycka.. :D (zdravim mootooa :))


blitAlphaImageToScreen(0, 0, 480, 272, background, 0, 0);

Vykreslime pozadi.


if (scePowerIsPowerOnline())
{
print(17, 110, "Vnejsi energie: Ano");
} else {
print(17, 110, "Vnejsi energie: Ne");
}

A la "Pokud je napajeni zapnuto, vypis Vnejsi energie: Ano na souradnice 17, 90, jinak vypis na stejne souradnice Vnejsi energie: Ne." Je to vlastne uplne obycejna podminka, akorat jsme pouzili nas prikaz na vypisovani a je pouzita podminka z knihovny psppower.h. Myslim, ze nic tezkeho.. ;)


if (scePowerIsBatteryExist())
{

Dalsi podminka z psppower.h, tentokrat "Pokud je zasunuta baterie...".


print(17, 120, "Baterie: Vlozena");

"...tak vypsat text." :)


if (scePowerIsBatteryCharging())
{
print(17, 130, "Nabijeni: Ano");
} else {
print(17, 130, "Nabijeni: Ne");
}

Stale nove podminky. Na prvni pohled to muze vypadat slozite, ale jsou to obycejne podminky - jenom nove "otazky".. ;) Jak asi kazdemu doslo, tentokrat se jedna o otazku "Dobiji se baterie?"..


sprintf(string, "Uroven nabiti: %d%%", scePowerGetBatteryLifePercent());

Fukce sprintf nam umozni ulozit text, ktery obsahuje hodnoty promennych (v nasem pripade procenta nabiti baterky) do jedne promenne (u nas je to string), kterou potom pouzijeme k vypisovani. %d% bude nahrazeno hodnotou vracenou prikazem scePowerGetBatteryLifePercent. Treti % je normalni procento, ktere se za cislem napise.

sprintf(string, "Uroven nabiti: %d%%", scePowerGetBatteryLifePercent());

Prikaz(promenna, do ktere se text ulozi (1), "zobrazeny text vysledek promenne (2) pokracovani textu", promenna (2));


print(17, 140, string);

Vypiseme na danou pozici text ulozeny v promenne string.


batteryLifeTime = scePowerGetBatteryLifeTime();

Do promenne batteryLifeTime ulozime cas, ktery jeste baterce zbyva (to zni brutalne :D).


sprintf(string, "Zbyva hodin: %02d:%02d", batteryLifeTime/60, batteryLifeTime-(batteryLifeTime/60*60));
print(17, 150, string);

Tohle vypada hnusne, co? :D Je to stejne jako predtim, akorat misto %d% tady mame %02d, coz zajisti, ze kdyz bude promenna mensi nez 10 (cili bude jednomistna), tak pred i bude nula (zkratka at ma porad dve cifry). Ziskany zbyvajici cas vydelime 60ti a ziskame hodiny. Abychom ziskali minuty (pouze zbyvajici - ne cely zbyvajici cas v minutach!), musime od celkoveho zbyvajiciho casu odecist 3600tinu celkoveho casu. A vypiseme.


if (scePowerIsLowBattery())
{
print(17, 160, "Slaba baterie: Ano");
} else {
print(17, 160, "Slaba baterie: Ne");
}

A zase to same.. Pokud je baterie slaba, vypis jedno, v opacnem pripade vypis druhe..


sprintf(string, "Napeti: %0.3f V", scePowerGetBatteryVolt() / 1000.0);
print(17, 170, string);

Ziskame hodnotu napeti, kterou vypiseme na 3 desetinna mista (%0.3f - misto d je tam f, protoze se nejedna o cele, ale desetinne cislo). Za scePowerGetBatteryVolt() je / 1000.0, aby posledni desetinnecislo byly tisiciny.


sprintf(string, "Teplota: %d \"C", scePowerGetBatteryTemp());
print(17, 180, string);

Ted tady po tech brutalitach mame zase uplne primitivni zjisteni teploty, kterou dostaneme v jednotkach, ktere chceme zobrazit (tedy stupne Celsia) a v celem cisle, takze klasicke %d a nijak neprevadeny prikaz/promennou scePowerGetBatteryTemp().


} else {

Jinak (patrici k podmince scePowerIsBatteryExist() - tedy, je-li baterie vlozena).


print(17, 120, "Baterie: Vyjmuta");
print(17, 140, "Statistiky baterie nedostupne!");

Misto "Baterie: Vlozena" se na stejnem miste (misto puvodniho textu, ne pres) vypise "Baterie: Vyjmuta" a misto zbytku se napise "Statistiky baterie nedostupne!". Jak primitivni. :D


}

Uzavreme podminku s vlozenou/vyjmutou baterii. :)


print(17, 220, "Stiskni [X] pro ukonceni programu.");
print(17, 230, "Stiskni [O] pro vypnuti PSP.");
print(17, 240, "Stiskni [^] pro uspani PSP.");

Vypiseme nabidku cinnosti.


sceCtrlReadBufferPositive(&pad, 1);

Zkontrolujeme zmacknuta tlacitka.


if (pad.Buttons != 0)
{

"Pokud bude zmacknute nejake tlacitko (resp. pokud ne-nebude zmacknuto nic), tak..."


if (pad.Buttons & PSP_CTRL_CROSS)
{
sceKernelExitGame();
}

if (pad.Buttons & PSP_CTRL_CIRCLE)
{
scePowerRequestStandby();
}

if (pad.Buttons & PSP_CTRL_TRIANGLE)
{
scePowerRequestSuspend();
}

"...zkontrolovat, jestli je zmacknuty krizek (v tom pripade ukoncit hru - sceKernelExitGame();), kolecko (vypnout PSP - scePowerRequestStandby();) nebo trojuhelnik (uspat PSP - scePowerRequestSuspend();).


}

Uzavreme podminku s "ne-nezmacknutyma tlacitkama" . :D


flipScreen();

A vykreslime vse na display.


}

return 0;
}

Uzavreme nasi nekonecnou smycku, main() nic nema vracet (return 0;) a uzavreme i ho.

To je ze souboru main.c vse! :)

Opet tady nebudu davat cely main.c kvuli kopirakum - chci, abyste to delali postupne a vedeli, co delate.. ;)

Makefile:


TARGET = Battery_Stats
OBJS = main.o graphics.o framebuffer.o

CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

LIBDIR =
LIBS = -lpspgu -lpng -lz -lm -lpsppower
LDFLAGS =

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Battery Stats

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

Tak a ted uz jenom prohnat pres Cygwin a do PSP.. ;)

Pozor: Opet nezapomente mit prilozene soubory i slozku ve stejne slozce jako soubor main.c a Makefile a do ms0:/PSP/GAME/Battery Stats/ patri slozka images a soubor EBOOT.PBP.

-----------------------------------------------------------------------

Pixel Unsticker

pu_screen.gif

Jelikoz jsem se vzbudil kolem 22:00 a obvykle zacinam tutorialovy program delat hned, jak prijdu ze skoly, tak ted udelam jenom takovou oddechovku. Pixel Unsticker bude programek na opravu stuck pixelu tim, ze bude opakovat tri zakladni barvy: cervenou, zelenou a modrou.

Stahnete si archiv lesson_2_pixel-unsticker.zip, kde v podstate neni nic noveho - jen knihovna graphics.h, kterou jsme pouzivali zatim ve vsech tutorialech.

Takze udelejte novou slozku a novy soubor main.c..


#include <pspkernel.h>

#include "graphics.h"

Vzdycky se to tak delalo, dela a vzdycky bude. Soubor zacina includama. :)


PSP_MODULE_INFO("Pixel Unsticker", 0, 1, 0);

Pojmenujeme program a uvedeme verzi.


#define RGB(r, g, b) ((r)|((g)<<8)|((b)<<16))

Nadefinujeme RGB.


#define colRed RGB(255, 0, 0)
#define colGreen RGB(0, 255, 0)
#define colBlue RGB(0, 0, 255)
#define colBlack RGB(0, 0, 0)

Predvolime si par barev, ktere budeme potrebovat.


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;
}

Nadefinujeme callbacky.


int main()
{
SetupCallbacks();
initGraphics();

Otevreme main(), vyvolame callbacky a inicializujeme grafickou knihovnu.


char string[256] = "Pixel Unsticker by kweensey";

Udelame si promennou string o kapacite 256ti znaku, do ktere vlozime text.


while(1)
{

A jdeme na to.. :)


fillScreenRect(colRed, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);

Zaplnime cervenou barvou (colRed) ctverec od zacatku displaye po konec (0, 0 - levy horni roh a SCREEN_WIDTH, SCREEN_HEIGHT je sirka a vyska displaye, tedy opacny konec).


printTextScreen(134, 133, string, colBlack);

Cernou barvou vypiseme doprostred obrazovky nadefinovany text.


flipScreen();

Obnovime obrazovku, aby se nase prikazy projevily.


sceKernelDelayThread(500*500);

A na chvili pozastavime program (kdybychom to neudelali, barvy by se stridaly neuveritelnou - pro nas naprosto nevnimatelnou - rychlosti).


fillScreenRect(colGreen, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
printTextScreen(134, 133, string, colBlack);
flipScreen();
sceKernelDelayThread(500*500);

fillScreenRect(colBlue, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
printTextScreen(134, 133, string, colBlack);
flipScreen();
sceKernelDelayThread(500*500);

A uplne to same udelame s nasledujicima dvema barvama.


}

return 0;
}

Uzavreme smycku i main().

A to je vse.. :) Neni to nic extra, ale vzbudil jsem se pozde a ted, kdyz finishuju, tak je presne pulnoc a to mam jeste delat referat do skoly, takze jsem rad, ze jsem udelal vubec nejaky tutos.. :D

Jeste Makefile a hotovo:


TARGET = Pixel_Unsticker
OBJS = main.o graphics.o framebuffer.o

CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

LIBDIR =
LIBS = -lpspgu -lpng -lz -lm
LDFLAGS =

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Pixel Unsticker

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

Takze se loucim a na zitra vymyslim zase neco vetsiho..

bs_screen.gif

Odkaz ke komentáři
Sdílet na ostatní stránky

  • Odpovědi 57
  • Vytvořeno
  • Poslední odpověď

Nejvíc přispívající

Nejvíce příspěvků v jednom dni

Nejvíc přispívající

myslim ze trochu nestastny priklad s tym while(1) , je to trosku zavadzajuce pre niekoho kto fakt netusi o co ide radsej si mohol pouzit while(koniec != 0); proste ze to co je v zatvorke je budto pravda vtedy sa vykona loop alebo nie ,tj 0 a loop sa preskoci , v tvojom pripade vznika nekonecny loop ktory musis ukoncit zvnutra, while(1) bude vzdy pravda.

@KUBA : Zapisovanie do flash0 je to iste ako pisat na MS akurat musis otvorit inezariadenie. Ak chapes sled prikazov ako to funguje nebude to preteba problem.Tutorial najdes cez google ;).

Odkaz ke komentáři
Sdílet na ostatní stránky

mootoo: Ano, mas pravdu. Ale stejne se vetsinou ukoncuje hra pres [home] -> Yes (popr. interne pomoci sceKernelExitGame()) a ne prirozenym dokoncenim programu a v tom pripade je jedno, jestli ten loop bude s nebo bez vyhlidky na prirozene dokonceni.. ;)

Odkaz ke komentáři
Sdílet na ostatní stránky

Takze je tady dalsi tutorial, dneska takova rychlovka.. :)

Byl bych rad, kdybyste tady psali aspon komu to funguje apod, protoze pisete (resp. hlasujete), ze je o to zajem a pak ani nedate vedet, jestli jste to zkouseli atd. Takze bych byl rad, kdybych vedel, ze to nedelam zbytecne. ;)

Diky.

kweensey

Odkaz ke komentáři
Sdílet na ostatní stránky

Loric: Ano, bylo. :D Jelikoz v C nepracujes o objekty, tak by se pohyb musel delat pomoci zvetsovani a zmensovany promennych znazornujicich souradnice a na hodnotu tech promennych vykreslovat obrazek. TO byla ta lehci cast. Ale kolize by se musely delat pomoci porovnavani souradnic jednoho a druheho objektu a kdybys chtel vice stejnych objektu, tak by to bylo jeste slozitejsi.. ;) Treba to jde i jednoduseji, ale ja vim jenom o tomto. Mozna za par mesicu se k nejake jednodussi hre dostanu a udelam tutos.. ;)

Leny: Super, a chapes vse, co delas? :)

Odkaz ke komentáři
Sdílet na ostatní stránky

no ja uz mam zkusenosti s programovanim, ale ne primo c nebo lua.. jestli znas php tak to umim podle me docela dost dobre, a taky v programu game maker :D (porad ale nevim proc ten program kazdy odsuzuje, kdyz je docela dobry a daji se v nem udelat dobre veci :P )

Treba protoze Game maker nema s programovanim NIC spolecneho a samotny game maker je spise takova hra.. Proto i hry v nem jsou trapne.

Jeste abych PHP neznal, kdyz v nem umim programovat..

Rikas dobre, co v nem umis? Umis redakcni system? (to se vetsinou predklada jako takova vec, ze clovek umi v PHP) Nebo dokonce eshop? Udelal jsi neco takoveho? Umis praci se socketama? Udelal jsis treba vlastniho php bota? Tak?

Odkaz ke komentáři
Sdílet na ostatní stránky

Loric & Anonymous_: Prosim, nespamujte mi topic.. :roll:

mootoo: O tom jsem nevedel, z jake je to knihovny - graphics.h? Jinak hru bych planoval jeste za chvili, napred musi pochopit, jak to cele pracuje a co delaji. Takhle by to akorat zkopirovali, ale jak bych se do neceho takoveho poustel, napred bych se ti ozval.. ;)

All: Pozdeji se tady urcite objevi tutorial na nejakou hricku teda.. :) Jinak se omlouvam, ze dneska nic nepribylo, ale mel jsem dost skoly, zitra uz bych mel jet zase jak normalne..

Odkaz ke komentáři
Sdílet na ostatní stránky

sem zkusil nainstalovat ten cygwin ale sem uplne ztraceny :D podle navodu na te anglicke strance sem se zastavil u kroku 5. kdyz sem to zkusil podle navodu od mootooa tak tam sem se dostal az nakonec, ale jak pise ze to trva 3-5 hodin ja sem to mel behem chvilky. takze ted vubec nevim co mam delat :P :(

Odkaz ke komentáři
Sdílet na ostatní stránky

Přidej se do diskuze

Můžete přidat přidat příspěvek a zaregistrovat se později. Pokud máte úcet, přihlašte se.

Návštěvník
Odpovědět na toto téma...

×   Vložili jste obsah s formátováním..   Odstranit formátování

  Only 75 emoji are allowed.

×   Váš odkaz byl automaticky načten a vložen..   Zobrazit jako odkaz

×   Váš předchozí obsah byl obnoven.   Vymazat obsah

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Vytvořit...

Důležitá informace

Tento web používá k poskytování služeb a k analýze návštěvnosti soubory cookies. Více informací naleznete v Zásady ochrany osobních údajů a Pravidla webu