亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

[轉(zhuǎn)]我也玩PSP開(kāi)發(fā)!(2)—— PSPSDK示例 源碼

系統(tǒng) 1766 0

放假啊,這叫玩啊,天天不務(wù)正業(yè),還玩些可能和未來(lái)工作無(wú)關(guān)的技術(shù)!內(nèi)心充滿(mǎn)了罪惡感啊

寫(xiě)HelloWorld太無(wú)聊了,轉(zhuǎn)了一圈PSPSDK發(fā)現(xiàn)有自帶sample,方便快速上手的好東西,位置在開(kāi)發(fā)包/psp/sdk/samples下 面,其中包括聲音,控制器,紅外,usb,wifi,電源等等。還真不少,先挑簡(jiǎn)單的看看。恩~~我看controller挺簡(jiǎn)單!就看這個(gè)!


打開(kāi)controller/base目錄,只有一個(gè)main.c 和 Makefile。肯定不會(huì)很難,先make一個(gè)試試,還好很順利,編譯得到四個(gè)文件: main.o controller_basic.elf EBOOT.PBP PARAM.SFO。
main.o 不用說(shuō)肯定是main.c的生成的目標(biāo)文件。
controller_basic.elf 我知道ELF是linux下的二進(jìn)制文件格式,可能PSP也是這個(gè)格式。
EBOOT.PBP 這個(gè)就是最終的執(zhí)行文件了,這個(gè)應(yīng)該是包裝過(guò)的,其中包含一些圖標(biāo)文件什么的。
PARAM.SFO 這個(gè)我就不知道,有高手可以告訴我,(我懷疑!我猜測(cè)!是源碼中定義的那些宏有關(guān),是一些信息,最后打包到EBOOT.PBP。不要太相信,只是個(gè)思路)。

然后就是插上usb,靠到psp/game下,建個(gè)文件夾,叫什么名都可以!然后把EBOOT.PBP(不要改名字!)放進(jìn)去,運(yùn)行就可以了。

也看了運(yùn)行后什么模樣了!下面就是分析源碼了,分析都寫(xiě)成注釋了!

以下是源碼:

/**/ /*
*PSPSoftwareDevelopmentKit-
http://www.pspdev.org
*-----------------------------------------------------------------------
*LicensedundertheBSDlicense,seeLICENSEinPSPSDKrootfordetails.
*
*main.c-BasicInputdemo--readsfromcontrolpadandindicatesbutton
*presses.
*
*Copyright(c)2005MarcusR.Brown<mrbrown@ocgnet.org>
*Copyright(c)2005JamesForshaw<tyranid@gmail.com>
*Copyright(c)2005JohnKelley<ps2dev@kelley.ca>
*Copyright(c)2005DonourSizemore<donour@uchicago.edu>
*
*$Id:main.c10952005-09-2721:02:16Zjim$
*/


/**/ /* psp的一些頭文件,從文件名應(yīng)該能看出來(lái)時(shí)干嘛使得 */
#include
< pspkernel.h >
#include
< pspdebug.h >
#include
< pspctrl.h >

/**/ /* pspsdk中自帶標(biāo)準(zhǔn)c庫(kù)和標(biāo)準(zhǔn)c++庫(kù) */
#include
< stdlib.h >
#include
< string .h >


/**/ /* 定義模塊信息包括版本 */
/**/ /* Definethemoduleinfosection */
PSP_MODULE_INFO(
" CONTROLTEST " , 0 , 1 , 1 );

/**/ /* 定義主線(xiàn)程屬性還沒(méi)具體研究,有時(shí)間再改上 */
/**/ /* Definethemainthread'sattributevalue(optional) */
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER
| THREAD_ATTR_VFPU);


/**/ /* 這個(gè)純屬為了方便pspDebugScreenPrintf的用法和c庫(kù)中的printf用法完全一樣,不過(guò)pspDebugScreenPrintf只能用在初始化了DebugScreen以后 */
/**/ /* Defineprintf,justtomaketypingeasier */
#define printfpspDebugScreenPrintf

void dump_threadstatus( void );

/**/ /* 下面的代碼會(huì)看見(jiàn),這是控制主循環(huán)推出的條件變量 */
int done = 0 ;

/**/ /* 當(dāng)用戶(hù)按下home鍵退出時(shí)的回調(diào)函數(shù) */
/**/ /* Exitcallback */
int exit_callback( int arg1, int arg2, void * common)
... {
/**/ /* 讓主循環(huán)推出 */
done
= 1 ;
return 0 ;
}


/**/ /* 這么看來(lái)需要一個(gè)專(zhuān)門(mén)的線(xiàn)程來(lái)監(jiān)聽(tīng)用戶(hù)的操作,建立這么一個(gè)線(xiàn)程監(jiān)聽(tīng)用戶(hù)來(lái)調(diào)用相應(yīng)的回調(diào)函數(shù) */
/**/ /* Callbackthread */
int CallbackThread(SceSizeargs, void * argp)
... {
int cbid;
/**/ /* 創(chuàng)建一個(gè)ExitCallback回調(diào)函數(shù)返回一個(gè)類(lèi)似handle的東西 */
cbid
= sceKernelCreateCallback( " ExitCallback " ,exit_callback,NULL);
/**/ /* 在把這個(gè)回調(diào)函數(shù)注冊(cè)商 */
sceKernelRegisterExitCallback(cbid);
/**/ /* 讓他睡眠當(dāng)用戶(hù)要退出的時(shí)候會(huì)喚醒 */
sceKernelSleepThreadCB();

return 0 ;
}


