mootoo Odesláno Červen 30, 2007 Nahlásit Share Odesláno Červen 30, 2007 KAPITOLA č.1 : Mno bol tu už jeden pokus zasvetiť par ludi do programovania PSP v jazyku C, podla mna na to isiel KGSWS trochu rychlo. Preto by som vam chcel pomoct trochu iným pohľadom na vec a prebrať problem od piky.Myslim ze najťažší je vždy ten krok č.1. :) , tu to plati tiež ale snaď to niekto aspon vyskúša.Prevažná časť materialu ktorý budem používat ako vzor sa nachadza na forach psp-programming.com Tak podme na to : CYGWIN Prvý krok je inštalácia vývojarskeho prostredia to bude pre nas CYGWIN ( je to vlastne emulator LINUX-u pre Windows) stiahnite si SETUP file CYGWINU TU: http://www.cygwin.com/setup.exe Po spusteni stiahnuteho installera stlacte NEXT .Označte default option v "Install from Internet," a stlačte NEXT. Nastavte cestu pre instalaciu "C:/cygwin" kde C: je váš lokálny harddisk. Ostatne voľby nechajte nastavené na default a stlacte NEXT. Teraz nastavte adresár kam installer nahra stiahnute subory potrebne pre inštalaciu (miesto ktore si zapametáte po instalacii ich mozete vymazať)a stlacime NEXT. Dalšie okno sa vás bude pýtať na vaše net nastavenia ak nepoužívate PROXY (alebo ani neviete čo to PROXY je :D) stlačte NEXT. Teraz by sa vám mal zobrazit zoznam servrov na ktorych su potrebne subory pre inštaláciu.Nejaký si vyberte a stlačte NEXT. Teraz sa stiahne zoznam. Naskrolujte na "devel" a kliknite tam kdeje "default" to sa zmení na "install". Naskrolujte na "web," a kliknite na "+". Naskrolujte na "wget" a nastavte na "install". Ak to vsetko mate stlacte NEXT a CYGWIN začne sťahovať a inštalovať ,čo chvylu potrvá (kľudne si nieco kuknite v TV :D). Po dokončeni ste pripravený na inštalaciu TOOLCHAIN-u. TOOLCHAIN Tak teraz spustime CYGWIN.Ukaže sa vám okno s príkazovým riadkom a "yourusername@yourcomputername ~" znamena to že CYGWIN je nainštalovaný v poriadku.Zatvorte CYGWIN. Najnovší TOOLCHAIN sistiahnite tu: http://ps2dev.org/psp/Tools/Toolchain/ Po stiahnuti súboru tento rozpakujte do adresára "C:/cygwin/home/user," kde "user" je vaše uživateľské meno. Chodte do adresara C:/CYGWIN/ a editnite CYGWIN.BAT , dajte tam toto: @echo off C: chdir C:\cygwin\bin set path=%path%;C:/cygwin/usr/local/pspdev/bin set PSPDEV=C:/cygwin/usr/local/pspdev set PSPSDK=C:/cygwin/usr/local/pspdev bash --login -i OK teraz chodte do adresara C:/CYGWIN/HOME/USER(váš nick) a prepíšte subor .bash_profile tým ktory je v prílohe.(rozbalte ho!!!) OK teraz spustite CYGWIN a napíšte "ls" (je to malym LS) a potvrdime ENTER ,ukáže sa vám adresár PSPTOOLCHAIN a to je to co potrebujeme :) takze napíšeme "cd PSPTOOLCHAIN" a potvrdime ENTER. Napíšeme "svn update" a potvrdime ENTER. Keď sa dokončí napíšeme "./toolchain.sh" a potvrdime ENTER. Odporúčam to spraviť na večer a ist spať (trvá to od 3 do 5 hodín!!!) Po tomto kroku reštartujeme CYGWIN a možeme sa pustit dopísania svojhoprvého programu. v plane je -ako citat zapis programu v C -základne príkazy (ako to funguje+syntax) -manipulacia s obrazkami+animovanie -prehravanie MP3 vo vasom programe -ako napísať jednoduchú hru 8) Takže podme do toho AKO CITAT ZDROJOVY TEXT PROGRAMU? Každy zdrojový kod obsahuje nejake časti ktoré tam jednoducho musia byt. #include <pspdisplay.h> #include <pspctrl.h> #include "graphics.h" Na zaciatku každeho programu najdeme par riadkov ktore obsahuju príkaz #include ktorý hovorí o tom aké knižnice je treba aby program bežal. #include<> hovori to že ide o knižnicu ktora je nainštalovaná priamo v dev prostredi (PSPTOOLCHAIN) a prikaz #include"" zas to že použijeme knižnicuktora je priamo vložena v adresary od kial budeme kompilovat (premenime zdrojový text na spustiteľný subor EBOOT.PBP),všetko postupne pochopíte. PSP_MODULE_INFO("PokerbyMooToo", 0, 1, 1); toto je dalšia časť povinnej jazdy je to v podstate len informatívna zaležitosť ale musí tam byť.Samo sebou že nazov určíte sami a tie dve jednotky možete menit označujú verziu. #define RGB(r, g, b) ((r)|( (g)<<8 )|((b)<<16)) tento riadok obsahuje definíciu makra, ked ovladateboolovualgebru alebo pocty v binarnej sustave tak sa to da vysvetlit konkretne ale inac je to zbytocne da sato zapisat aj v decimalke a je to asi takto( r+(g+2^8)+(b+2^16)). V C si možete definovať svoje vlastne makro funkcie a príkazy to je obrovska výhoda ked pisete program ,ak používate funkciu ktoru mate 20x v zdrojaku tak ju jednoducho zavolate jej názvom . funkcia void ked si chceme vytvorit vlastný podprogram nie len aritmetickeho charakteru použijeme tento príkaz priklad: void APLUSB() { X=(A+B); // jednoducho vlozi do bunky X sucet A+B } . . . A=1;B=2; APLUSB(); // tu vlastne volame funkciu APLUSB .... No a tu je toho viac na vysvetlenie . Riadok void APLUSB() vlastne hovorí o tom že novo nadefinovaný podprogram sa bude volať APLUSB a v ďalšom slede ho možeme vyvolať jednoduchým APLUSB(); Znak { označuje začiatok tela funkcie a } zase koniec ide o to že označujú vždy nejaku čast kódu ktora sa vykona len za určitej podmienky (príkazy if,dowhile,while,for,switch).Prikazy ktore vetvia program tj if,switch a prikazy ktore cyklia program for,while,dowhile nesmu koncit ; znak ; hovori kompileru ze riadok-prikaz sa tu konci. exit callback!!!!! Toto je proste povinna jazda je to vlastne definicia podprogramu ktori hovori o tom ako sa ma program vypnut ked stlacite home a date yes.Je bez predmetne tento blok podrobnejsie rozoberat naozaj to nema vyznam musi to tam byt. /* Exit callback */ int exit_callback(int arg1, int arg2, void *common) { sceKernelExitGame(); return 0; } /* Callback thread */ int CallbackThread(SceSize args, void *argp) { int cbid; cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL); sceKernelRegisterExitCallback(cbid); sceKernelSleepThreadCB(); return 0; } /* Sets up the callback thread and returns its thread id */ int SetupCallbacks(void) { int thid = 0; thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0); if(thid >= 0) { sceKernelStartThread(thid, 0, 0); } return thid; } Fajn v C mozete nazvat bunku povedzme BUNKA je uzitocne pisat definovane bunky velkym pismom kedze C je casesensitive tj citlivy na male a velke pismena.Lahsie potom rozlisite pri neskorsom citani kodu co je co.Bunka je vlastne nejaka castpameti ram do ktorej nieco vlozime.A to co tam budeme vkladat to musime najprv zadeklarovat.Ak to bude cislo bez desatinnej ciarky napr 0,1,100,5000,6 tak je to integer a definujeme ho nasledovne: int BUNKA; Ked cislo obsahuje desatinnu ciarku tak je to float a definujeme: float BUNKA; niekedy potrebujeme aby bunka uchovavala znaky napr.: a,D,q,1,t,9 ano cislo moze byt ako znak ale aj ako cislo toto kazdy jeden pocitac rozlisuje prispracovavani toho udaju ked budete mat dva znaky "1" + "1" vysledok bude "11" vtipne co? ale ked to budu cisla bude to 2.Ked chceme aby BUNKA obsahovala znak tak definujeme: char BUNKA; Ak chceme definovat viac znakov tj retazec co je vlastne luc znakov robime to takto: char BUNKA[100]; znamena to tolko ze BUNKA bude obsahovatmax 100 znakov. to iste plati aj pri cislach. No a dalsia povinna cast programu je vlastne telo programu : . . . . . . . int main() { . // . // . // toto je telo programu . // . // } Take drobne upozornenie C nepozna prikazy vetviace program ako su GOTO GOSUB tj vsetko sa musi logicky cyklit, ale ziadny strach je to riesitelne. if...else.. if(A==1){B=1;} else {B=0;} tento riadok nam hovori toto ak A sa rovna 1 ( v C ked damejedno = tak vkladame ked porovnavame taktreba dat == ) tak B rovna sa 1 (koniec prikazu ; ) inak B rovnasa 0 mozeme dat aj viac prikazov do rady napriklad : if(A==1){B=1;C=3;F=9;} a tak isto nemusime pouzit else ale v niektorych pripadoch to naramne ulahci zivot. Ak chceme pouzit logicky sucet tj alebo napiseme || v tomto pripade : if ((A==1)||(B==1)) zistujeme toto ak A=1 alebo B=1. Nasobenie je && tj. : if ((A==1)&&(B==1)) ak A=1 a B=1. Alebo: if (A != 1) ak A nerovna sa 1. Vzdy pri splneni podmienky sa vykona cast kodu za podmienkou v zlozenej zatvorke.Nieje podmienka dat za if zlozenu zatvorku ale je to prehladnejsie aurcite si na to zvyknete. for ,while tieto prikazy cyklia program ,dost dolezite!!! Takze prikaz for,dufam ze ste si vsetci vsimli ze prikazy su vsetky napisane malim pismom ,nieje to nahodou ony tak musia byt.Ale spat k veci niekedy potrebujeme v programe spravit tzv. loop ide o zacyklenie ukazem vam to priamo na priklade: . . . for(X=0 ; X<10 ;X++) // toto je definicia cyklu {// .// .// toto je telo cyklu .// }// . No co to tam vlastne je napisane??? takze cyklus sa sklada z dvoch casti definicie cyklu a tela cyklu. Definicia cyklu nam hovori o tom za akych podmienok sa vykona telo cyklu ,v nasom pripade : for=>pre X plati X=0 a cyklus plati kym X<10 tj ak X=10 uz neplati podmienka a telo cyklu nebude vykonane!!! no a to X++ znamena ze pokazdom vykonani tela cyklu sa nam X zvacsi o 1 je to to iste ako X=X+1 ak chceme pouzit iny krok mozeme napriklad miesto X=X+3 napisat X+=3 to iste plati aj pre minus (X--).Telo cyklu vlastne obsahuje nejaky kod ktory chcete opakovat , neskor pochopite preco je dolezite vediet spravne postavit cyklus. while Tento loop funguje trosicku inac.dajme si priklad : while(KONIEC==0) // definicia cyklu {// .// .// .// telo cyklu .// .// } A zase dve casti ,definicia cyklu hovory o tom dokedy plati cyklus(loop).V nasom pripade sa telo cyklu vykonava dovtedy kym plati ze KONIEC sa rovna 0 ak dame pred riadok while(......)... riadok KONIEC=1; tak sa loop nevykona vobec, jasne nie? OK tak si rozoberme na drobne jeden zdrojak od KGSWS bude to uplne jednoduchy programek ;) Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
mootoo Odesláno Červen 30, 2007 Autor Nahlásit Share Odesláno Červen 30, 2007 KAPITOLA 2. Tak a je to tu ideme na prvy program ;) ak niecomu nebudete rozumiet sme na fore takze piste ,ale skuste najprv porozmyslat sami. Chodte do adresara C:/CYGWIN/HOME/USER(VAS NICK)/ a vytvorte si adresar ZDROJAKY rozkliknite si ho a vytvorte adresar HELLO. Oki takze potrebujeme nieco v com tie zdrojove texty budeme pisat stiahnite si napriklad ProgramersNotepad ten pouzivam aj ja a je to super programek. Link:http://puzzle.dl.sourceforge.net/sourceforge/pnotepad/pn2061.exe No spustite PN a hned sa vam otvory okno NEW, prepnite si hore switch z plain text na C,C++ a mozeme sa dotoho pustit. Zapiste toto: // Hello World - Moja prva aplikacia pre PSP /* Program vytvoril (Tvoje meno) dna (Datum) Je to jednoducha "Hello World" Aplikacia. */ Tak a mame hotove info podla ktoreho ked si niekto otvori vas zdrojak bude vediet o co ide a kto je autor. Pokracujeme: #include <pspkernel.h> #include <pspdebug.h> V tejto casti programu ako uz iste viete povieme kompileru(TOOLCHAIN) co budeme potrebovat ake kniznice alebo moduly pre spravne skompilovanie programu. V dalsom kroku napovieme nieco PSPcku nieco o nasom programe.Prvy atribut je meno programu (ale nie to ktore vidite v menu PSP:bash: to zmenime neskor),dalsie atributy nechame tak ako su ale napr tie jednotky oznacuju verziu programu. Takze piseme: PSP_MODULE_INFO("Hello World", 0, 1, 1); V dalsom kroku si nastavime funkciu ktoru budeme pouzivat v programe ,nie je to povinne ale uznajte samy, funkcia pre zapis textu na obrazovku PSP sa vola "pspDebugScreenPrintf".Preto si ju zjednodusime na "printf" a to nasledujucim riadkom: #define printf pspDebugScreenPrintf Takze dufam ze je zatial vsetko jasne ? :) ak nie pokojne si to precitajte este raz je dolezite aby ste pochopili kazdy krok vzdy si radsej precitajte to comu nerozumiete znovu, je to jedina cesta ako pochopit ako to funguje. Fajn mam pre vas jednu dobru a jednu zlu spravu. :lol: Ta zla je ze nasledujuci blok programu je dost zlozity, ale ta dobra je ze mu vobec nepotrebujete rozumiet:D .Skratka hovori o tom co sa stane ked stlacite tlacitko HOME a potvrdite YES.Je to povinna jazda a musi ho obsahovat kazdy program aby sa vedel korektne ukoncit (nie zaseknut PSP) /* Exit callback */ int exit_callback(int arg1, int arg2, void *common) { sceKernelExitGame(); return 0; } /* Callback thread */ int CallbackThread(SceSize args, void *argp) { int cbid; cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL); sceKernelRegisterExitCallback(cbid); sceKernelSleepThreadCB(); return 0; } /* Sets up the callback thread and returns its thread id */ int SetupCallbacks(void) { int thid = 0; thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0); if(thid >= 0) { sceKernelStartThread(thid, 0, 0); } return thid; } Urcite likvidujete CTRL+C a CTRL+V co? :D:D:D Osobne odporucam prepis rucne aby ste to dostali do prstov ,tu strukturu zapisu ukoncovanie riadkov za pomoci ";" atd..Ak mate CZ alebo SK klavesnicu prepnite si ju na EN. Fajn teraz to najhlavnejsie. Kazdy program v C musi obsahovat tzv main je to cast programu ktora sa vykonava , vsetko co sme do teraz zapisali sa bude pouzivat az v tejto funkcii ,jednoducho a kratko povedane program zacina bezat tu: int main() { Zlozena zatvorka oznacuje zaciatok bloku main. Kazdy riadok programu sa musi koncit bodkociarkou. Dovod je taky ze kompiler nevidi biele miesta medzi riadkami jednoducho ked nechate 100 volnych riadkov kompiler ich jednoducho preskoci a pokracuje na dalsom riadku kde je text. Je to uzitocne vdaka tomu mozeme formatovat text tak ako nam to vyhovuje aby sme jednoducho vedeli pohladom oddelit jednotlive casti kodu. Mozete spojit vsetky riadky do jedneho len musite prikazy oddelit tymto znakom ";" :bash:. Takze pridajme tieto dva riadky pre nastavenie prostredia programu pspDebugScreenInit(); // inicializuje textovu obrazovku PSP SetupCallbacks(); // tu zinicializujeme ten kod ktory ma na starost tl. HOME No a teraz nam ostava uz len jedno napisat na obrazovku PSP "HELLO WORLD!!!".Pouzijeme na to funkciu ktoru sme si zadefinovali na zaciatku , printf . printf ("HALLO WORLD!!!"); Takze teraz uz potrebujem zastavit beh programu ten prebehne tak rychlo ze by ste vase krasne helloworld asi neprecitali :D spravime to tymto prikazom: sceKernelSleepThread(); Teraz uz potrebujeme iba ukoncit blok main. return 0; Ide o to ze int main() znamena ze funkcia main nam vracia int tj cele cislo, kedze funkcia main konci a tym aj cely program hodnota 0 sa vrati systemu a povie mu ze program prebehol spravne.(Ak nastane nejaka porucha tak funkcia vrati 1 ale to je teraz pre vas nepodstatne neskor to pochopite a to hned v dalsej casti) A konecne mozeme uzavret blok main napiseme: } HOTOVO!!! a mame napisany zdrojak :D teraz uz len vysvetlit kompileru ako ho ma premenit na EBOOT.PBP tj v PSP spustitelny subor. Takze ulozte si zdrojak ako main.c do adresara HALLO ktory sme si na zaciatku vytvorili a vytvorte novy subor. Do noveho okna vlozte nasledovne: TARGET = hello OBJS = main.o CFLAGS = -O2 -G0 -Wall CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti ASFLAGS = $(CFLAGS) EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Hello World PSPSDK=$(shell psp-config --pspsdk-path) include $(PSPSDK)/lib/build.mak Jednoducho poviete kompileru aby zobral "main.c" a premenil ho za pomoci PSPSDK na .pbp file ktory PSP dokaze precitat. Co potrebujete zmenit v makefile ak ho chcete pouzit pre ine vase jednoduche projekty je "PSP_EBOOT_TITLE = Hello World." Zmenite tym meno programu ktore vam vyskoci ked na neho v psp nabehnete. OK teraz novy subor ulozime ako makefile bez pripony do adresara kde mate main.c tj HALLO. A ideme kompilovat.Spustite si CYGWIN. Napiste do prikazoveho riadku cd zdrojaky potvrdte enter. Napiste cd hallo stlacte enter. Fajn napiste ls a stlacte enter, uvidite vase dva nove subory main.c a makefile. Napiseme make a stlacime enter, ak mate zdrojak spravne napisany bez preklepov a chyb tak vam kompiler vytvori novy fajl v adresary HALLO,ak ste boli uspesny nakopirujte ho do PSP/GAME150/HALLO/ a mozete ho spustit vo vasom PSP. Vela stastia!!! na buduce kukneme na ovladanie klavesami a trosku grafiku ;). Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
mootoo Odesláno Červen 30, 2007 Autor Nahlásit Share Odesláno Červen 30, 2007 Kapitola 3 Takze pre pokracovanie potrebujete stiahnut kniznicu pre pracu z PNG obrazkami.Spustite CYGWIN a do prikazoveho riadku vlozte nasledovne: svn checkout svn://svn.pspdev.org/psp/trunk/zlib potvrdte ENTER. ked sa vam dostahuje napiste do prikazoveho riadku toto: cd zlib ENTER make ENTER make install ENTER Super a mame kniznicu zlib nainstalovanu. Dalej budeme potrebovat kniznicu libPNG, je to ten isty postup: cd .. svn checkout svn://svn.pspdev.org/psp/trunk/libpng cd libpng make make install Este je treba stiahnut prilohu PNG a rozbalit ju do adresara s zdrojakom noveho programu. Tak mozeme zacat. K tejto casti uz hadam netreba ziadny komentar: #include <pspctrl.h> #include <pspkernel.h> #include <pspdebug.h> #include <pspgu.h> #include <png.h> #include <stdio.h> #include "graphics.h" Ano "" znamena ze budeme pouzivat kniznicu ktora musi byt priamo v adr kde mame main.c . #define RGB(r, g, b) ((r)|((g)<<8)|((b)<<16)) PSP_MODULE_INFO("kapitola3", 0, 1, 1); Nadefinujeme si makro RGB a povieme PSP co to vlastne ideme stvarat:) /* Exit callback */ int exit_callback(int arg1, int arg2, void *common) { sceKernelExitGame(); return 0; } /* Callback thread */ int CallbackThread(SceSize args, void *argp) { int cbid; cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL); sceKernelRegisterExitCallback(cbid); sceKernelSleepThreadCB(); return 0; } /* Sets up the callback thread and returns its thread id */ int SetupCallbacks(void) { int thid = 0; thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0); if(thid >= 0) { sceKernelStartThread(thid, 0, 0); } return thid; To uz pozname ze? SceCtrlData pad; int X,Y,POHYBX,POHYBY,NASOBIC,STOP; char MENOSUBORU[100],RETAZEC[100],PISMENO[10]; Image* OBRAZOK; Image* POZADIE; Uff.... takze zadefinujeme pad(treba to pre citanie tlacitiek) Zadefinujeme vsetky ciselne premenne, dalej premenne obsahujuce znaky (pismena+cisla+ine znaky),napriklad: PISMENO[10] znamena ze retazec PISMENO moze obsahovat maximalne 9 znakov.(je to tak o jeden menej) a obrazky.(dalej budeme pouzivat uz len mena premennych a PSP uz bude vediet ci je to obrazok ,cislo ,alebo retazec) void COSOMSTLACIL() { POHYBX=0;POHYBY=0; sceCtrlReadBufferPositive(&pad, 1); if(pad.Buttons & PSP_CTRL_CROSS){STOP=1;} if(pad.Buttons & PSP_CTRL_RIGHT){POHYBX=1;} if(pad.Buttons & PSP_CTRL_LEFT) {POHYBX=-1;} if(pad.Buttons & PSP_CTRL_UP) {POHYBY=-1;} if(pad.Buttons & PSP_CTRL_DOWN) {POHYBY=1;} } Teraz si vytvorime podprogram na zistovanie stlacenych tlacitiek. void NOVEHOPRIKAZU() tu si zadefinujeme ako sa novy prikaz resp podprogram bude volat. Do buniek POHYBX a POHYBY si vlozime 0 neskor vysvetlim preco. V dalsom riadku nacitame stlacene tlacitko. No a teraz urcime co sa stane po stlaceni tlacidiel ,napriklad : ak bol stlaceny krizek do ciselnej premennej STOP vlozime 1. No a tie zlozene zatvorky {} ukazuju od kial po kial sa vykona podprogram. void VYKRESLENIESCENY() { blitAlphaImageToScreen(0,0,480,272,POZADIE,0,0); blitAlphaImageToScreen(0,0,12,12,OBRAZOK,X,Y); sprintf(RETAZEC,"X=%d ,Y=%d",X,Y); printTextScreen(0, 0, RETAZEC, RGB(255, 255, 255)); flipScreen(); } No a toto bude trosku komplikovanejsie.Takze prikaz blitAlphaImageScreen(0,0,480,272,POZADIE,0,0); vlozi do videopamate PSP nasledovne : prve 4 cisla 0,0,480,272 su vlastne offsety X,Y zaciatok obrazku X,Y koniec obrazku, kedze ide o pozadie tj cela obrazovka tak obrazok ma velkost 480x272 , dalsi udaj je pointer v pamati kde su ulozene data obrazku, (meno pointera sme zadefinovali na zaciatku programu a neskor ho tam aj vlozime)no a posledne dva udaje su suradnice X,Y od kial sa zacne obrazok vykreslovat tj lavy horny roh obrazku. Dufam ze tomu rozumiete ak nie napiste vysvetlim. Tak zase novy prikaz ;) ,sprintf tento prikaz zapisuje do premennej, je podobny ako printf ,takze ,riadok sa da precitat aj takto do retazca RETAZEC napis X=decimalnecislo1 ,Y=decimalnecislo2 ,kde cislo1=X a cislo2=Y ;) jasne nie? printTextScreen(0, 0, RETAZEC, RGB(255, 255, 255)); vypise na graficku obrazovku text syntax je jednoduchy (x, y, - suradnice kde zacneme pisat v pixeloch, retazec alebo premenna obsahujuca retazec a nakoniec farba v HEXcisle toto za nas robi to makro RGB ;) tento prikaz nevie vypisovat cisla ,preto som cislo najprv vlozil do RETAZEC a tym padom som ho premenil na char ktory tento prikaz zobrazit vie :D . No a potom uz len updatneme display to znamena ze ukazeme co sme tam poskladali a to prikazom flipScreen(); Poradie je umyselne poskladane tak ako je najprv nakreslime pozadie to znamena ze vlasne prekreslime predosly obraz tj ho vymazeme!!! dalej vykreslime OBRAZOK 12x12 pixelov ktorym budeme pohybovat a nakoniec napiseme suradnice X a Y kde sa obrazok nachadza, to znamena ze pismo uvidime aj ked sa obrazok bude nachadzat pod nim. void POZICIAOBRAZKU() { X+=(POHYBX*NASOBIC); Y+=(POHYBY*NASOBIC); // tu si nastavime kraje display-a if(X<0){X=0;} if(X>(480-12)){X=(480-12);} if(Y<0){Y=0;} if(Y>(272-12)){Y=(272-12);} } Tak a posledny blok void .Ide tu vlastne len o to ze vypocitame kde je nova pozicia obrazku a zabranime tomu aby sa dostal mimo display. Takze suradnica X=X+(POHYBX krat NASOBIC) NASOBIC nam vlastne urci o kolko pixelov alebo bodov sa suradnica zmeni ak bude NASOBIC=3 a stlacite vpravo POHYBX sa bude rovnat 1 tj k X sa pripocita 3 ak stlacite do lava POHYBX sa bude rovnat -1 a k X sa pripocita -3 teda realne sa odpocita 3 ok? POHYBX ked sa teraz vratite k podprogramu citania tlacitiek tak pochopite tie 1 a -1 ;) ,to iste plati aj pre Y suradnicu. A teraz nastavime krajne suradnice, kedze obrazok sa vykresluje z laveho horneho rohu a display ma v lavom hornom rohu suradnice 0,0 tak lavy a horny okraj mozu mat minimalne hodnotu 0 tj minimalna suradnica pre X aj Y je 0 ak bude mensia tak do nej vlozime 0. Pravy dolny roh display-a ma suradnice 480,272 (X,Y) ale ak budeme nas obrazok vykreslovat tu tak ho neuvidime pochopitelne ze? ak to nechapete precitajte si tento odstavec este raz.Takze od maximalneho poctu stlpcov aj riadkov odpocitame pocet pixelov obrazku ,v nasom pripade 12 a 12 a ziskame maximalnu hodnotu X a Y naseho obrazku aby ho bolo vidiet a osetrime aby tieto hodnoty nemohol program prekrocit. int main() { SetupCallbacks(); initGraphics(); No a tu sa vlasne zacina nas program vykonavat , nastavime "CALLBACKS" a zinicializujeme graficku obrazovku ,nie ako pri HALLO W. textovu(debugscreen). sprintf(MENOSUBORU,"./MOJEPOZADIE.PNG"); POZADIE=loadImage(MENOSUBORU); Toto je miesto kde povieme PSP ze do premennej POZADIE treba nacitat obrazok MOJEPOZADIE.PNG Umyselne zacinam od konca ,dalo by sa to zapisat aj takto : POZADIE=loadImage("MOJEPOZADIE.PNG"); no dalej pochopite preco to robim takto. sprintf(PISMENO,"M"); sprintf(MENOSUBORU,"./ADRESAR/%sOJOBRAZOK.PNG",PISMENO); OBRAZOK=loadImage(MENOSUBORU); Predstavte si ze by ste chceli nejakym parametrom v programe zmenit subor ktory sa nacita povedzme nie JABLKO.PNG ale MELON.PNG, uzitocne nie? ale v podstate tiez plati to co predtym. X=((480/2)-6); Y=((272/2)-6); STOP=0; NASOBIC=3; Nastavime si pociatocne parametre X a Y tak aby sa nam na zaciatku objavil nas obrazok presne v strede obrazovky, a pohyb sa menil o 3 body naraz. while(STOP==0) { COSOMSTLACIL(); POZICIAOBRAZKU(); VYKRESLENIESCENY(); } A uz to prislo, vytvorime loop ktory pobezi kym nestlacite X(vtedy STOP=1 a nieje splnena podmienka loopu) takze krok1 zistime ci bolo stlacene tlacitko a ake . krok2 podla toho ci bolo alebo nebolo stlacene tl. vypocitame nove suradnice X,Y obrazku, krok3 nakreslime novu obrazovku a vratime sa na bod 1 az do vtedy kym bude platit STOP=0 alebo neukoncime program tlacidlom HOME (to zabezpeci CALLBACK). sceKernelExitGame(); return 0; } No a pekne program ukoncime a vyskocime do XMB. Pre kratkost casu vam makefile popisem neskor je pribaleny v prilohe. Nabuduce nejake tie zvucky. ;) Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
mootoo Odesláno Červen 30, 2007 Autor Nahlásit Share Odesláno Červen 30, 2007 KAPITOLA c.4.1 Takze kukneme sa na zvuky ukazeme si dve metody zacneme MP3 potom kukneme na WAV a nakoniec ako sa daju tieto dve metody pouzivat naraz a na co je to dobre ;) . Prve co bude treba spravit je stiahnut libmad z SVN. libmad je MPEG audio decoder vydany pod GPL. Port na PSP napisal John_K. Takze, otvorime Cygwin, a piseme : svn checkout svn://svn.ps2dev.org/psp/trunk/libmad Uvidite dlhy list stahovanych suborov ;) . Teraz sa prepneme do libmad adresara a compilujeme kniznicu: cd libmad make No teraz potrebujeme kniznicu nainstalovat postup je nasledovny: make install Malo by sa to nainstalovat na spravne miesta. Ale, libmad install script sa tvari ako poskodeny. Netreba sa strachovat, da sa to aj rucne ;) . cp -Rf ./include /usr/local/pspdev/psp/ cp -Rf ./lib/libmad.a /usr/local/pspdev/psp/lib Poznamka: Medzera sa vklada "./include" a "/usr..." a medzi "libmad.a" and "/usr..." Toto nam nakopiruje vsetko kam patri. "-Rf" tag znamena "Recursive" a "final" -- musite to spravit spravne aby nebol ziaden problem (niekomu to nepojde spravne bez tej rucnej instalacie ;) ). Uf tak a mozme ist na program.Potrebujeme si stiahnut este prilohu ktora obsahuje subor "mp3player.c" a "mp3player.h"(je na konci prispevku). Takze ideme: // program na prehratie MP3-ojky musi mat 128kbit/s+pevny tok nie VBR #include <pspkernel.h> #include <pspctrl.h> #include <pspdebug.h> #include <pspaudio.h> #include <pspaudiolib.h> #include <psppower.h> #include "mp3player.h" PSP_MODULE_INFO("Mp3 Player ", 0, 1, 1); #define printf pspDebugScreenPrintf Tak toto uz vsetci ovladate nie? ak nie tak citajte predosle manualy. /* Exit callback */ int exit_callback(int arg1, int arg2, void *common) { sceKernelExitGame(); return 0; } /* Callback thread */ int CallbackThread(SceSize args, void *argp) { int cbid; cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL); sceKernelRegisterExitCallback(cbid); sceKernelSleepThreadCB(); return 0; } /* Sets up the callback thread and returns its thread id */ int SetupCallbacks(void) { int thid = 0; thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0); if(thid >= 0) { sceKernelStartThread(thid, 0, 0); } return thid; } Tak a teraz k funkcii main();. Najprv nastavime takt procesora na plno (333MHz).Funkcia "pspAudioInit()" je podobna ako "pspDebugScreenInit()" ktoru sme uz pouzivali. Tato funkcia zinicializuje zvukove systemy PSP. int main() { scePowerSetClockFrequency(333, 333, 166); pspDebugScreenInit(); SetupCallbacks(); pspAudioInit(); SceCtrlData pad; int i; No a teraz novinky ;) !!! MP3_Init(1); MP3_Load("test.mp3"); MP3_Play(); MP3_Init() zinicializuje libmad a nastavi channel cez ktori sa prehra mp3 (v nasom pripade, Channel 1). MP3_Load() je dost jasne, nahraje do pamate MP3 file (tu zmente nazov vaseho suboru, alebo premenujte vas subor MP3 na "test.mp3"). MP3_Play() spusti prehravanie vaseho MP3 suboru. while(1) { sceCtrlReadBufferPositive(&pad, 1); if(pad.Buttons & PSP_CTRL_CROSS) { break; } else if(pad.Buttons & PSP_CTRL_CIRCLE) { MP3_Pause(); for(i=0; i<10; i++) { sceDisplayWaitVblankStart(); } } if (MP3_EndOfStream() == 1) { MP3_Stop(); } } Takze vytvorime si nekonecny loop a citame klavesy.Ak stlacime X tak jednoducho loop zlomime a program pokracuje za touto seqenciou.Ak stlacime O pouzijeme dalsiu novu funkciu "MP3_Pause();"snad viete co asi tak moze robit :D ,a vytvorime loop 10x prebehne ide o to aby sa vytvorila mala pauza inac by sa nedalo pauznut lebo by znova prebehol loop a pauza skonci. No a posledna podmienka hlada koniec suboru ,ak nam mp3 skonci tak sa zastavi prehravanie ,inak by sa pustila odzaciatku.No a kedze je loop nekonecny tak musite stlacit X ,alebo pridat za "MP3_Stop();"este"break;"inac sa program neukonci . MP3_Stop(); MP3_FreeTune(); sceKernelExitGame(); return 0; } No a pre korektne ukoncenie programu zastavime prehravanie vyprazdnime pamet(vykopneme z nej mp3-ojku) a ukoncime program no a posleme systemu 0 ze program prebehol v poriadku. Fajn tu je makefile: TARGET = mp3 OBJS = mp3player.o main.o CFLAGS = -O2 -G0 -Wall CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti ASFLAGS = $(CFLAGS) LIBDIR = LIBS = -lmad -lpspaudiolib -lpspaudio -lpsppower LDFLAGS = EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = MP3 Player Example PSPSDK=$(shell psp-config --pspsdk-path) include $(PSPSDK)/lib/build.mak KAPITOLA c.4.2 WAV Takze teraz si pozreme MIKMOD, trochu podrobnejsie ;) uvidite aj preco podrobnejsie, budeme pouzivat PNG a WAV v tomto momente este nemam napisany zdrojak pre tento tut a budem ho pisat zarovno s tymto tutom ;) V podstate mozeme zacat vyjadrovat sa budem uz len k novym veciam ak nieco nepochopite pytajte sa!!!! #include <pspkernel.h> #include <pspctrl.h> #include <pspdebug.h> #include <pspaudio.h> #include <pspaudiolib.h> #include "wavloader.h" #include <pspgu.h> #include <png.h> #include <stdio.h> #include "graphics.h" #define RGB(r, g, b) ((r)|((g)<<8)|((b)<<16)) Image* OBRAZOK; Image* POZADIE; Takze jasne je to ze budeme potrebovat novu kniznicu "wavloader". /* Exit callback */ int exit_callback(int arg1, int arg2, void *common) { //Pridany novy riadok pre cisty vystup s programu WAV_End(); //deinicializuje WAV Loader sceKernelExitGame(); return 0; } /* Callback thread */ int CallbackThread(SceSize args, void *argp) { int cbid; cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL); sceKernelRegisterExitCallback(cbid); sceKernelSleepThreadCB(); return 0; } /* Sets up the callback thread and returns its thread id */ int SetupCallbacks(void) { int thid = 0; thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0); if(thid >= 0) { sceKernelStartThread(thid, 0, 0); } return thid; PSP_MODULE_INFO("WAV tutorial", 0, 1, 1); EDIT:Hodne casu teraz travim pri pokry ale pokusim sa to do vikendu nejako dorobit. Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
myschoo Odesláno Červen 30, 2007 Nahlásit Share Odesláno Červen 30, 2007 super mootoo pokracuj ;) ... teraz su prazky tak do toho vhupsnem :) edit. 05.08.2007 PSP I/O File Manager Príklad použitia Author: myschoo Predtím než začnete čítať si ešte prezrite tento súbor: C:\cygwin\usr\local\pspdev\psp\sdk\include\pspiofilemgr.h main.c: /* * * File I/O Príklad * Autor: myschoo * Datum: 03.08.2007 * */ #include <pspkernel.h> #include <pspdebug.h> #include <pspdisplay.h> #include <pspiofilemgr.h> // potrebny pre sceIo funkcie #include <stdio.h> #include <pspcallbacks.h> // Callbacky mam oddelene v header súbore PSP_MODULE_INFO("File I/O", 0, 1, 1); #define printf pspDebugScreenPrintf int fd; // integer pre sceIoOpen, tzv. File Descryptor - file remove - zmazanie int fr; // integer pre sceIoOpen - file read - citanie int fw; // integer pre sceIoOpen - file write - zapis int dls; // integer pre sceIoRead - dls ako dlzka suboru v bytoch int dls2; // integer pre sceIoWrite - dls ako dlzka suboru v bytoch char pamat[128]; // vyčlenená pamäť pre čítanie zo súboru, maximalne 127 znakov char retazec[128] = "Tato veta bude zapisana do suboru"; // retazec znakov ktory sa zapise do suboru, maximalne 127 znakov /* ===== Začiatok INT MAIN ===== */ int main() { SetupCallbacks(); // Nastavíme Callbacky pspDebugScreenInit(); // Zinicializujeme obrazovku pspDebugScreenSetBackColor(0xFF0000); printf("Manipulacia zo subormi\nAutor prikladu: myschoo\n\n\n"); // Info sceKernelDelayThread(2*1000*1000); // Male medzizastavky pre "cool efekt" :D pspDebugScreenSetBackColor(0x000000); printf("Najprv zmazeme \"subor_na_zmazanie.txt\"\n\n"); // Najprv zmazeme subor sceKernelDelayThread(3*1000*1000); /* * const char *file - cesta k súboru * int flags - vlajky :D PSP_O_RDONLY, PSP_O_WRONLY, PSP_O_CREAT atď. - určujú ako sa má súbor otvariť, prípadne či sa má vytvoriť * SceMode mode - prístupový mód * * funkcia vráti negatívny integer, ak nastala chyba a pozitívny alebo 0 ak prebehla úspešne * * SceUID sceIoOpen(const char *file, int flags, SceMode mode); */ fd = sceIoOpen("subor_na_zmazanie.txt", PSP_O_RDONLY, 0777); if(fd<0) { // ak vráti menej ako 0 sceIoClose(fd); // súbor zavrieme printf("Subor \"subor_na_zmazanie.txt\" neexistuje!\n\n"); // vypíšeme chybovú hlášku } else { // inak sceIoClose(fd); // súbor zavrieme sceIoRemove("subor_na_zmazanie.txt"); // súbor zmažeme printf("Subor bol uspesne zmazany!\n\n"); // vypíšeme potvrdzujúcu hlášku o úspechu } sceKernelDelayThread(4*1000*1000); printf("Teraz precitame \"subor_na_citanie.txt\"\n\n"); // Teraz čítanie sceKernelDelayThread(3*1000*1000); fr = sceIoOpen("subor_na_citanie.txt", PSP_O_RDONLY, 0777); // otvoríme súbor ako minule if(fr<0) { sceIoClose(fr); // tu platí všetko rovnako printf("Subor \"subor_na_citanie.txt\" neexistuje!\n\n"); } else { /* * SceUID fd - file descryptor otvoreneho suboru * void *data - pointer k buffer (u nas je to char pamat[128];) * SceSize size - velkosť citaných dát v bytoch * * funkcia vrati pocet precitanych bytov * * int sceIoRead(SceUID fd, void *data, SceSize size); */ dls = sceIoRead(fr, pamat, 127); sceIoClose(fr); // zavrieme súbor printf("Obsah suboru:\n"); printf("%s\n\n",pamat); // vypiseme obsah suboru } sceKernelDelayThread(4*1000*1000); printf("Teraz vytvorime \"subor_na_zapis.txt\"\n"); // teraz vytvorime subor a zapiseme do neho predom definovany retazec printf("a zapiseme do neho: %s\n\n",retazec); sceKernelDelayThread(3*1000*1000); fw = sceIoOpen("subor_na_pisanie.txt", PSP_O_WRONLY|PSP_O_APPEND|PSP_O_CREAT, 0777); // otvori subor na: ZAPIS na KONIEC SUBORU. Ak subor neexistuje tak ho vytovri if(fw<0) { sceIoClose(fw); printf("Nemozem vytvorit \"subor_na_zapis.txt\"!\n\n"); } else { /* * SceUID fd - file descryptor otvoreneho suboru * void *data - pointer k buffer (u nas je to char retazec[128];) * SceSize size - velkosť citaných dát v bytoch * * funkcia vrati pocet zapisanych bytov * * int sceIoWrite(SceUID fd, const void *data, SceSize size); */ dls2 = sceIoWrite(fw, retazec, 128); sceIoClose(fw); printf("Data boli zapisane!\n\n"); } sceKernelDelayThread(3*1000*1000); printf("Koniec prikladu. Stlac [HOME] pre navrat do XMB."); sceKernelSleepThread(); return 0; } makefile: TARGET = fileio OBJS = main.o CFLAGS = -O2 -G0 -Wall CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti ASFLAGS = $(CFLAGS) EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = File I/O PSPSDK=$(shell psp-config --pspsdk-path) include $(PSPSDK)/lib/build.mak Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
shadow.wizard Odesláno Červen 30, 2007 Nahlásit Share Odesláno Červen 30, 2007 Urcite vyskusam... casu dost... :) Dik Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
Han Odesláno Červen 30, 2007 Nahlásit Share Odesláno Červen 30, 2007 ale to "wget" tam neni Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
mootoo Odesláno Červen 30, 2007 Autor Nahlásit Share Odesláno Červen 30, 2007 ale je musis kliknut na + pred WEB Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
*Dave* Odesláno Červen 30, 2007 Nahlásit Share Odesláno Červen 30, 2007 kurna mootooe ty ses borec me staci zatim grafika co delam :D (s tebou) casem to tady sceknu ;) Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
tekken90 Odesláno Červen 30, 2007 Nahlásit Share Odesláno Červen 30, 2007 super....doufám že doplníš i zbytek :D:D:D Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
mootoo Odesláno Červen 30, 2007 Autor Nahlásit Share Odesláno Červen 30, 2007 jj casom urcite nie je to ale jednoduche ty co to pisu na inych forach to pisu pre ludi co poznaju C ja sa budem snazit to napisat pre ludi co C nikdy nevideli. EDIT: skusal som to presne podla tohoto navodu a bez problemov som nainstaloval cygwin na dalsie pc ;) Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
Dark7 Odesláno Červen 30, 2007 Nahlásit Share Odesláno Červen 30, 2007 hej super mootoo mozna si konecne poprvy v zivote casem vyrobim svoji prvni hru!:) Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
mootoo Odesláno Červenec 1, 2007 Autor Nahlásit Share Odesláno Červenec 1, 2007 no pochvalte sa ma uz niekto cygwin ? Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
myschoo Odesláno Červenec 2, 2007 Nahlásit Share Odesláno Červenec 2, 2007 tak zacal som instalovat Cyqwin, dufam ze spravne! o_O edit. 12:01 ok uz instalujem psptoolchain. edit. 14:40 no cygwin uz mam. trvalo to snad 2h :) cakal som dlhsie. edit. 16:36 otestovane, funkčné, skompilované :) moze sa pisat Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
mootoo Odesláno Červenec 2, 2007 Autor Nahlásit Share Odesláno Červenec 2, 2007 prvy zdrojak je na svete!!! ty co uz mate cygwin tak hura do skompilovania. Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
myschoo Odesláno Červenec 6, 2007 Nahlásit Share Odesláno Červenec 6, 2007 škoda že teraz nemáš moc času :( Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
myschoo Odesláno Červenec 9, 2007 Nahlásit Share Odesláno Červenec 9, 2007 Čaute urobil som PONG :D Download je v prilohe. Zdrojak: /* PONG by myschoo 09.07.2007 */ #include <pspkernel.h> #include <pspdebug.h> #include <pspctrl.h> #include <pspdisplay.h> #include <stdio.h> PSP_MODULE_INFO("Pong", 0, 1, 1); #define printf pspDebugScreenPrintf #define color pspDebugScreenSetTextColor #define bgcolor pspDebugScreenSetBackColor #define gotoXY pspDebugScreenSetXY SceCtrlData pad; /* ===================== PREMENNE =========================== */ int Xos, Yos; // Lopticka :D int smerX, smerY; // Pohyb v smeroch X a Y osi int Xos1, Yos1, Xos2, Yos2, Xos3, Yos3, Xos4, Yos4; // Raketa vlavo int Xos5, Yos5, Xos6, Yos6, Xos7, Yos7, Xos8, Yos8; // Raketa vpravo int scrL, scrP; // skore laveho a praveho hraca int koniec; // cyklus /* ================ FUNKCIE ====================== */ void pozicie() { // SCHEMA: Xos2 = Xos1; // 1 5 Yos2 = (Yos1 + 1); // 2 6 Xos3 = Xos1; // 3 7 Yos3 = (Yos1 + 2); // 4 8 Xos4 = Xos1; Yos4 = (Yos1 + 3); Xos6 = Xos5; Yos6 = (Yos5 + 1); Xos7 = Xos5; Yos7 = (Yos5 + 2); Xos8 = Xos5; Yos8 = (Yos5 + 3); } void kresliRakety() { gotoXY(Xos1,Yos1); printf("#"); gotoXY(Xos2,Yos2); printf("#"); gotoXY(Xos3,Yos3); printf("#"); gotoXY(Xos4,Yos4); printf("#"); gotoXY(Xos5,Yos5); printf("#"); gotoXY(Xos6,Yos6); printf("#"); gotoXY(Xos7,Yos7); printf("#"); gotoXY(Xos8,Yos8); printf("#"); } void lopticka() { Xos = Xos + smerX; Yos = Yos + smerY; if(Yos == 2) { smerY = 1; } else if(Yos == 29) { smerY = (-1); } if(Xos == 3 && Yos > Yos1-1 && Yos < Yos1+4) { smerX = 1; } if(Xos == 65 && Yos > Yos5-1 && Yos < Yos5+4) { smerX = (-1); } if(Xos == 67) { scrL++; Xos = 33; Yos = 15; smerX = (-1); smerY = 1; } if (Xos == 1) { scrP++; Xos = 33; Yos = 15; smerX = 1; smerY = 1; } } /* ================ CALLBACKS ================*/ /* Exit callback */ int exit_callback(int arg1, int arg2, void *common) { koniec=1; return 0; } /* Callback thread */ int CallbackThread(SceSize args, void *argp) { int cbid; cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL); sceKernelRegisterExitCallback(cbid); sceKernelSleepThreadCB(); return 0; } /* Sets up the callback thread and returns its thread id */ 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 ======================== */ int main() { Xos = 33; // loptička Yos = 15; Xos1 = 2; // lava palka Yos1 = 13; Xos5 = 66; Yos5 = 13; smerX = 1; smerY = 1; SetupCallbacks(); pspDebugScreenInit(); /* ========================= CYKLUS ===================== */ while (koniec==0) { pspDebugScreenClear(); pozicie(); bgcolor(0xFFFFFF); color(0x000000); printf("Pong by myschoo - Skore: %d : %d",scrL,scrP); // nejake info :) + skore bgcolor(0x000000); color(0xFFFFFF); kresliRakety(); color(0x00FF00); gotoXY(Xos,Yos); printf("O"); lopticka(); sceCtrlReadBufferPositive(&pad, 1); // tu zacina ovladanie rakiet if(pad.Buttons & PSP_CTRL_UP) { Yos1--; } else if(pad.Buttons & PSP_CTRL_DOWN) { Yos1++; } if(pad.Buttons & PSP_CTRL_TRIANGLE) { Yos5--; } else if(pad.Buttons & PSP_CTRL_CROSS) { Yos5++; } if(Yos1 == 2) { // tu aby sa nedostali mimo obrazovku Yos1 = 3; } else if(Yos1 == 29) { Yos1 = 28; } if(Yos5 == 2) { Yos5 = 3; } else if(Yos5 == 29) { Yos5 = 28; } sceKernelDelayThread(100*1000); } sceKernelExitGame(); return 0; } http://rafb.net/p/s14Bhf91.html Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
mootoo Odesláno Červenec 11, 2007 Autor Nahlásit Share Odesláno Červenec 11, 2007 wow super praca !!! myschoo skus ale pouzivat na premenne a void prikazy velke pismo lahsie potom uvidis co je co :void LOPTICKA() alebo void BALL() lebo v C je standard male pismo . Jo asi ta potesim dnes v noci ,mozno uz vecer bude ten tut o grafike tak to budes moct hodit do grafiky. Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
myschoo Odesláno Červenec 11, 2007 Nahlásit Share Odesláno Červenec 11, 2007 wow super praca !!! myschoo skus ale pouzivat na premenne a void prikazy velke pismo lahsie potom uvidis co je co :void LOPTICKA() alebo void BALL() lebo v C je standard male pismo . Jo asi ta potesim dnes v noci ,mozno uz vecer bude ten tut o grafike tak to budes moct hodit do grafiky. LOL ja som to nevydrzal a urobil som uz aj ponga v grafike :D podla psp-programming :cheesygrin: edit. hore je este riadok textu, ktory sa zahadne neodfotil o_O Download + zdrojak: http://myschoo.php5.sk Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
mootoo Odesláno Červenec 11, 2007 Autor Nahlásit Share Odesláno Červenec 11, 2007 super!!! ten riadok ti neodfotilo preto ze si to pisal na debug screen ked to vypises prikazom pre vypisovanie textu v gu tak ti ho odfoti hodim to do toho tutu. Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
myschoo Odesláno Červenec 11, 2007 Nahlásit Share Odesláno Červenec 11, 2007 hehe ja viem ten prikaz nasiel som si ho v graphics.h lenze som s nim nevedel vypisat premenne -_- printTextScreen(); Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
mootoo Odesláno Červenec 11, 2007 Autor Nahlásit Share Odesláno Červenec 11, 2007 update novy tutorial o grafike a ovladani dokonceny. Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
Kylle Odesláno Červenec 12, 2007 Nahlásit Share Odesláno Červenec 12, 2007 "OK teraz chodte do adresara C:/CYGWIN/HOME/USER(váš nick) a prepíšte subor .bash_profile tým ktory je v prílohe.(rozbalte ho!!!)" V jaké příloze?????????? Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
myschoo Odesláno Červenec 12, 2007 Nahlásit Share Odesláno Červenec 12, 2007 v prvom prispevku je priloha: http://console-forum.net/attachment.php?attachmentid=1989&d=1183244246 Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
mootoo Odesláno Červenec 12, 2007 Autor Nahlásit Share Odesláno Červenec 12, 2007 "OK teraz chodte do adresara C:/CYGWIN/HOME/USER(váš nick) a prepíšte subor .bash_profile tým ktory je v prílohe.(rozbalte ho!!!)"V jaké příloze?????????? http://console-forum.net/attachment.php?attachmentid=1989&d=1183244246 Citovat Odkaz ke komentáři Sdílet na ostatní stránky More sharing options...
Recommended Posts
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.