『壹』 c4droid瀹夎呭強浣跨敤娉ㄦ剰璇存槑
闅忕潃瀹夊崜鎵嬫満鍔熻兘鐨勮秺鏉ヨ秺寮哄ぇ錛屽箍澶у︿範緙栫▼浜哄憳鐨勭忛煶鏉ヤ簡錛屽洜涓烘墜鏈轟笂涔熷彲浠ュ︿範鍐欑▼搴忎簡錛屽備綍鍦ㄦ墜鏈轟笂鍐欑▼搴忛偅錛熷氨鏄鐢╟4droad杞浠訛紝浣嗘槸棣栧厛瑕佸畨瑁呮墜鏈篶4droid杞浠訛紝寰堝氭柊鏈嬪弸閮戒笉鐭ラ亾鎬庝箞瀹夎咃紝涓嬮潰鎴戜滑璁蹭竴璁叉庝箞瀹夎呭強緙栫▼浣跨敤璇存槑錛
涓.涓嬭澆紼嬪簭
鏌ョ湅鎵嬫満鍐呭瓨錛屼繚璇佹湁瓚沖熺殑絀洪棿錛堢害100M宸﹀彸鍗沖彲錛夛級錛岀劧鍚庢悳鐙楁悳緔GCC for droid鍜孲DLfor droid錛屾壘鍒頒袱涓鏈鏂版彃浠剁殑鍦板潃錛堜篃鍙浠ュ湪璞岃眴鑽氭垨鍏朵粬杞浠朵笂涓嬭澆錛夛紝涓嬭澆涓や釜鎻掍歡鍜宑4droid涓葷▼搴忋傜綉涓婃湁鍏嶈垂鐨勶紝鑷宸卞姩鎵嬫煡鐪嬩竴涓嬨
涓嬭澆涓や釜鎻掍歡鍜宑4droid涓葷▼搴忋傜綉涓婃湁鍏嶈垂鐨勶紝鑷宸卞姩鎵嬫煡鐪嬩竴涓嬨
浜.瀹夎呰蔣浠
涓嬭澆鍚庡厛瀹夎呬袱涓鎻掍歡錛堜袱涓鍏堝悗鏃犲尯鍒錛夛紝瀹夎呭畬鎴愬悗妗岄潰涓嶄細鏈夊浘鏍囩殑
鎴愬姛鍚庡畨瑁呬富紼嬪簭錛屾彃浠朵細鑷鍔ㄨВ鍘嬶紝瑙e帇鏃惰嚜鍔ㄥ脊鍑轟竴涓紿楀彛錛岀偣鍑粂es灝監K浜嗭紝鑷鍔ㄦ妸鎻掍歡鏁版嵁瑙e帇鍒頒富紼嬪簭浜
緙栧啓紼嬪簭鏃跺湪鑿滃崟/preference/setting complied/G ++錛屽氨鍙浠ョ紪璇慍++
涓.浣跨敤
C++緙栫▼錛氬傛灉涓婇潰涓や釜鎻掍歡閮藉畨瑁呮垚鍔熶簡錛岄偅灝卞彲浠ヨ繍琛孋++紼嬪簭錛岀紪紼嬫椂鎸夌収C++璇璦鏍囧噯鏉ュ啓錛屽垪濡傦細 #include iostream 錛堜嬌鐢–++澶村嚱鏁幫級 using namespace std; 錛堜嬌鐢–++鏍囧噯錛 int main() { char a; while(1) { cout"璇瘋緭鍏Y/N錛"endl; cina; if(a=='Y') 錛堜嬌鐢–++榪愮畻絎︼級 { cout"鎮ㄨ緭鍏ョ殑鏄痀"endl; break; } if(a=='N') { cout"杈撳叆鐨勬槸N"endl; break; } cout"杈撳叆鏈夎"endl; } system("pause"); return 0;} 涓嶇劧浼氭姤閿
C紼嬪簭緙栬瘧錛氬綋鐒訛紝濡傛灉浣犲彧緙栧啓綆鍗曠殑C璇璦灝卞彲浠ヤ笉瀹夎呴偅涓や釜鎻掍歡錛岃屼笖緙栫▼鏃舵敞鎰忎笉瑕佸啓澶村嚱鏁版枃浠訛紝鍒楀傦細 #include "math.h" 錛堣繖涓琛屼笉瑕佸啓錛屾墜鏈哄唴瀛樺皬錛岃蔣浠墮噷娌℃湁榪欎簺鍑 鏁版枃浠訛紝鍐欎笂浼氭姤閿欙級 main() { long int i,x,y,z; for (i=1;i100000;i++) { x=sqrt(i+100); y=sqrt(i+268); if(x*x==i+100y*y==i+268) printf("\n%ld\n",i); } }
C4鏄鍦ㄦ墜鏈轟笂榪愯岀殑錛屾墜鏈轟笉鍍忕數鑴戜竴鏍峰姛鑳藉己澶э紝鎵浠ュ緢澶氬姛鑳藉湪c4涓婃棤娉曡繍琛岋紝榪欎釜鑷宸辨參鎱㈢悽紓錛屼笉榪囧逛簬鍒濆﹁呮潵璇達紝榪樻槸涓嶉敊鐨勮蔣浠躲傝屼笖c4鍙浠ュ煎嚭.apk紼嬪簭鏂囦歡錛屽彲浠ヨ嚜宸辮瘯璇曞晩
濡傛灉鎵嬫満浠嶆棫鐢ㄤ笉浜嗭紝鎴栬呮槸GCC鍜孲DL鍙鑳芥湁涓涓姝e父錛屼篃鎴栬卌4鍙鐢錛屼絾涓や釜鎻掍歡鐢ㄤ笉浜嗭紝鍙鑳戒細鍥犱負鎵嬫満緋葷粺宸寮傦紝鏈変簺鏈鏂扮増鏈榪愯屼笉浜嗭紝榪欐牱鎹㈡棫鐨勬彃浠剁増鏈閲嶆柊瀹夎呬竴涓嬶紝鍥犱負鐜板湪緗戜笂姣旇緝涔憋紝鏈変簺杞浠舵槸澶х炴敼鐨勶紝鍙堟垨鑰呮墜鏈哄師鍥狅紝鑷宸辨壘鍚э紝涓鑸瀹夊崜鎵嬫満閮藉彲浠ョ敤鐨勶紒
『貳』 手機上怎麼編程序
如果你有興趣在android上設計一些游戲,那麼我這兒有一些對你有所幫助的東西,我是android Market上一個名為LightRacer的小賽車游戲的開發者,雖然在此之前我也曾開發過游戲,但這仍然是我的第一個android上的應用,在這個過程中我學到了很多在android上開發游戲的經驗,並且,我也很樂意將這一切與你分享。好了,讓我們開始吧,如果你之前做過游戲的開發,那麼轉移到android這樣的移動平台上並不是件難事,你要做的只是學習一下新的架構與API,如果你是一個新手,我這兒也為你准備了一個入門清單,它適用於任何類型的游戲開發,比如動作類、策略類、模擬類或者智力類。
開啟分步閱讀模式
操作方法
01
在這門課最後,你會完成一個可以運行在安卓機或者安卓平板上的游戲。你可以與你的家人朋友分享它,用你的新知識進一步改進你的游戲,或者完全自己創造一個游戲。
02
如果你有興趣在android上設計一些游戲,那麼我這兒有一些對你有所幫助的東西,我是android Market上一個名為LightRacer的小賽車游戲的開發者,雖然在此之前我也曾開發過游戲,但這仍然是我的第一個android上的應用,在這個過程中我學到了很多在android上開發游戲的經驗,並且,我也很樂意將這一切與你分享。好了,讓我們開始吧,如果你之前做過游戲的開發,那麼轉移到android這樣的移動平台上並不是件難事,你要做的只是學習一下新的架構與API,如果你是一個新手,我這兒也為你准備了一個入門清單,它適用於任何類型的游戲開發,比如動作類、策略類、模擬類或者智力類。
03
獲取SDK第一步當然是下載並安裝android的SDK[軟體開發套件],這套SDK主要包括有核心庫文件,一個模擬器,開發工具和一些示範的樣例文件。我強烈推薦你使用 Eclipse 和 android eclipse 擴展。如果你只是使用android,Eclipse IDE就已經足夠了,但如果這是你第一次開發Java應用,建議你還是下載完整的
04
學習應用架構就像迷人的內在美一樣,這是理解
android 應用架構的關鍵,如果你不學習它,你設計出來的游戲將是一種很難修復bug的產品。你需要了解應用程序、活動、Intents以及它們是如何互相聯系交互的,Google在這兒提供了良好的信息架構。真正重要的是,你要理解為什麼在你設計的游戲中需要不止一個的活動進程以及如何設計一個用戶體驗良好的游戲。這些都應當配合到應用的生命周期中。
05
學習應用的生命周期應用的生命周期是由AndroidOS操作系統進行管理的,你的活動進程都將做為系統命令進行創建,正確處理這些事件對一個應用程序來說是極為重要的,因為終端用戶不會知道什麼是正確的。最好在開始設計你的游戲之前搞明白這些,因為這有助於節省你的調試時間以及避免代價高昂的重新設計。
06
對大多數應用而言,默認設置即可開始工作,但對游戲而言,你可能需要調整單態實例的信號為打開。在默認情況下,Android會新建一個活動實例進程,因為它認為這是比較合適的,而游戲,你可能只希望有一個活動的實例進程,這有一點兒影響,它需要你了解一些系統狀態的管理,但對我來說,它解決了資源管理的問題,還是值得的。
『叄』 如何使用OpenSL ES在c4droid中進行聲音編程
使用opensl es 的前提條件是在源代碼中:
#include <SLES/OpenSLES.h>, 包含 opensl es的頭文件
在gcc中:
-lOpenSLES 鏈接 opensl es的庫文件
大休步驟如下:
1.創建聲音引擎
2.創建聲音播放器
3.設置播放緩沖
opensl es 主要操作的是 介面(interface),大體來說有如下幾個介面:
SLObjectItf : 對象介面,
SLEngineItf :引擎介面
SLPlayItf:播放介面
SLBufferQueueItf :緩沖隊列介面
SLEffectSendItf:音效發送介面
SLMuteSoloItf : 聲道關閉 /單聲道介面
SLVolumeItf : 聲量介面
除了 slCreateEngine 這一條函數是用來創建聲音引擎對象介面以外,其它的所有操作都是通過介面的成員函數完成的,現在我們來研究如何初始化聲音引擎
初始化聲音引擎需要3個介面,我們要將它們聲明為全局變數:
SLObjectItf _aud;/* 聲音引擎的對象介面 */
SLEngineItf _aud_eng;/* 聲音引擎 */
SLObjectItf _aud_mix;/* 混音器對象介面 */
首先我們創建聲音引擎的對象介面 :
slCreateEngine(&_aud, 0, NULL, 0, NULL, NULL);
創建之後的介面並不能立即使用,我們首先要通過介面的子函數實現(Realize)它:
(*_aud)->Realize(_aud, SL_BOOLEAN_FALSE);/* 通過_aud的Realize子函數實現聲音引擎的對象介面 */
實現之後,我們從聲音引擎的對象中抓取聲音引擎,在這里我們通過介面的子函數抓取介面 (GetInterface),抓取對像是 _aud, 抓取類型是引擎,抓取後存放的內存位置是我們先前聲明的引擎介面_aud_eng的指針位置。指令如下:
(*_aud)->GetInterface(_aud, SL_IID_ENGINE, &_aud_eng);
這樣聲音引擎就初始化了
第三步我們要做的是從聲音引擎中創建 "輸出混音器" 對象,這樣我們才可以將聲音播放出來。
注意,同 聲音引擎的對象一樣, 由於 "輸出混音器" 是對象,我們必須創建後在實現(Realize)它。
由於"輸出混音器"創建的同時需要兩個音效參數,所以我們先准備好這兩個參數:第一個參數類型是聲音介面編號(SLInterfaceID),是一個數組,我們可以將其看成一個音效配置列表,在其中放置不同的音效編號。第二個參數是一個邏輯數組:是否強制實現聲音介面編號中對應音效,如果某個音效的邏輯為真(SL_BOOLEAN_TRUE),則在無法實現該音效時視為"輸出混音器"創建失敗,否則將忽略該音效。因為安卓的聲硬體對音效的支持不同,所以最好不要強制實現,所以我們在第二個數組中全部填寫SL_BOOLEAN_FALSE 。
現在我們開始創建"輸出混音器",環境回響(SL_IID_ENVIRONMENTALREVERB )是比較常見的音效,我們將非強制性的使用該音效。
SLInterfaceID effect[1] = {SL_IID_ENVIRONMENTALREVERB}; /*環境回響音效 */
SLboolean effect_bool[1] = {SL_BOOLEAN_FALSE}; /* 回響音效強制實現邏輯 */
(*_aud_eng)->CreateOutputMix(_aud_eng, &_aud_mix, 1, effect, effect_bool);/* 從聲音引擎中創建「輸出混音器」 */
(*_aud_mix)->Realize(_aud_mix, SL_BOOLEAN_FALSE); /* 實現剛創建的「輸出混音器」 */
樣一來,所有的初始化工作就全部完成了。我們獲得如下完整代碼:
SLObjectItf _aud;/* 聲音引擎對象 */
SLEngineItf _aud_eng;/* 聲音引擎 */
SLObjectItf _aud_mix;/* 輸出混音器對象 */
/* audio_init: 初始化opensl es */
int audio_init ()
{
SLInterfaceID effect[1] = {SL_IID_ENVIRONMENTALREVERB}; /* 音效 */
SLboolean effect_bool[1] = {SL_BOOLEAN_FALSE}; /*音效強制實現邏輯 */
slCreateEngine(&_aud, 0, NULL, 0, NULL, NULL);/* 創建聲音引擎對象 */
(*_aud)->Realize(_aud, SL_BOOLEAN_FALSE);/* 實現聲音引擎對象 */
(*_aud)->GetInterface(_aud, SL_IID_ENGINE, &_aud_eng);/* 從聲音引擎對象中抓取聲音引擎 */
(*_aud_eng)->CreateOutputMix(_aud_eng, &_aud_mix, 1, effect, effect_bool);/* 通過聲音引擎創建輸出混音器對象,並且非強制性的開啟環境混響效果 */
(*_aud_mix)->Realize(_aud_mix, SL_BOOLEAN_FALSE);/* 實現混音器對象 */
}
初始化引擎之後, 我們還要創建一個播放器對象,就可以在播放器中輸出聲音了
播放器對象和輸出混音器一樣,是對象,創建後需要進行實現:
SLObjectItf _aud_plyobj; /*播放器對象 */
(*_aud_eng)->CreateAudioPlayer(_aud_eng, &_aud_plyobj, &sndsrc, &sndsnk, 3, ids, req);
/* 這是創建聲音播放器對象aud_plyobj的函數 */
前兩個參數分別把 聲音引擎 和 播放器引擎的指針位置填上就可以了
我們真正需要填寫的是後面4個參數 :
sndsrc: 聲音數據源
sndsnk:聲音輸出池(data sink),也就是聲音輸出設備
3:功能清單數目,我們要讓播放器支持3種功能
ids: 功能清單,我們要讓播放器支持的功能
req:功能強制實現邏輯