/**/ /* 這個(gè)純粹是為了模塊化了,把安裝回調(diào)函數(shù)的代碼都寫(xiě)著里了 */
/**/ /* Setsupthecallbackthreadandreturnsitsthreadid */
int SetupCallbacks( void )
... {
int thid = 0 ;

/**/ /* 創(chuàng)建那個(gè)回調(diào)函數(shù)線(xiàn)程 */
thid
= sceKernelCreateThread( " update_thread " ,CallbackThread,
0x11 , 0xFA0 , 0 , 0 );
if (thid >= 0 )
... {
/**/ /* 開(kāi)始執(zhí)行 */
sceKernelStartThread(thid,
0 , 0 );
}


return thid;
}


int main( void )
... {
SceCtrlDatapad;
/**/ /* 控制器的結(jié)構(gòu)體 */


pspDebugScreenInit();
/**/ /* 初始化DebugScreen這樣可以用pspDebugScreenPrintf在上面輸出了 */

/**/ /* 那個(gè)回調(diào)函數(shù)線(xiàn)程 */
SetupCallbacks();

/**/ /* 好像是什么取樣周期,莫非可以設(shè)置游戲時(shí)連發(fā)的速度,默認(rèn)是0 */
sceCtrlSetSamplingCycle(
0 );

/**/ /* 控制器的模式有數(shù)字(PSP_CTRL_MODE_DIGITAL)和類(lèi)比(PSP_CTRL_MODE_ANALOG)兩個(gè)這里用的是類(lèi)比的 */
sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);

/**/ /* done!那個(gè)主循環(huán)變量 */
while ( ! done) ... {
/**/ /* 設(shè)置光標(biāo)的位置 */
pspDebugScreenSetXY(
0 , 2 );

/**/ /* 讀取用戶(hù)的輸入,psp沒(méi)鍵盤(pán),就是那些按鍵了 */
sceCtrlReadBufferPositive(
& pad, 1 );

/**/ /* 類(lèi)比搖桿的坐標(biāo) */
printf(
" AnalogX=%d " ,pad.Lx);
printf(
" AnalogY=%d " ,pad.Ly);
/**/ /* 其他按鍵的判斷,按了哪個(gè)就輸出相應(yīng)的文字,用宏都表示出來(lái)了,看名字可以看出來(lái) */
if (pad.Buttons != 0 ) ... {
if (pad.Buttons & PSP_CTRL_SQUARE) ... {
printf(
" Squarepressed " );
}

if (pad.Buttons & PSP_CTRL_TRIANGLE) ... {
printf(
" Trianglepressed " );
}

if (pad.Buttons & PSP_CTRL_CIRCLE) ... {
printf(
" Ciclepressed " );
}

if (pad.Buttons & PSP_CTRL_CROSS) ... {
printf(
" Crosspressed " );
}


if (pad.Buttons & PSP_CTRL_UP) ... {
printf(
" Uppressed " );
}

if (pad.Buttons & PSP_CTRL_DOWN) ... {
printf(
" Downpressed " );
}

if (pad.Buttons & PSP_CTRL_LEFT) ... {
printf(
" Leftpressed " );
}

if (pad.Buttons & PSP_CTRL_RIGHT) ... {
printf(
" Rightpressed " );
}


if (pad.Buttons & PSP_CTRL_START) ... {
printf(
" Startpressed " );
}

if (pad.Buttons & PSP_CTRL_SELECT) ... {
printf(
" Selectpressed " );
}

if (pad.Buttons & PSP_CTRL_LTRIGGER) ... {
printf(
" L-triggerpressed " );
}

if (pad.Buttons & PSP_CTRL_RTRIGGER) ... {
printf(
" R-triggerpressed " );
}

}

}


/**/ /* 徹底退出了 */
sceKernelExitGame();
return 0 ;
}

以上就是這個(gè)sample了,一點(diǎn)也不難!還算是再玩得程度,不過(guò)開(kāi)發(fā)包公布出來(lái)的函數(shù)還真是少的可憐啊!要想寫(xiě)出更好的東西,那就要看對(duì)開(kāi)源代碼庫(kù)的移植了!

[轉(zhuǎn)]我也玩PSP開(kāi)發(fā)!(2)—— PSPSDK示例 源碼分析


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产一区二区在线免费观看 | 天天操天天插天天干 | 伊人久久中文 | 欧美jizz40性欧美| 国产福利视频在线播放 | 日韩久久视频 | 涩涩的视频在线观看 | 伊人久久五月天 | 91美女啪啪 | 久久―日本道色综合久久 | 久久精品亚洲综合 | 久久久伊香蕉网站 | 久久久久久久久综合影视网 | 99在线免费视频 | 黄毛片网站 | 亚洲欧美综合国产精品一区 | 丁香狠狠色婷婷久久综合 | 免费看欧美毛片大片免费看 | 99久久免费精品 | 天天干天操 | 欧美特黄一级大黄录像 | 奇米四色视频 | 999久久狠狠免费精品 | 亚洲精品久久99久久 | 久久99亚洲精品久久 | 久久爱综合久久爱com | 亚洲性爰视频 | 国产一级在线观看www色 | 老色鬼a∨在线视频在线观看 | 天天操2021| 国产午夜精品一区二区三区 | 麻豆精品国产免费观看 | 特级毛片免费视频观看 | 99久久精品免费观看国产 | 中文字幕日韩在线观看 | 亚洲精品久久久久久婷婷 | 波多野结衣亚洲 | 国产一级视频久久 | 精品福利在线 | 精品哟哟国产在线观看 | 成人网在线观看 |