[Android] Game Engine 遊戲引擎整理

目前主流:libgdxandengine
速度效能比較 libgdx > andengine (因為libgdx使用JNI)
上手容易比較  andengine > libgdx

此影片在Huawei 8230手機上測試

EngineFPSsprites50150300500
AndroidSDK(SurfaceView)2925114
AndEngine29271610
libGDX30292924

http://getmoai.com/

ONScripter
AVG遊戲用(吉里吉里)

Slick for Android - 暫未完善
授權:BSD
呈現:

LGame for Android
最後更新:2011/2/15

Rokon  已腰斬

libsdl-android

ShiVa3D

[敗家] Razer ABYSSUS 地獄狂蛇+巨甲蟲控制特別版(小)

  • 超簡短心得:
    非常握好按 NT$990滑鼠+鼠壂對Razer來說太超值了

    dpi有450 1800 3500可調
    1800就可以讓小畫家的鉅齒看不出來

    按鍵反應速度有125hz和1000hz可調
    可能我的動態視力沒超過125hz……看不出來

    鼠壂對我來說偏大了,雖然購物網站上都註明(小)

    說不上缺點的缺點
    僅三鍵 (上一隻五鍵鼠也沒按過多出來的兩鍵)
    燈號不是高階鼠的呼吸燈(其實我更希望滑鼠不要亮燈)
    調整hz/dpi要轉過來撥
    (應該沒忙到要即時切換dpi 目前只有SD鋼彈在開地圖炮的時候會即時切換)

    以下圖片
















[Web] 100個Web開發工具 (轉)

Web 技術突飛猛進,Web 設計與開發者們可以選擇的工具越來越多,Web 開發者的技巧不再只限於 HTML 和 服務器端編程,還需要精通各種第三方資源,這些第三方資源有時候比你的項目更複雜,更專業,你無法自己實現一切,借助一些 Web API,你可以很方便地將大量優秀的第三方資源集成到自己的站點。本文全面蒐集 Web 開發中可能用到的各種第三方資源。



### 1. 函數與類庫

#### A. CAPTCHA
CAPTCHA 用來防止惡意表單發佈,以下 CAPTCHA 系統可以輕鬆集成到你的程序中:

這是目前最流行的 CAPTCHA 機制,該機制同時是一個古籍數字化工程的一部分,用戶在驗證的同時,也幫助辨認一些不夠清晰的估計掃瞄。reCAPTCHA 還有一個 Perl 模塊 實現該功能。
這個一個免費的,開源 PHP CAPTCHA 腳本。
基於 GPL 協議的 CAPTCHA 腳本
PHP CAPTCHA 腳本,基於 LGPL 協議

B. 日期處理

日期操作並不輕鬆,儘管 PHP 和 Perl 內置了大量此類函數,但未必滿足你的需要,以下是幾個很好用的日期函數:

C. 圖形處理

圖片縮放,添加水印等:

D. 表單驗證

表單驗證不僅保證用戶填寫的準確,還可以防止攻擊:

E. 密碼驗證

驗證密碼的複雜度

2. Ajax 與 JavaScript

A. 自動輸入建議

最早最成熟的自動輸入建議應該是 Google 搜索條。

B. 日曆

在輸入日期的地方,使用非常直觀的日曆面板

C. 滑動條

滑動條可以更直觀地進行數值的輸入和選擇

D. 表格

Ajax 表格,支持排序等功能

E. 可拖動內容

Ajax-based draggable content features can be very useful when used appropriately. Such tools enable users to reorganize a page to suit their needs, and can also serve as a basis for an interactive feature like a shopping basket.

F. 圖片放大

類似 JavaScript 燈箱的圖片放大顯示控件

G. 相冊和幻燈

用相冊或幻燈方式顯示系列圖片

H. 打分工具

非常直觀的打分控件

I. 取色板

用於取色

J. 進度條

  • jsProgressBarHandler
    非常靈活
  • YUI Loading Panel Widget
    非常漂亮.
  • Simple Javascript Progress Bar with CSS
    簡單實用.
  • Uploadify
    基於 jQuery.
    Web 技術突飛猛進,Web 設計與開發者們可以選擇的工具越來越多,Web 開發者的技巧不再只限於 HTML 和 服務器端編程,還需要精通各種第三方資源,這些第三方資源有時候比你的項目更複雜,更專業,你無法自己實現一切,借助一些 Web API,你可以很方便地將大量優秀的第三方資源集成到自己的站點。本文是第二部分。

3. APIs

以下 API 可以將很多現成的功能集成到你的站點:

4. IP 定位

用戶來自什麼地方。

5. 圖表

6. 地圖

  • amMap
    交互式地圖工具,支持下鑽式挖掘
  • Google Charts API
    來自 Google 地圖工具,只是支持的地圖尺寸有限
  • Flashmaps
    多個基於 Flash 的地圖工具

7. 音頻播放器

8. 視頻播放器

9. 視頻轉換

10. 所見即所得編輯器

[Android] SoundPool 播放效果音

和 MediaPlayer 不同的是 MediaPlayer 主要播長度較長的音樂之類;SoundPool 是以播會重疊到,長度較短的效果音

限制:
1MB以下
.wav / .mp3 (ogg沒試)


SoundPool sp = SoundPool( 10, AudioManager.STREAM_MUSIC, 0);
//(最大音效數 , 聲音類型 , 來源品質-0為預設)

放於res/raw讀入

soundId_ = soundPool_.load(this, R.raw.sound, 1);

放於asserts讀入

descriptor = this.getResources().getAssets().openFd("sound.wav");
seLogo = sp.load(descriptor, 1 );

播放

soundId_ = soundPool_.load(this, R.raw.sound, 1);

ample 1 not READY 錯誤時

方法1 - 需android2.2以上

sp.setOnLoadCompleteListener(new OnLoadCompleteListener(){
@Override
public void onLoadComplete(SoundPool arg0, int arg1, int arg2) {
sp.play(seLogo, 1, 1, 0, 0, 1.0f);
}});

方法2

int sid=0;
for (int i = 0; i < 1000; i++){
    if (sid == 0) {
        try {
            sid = sp.play(seLogo, 1, 1, 0, 0, 1.0f);
            Thread.sleep(1);
        } catch (InterruptedException e)
        {
            e.printStackTrace();
        }
    } else {
        break;
    }
}

[php] 讓同一表單的不同按鈕post到不同頁面去

情境:當一個表單上有文字方塊、儲存按鈕以及預覽按鈕時
儲存按鈕會跳到儲存頁去處理
但預覽按鈕想開新視窗時就麻煩了
解決:
html:


javascript: 主要是利用hidden隱藏欄位 也可以在function內直接同步做些檢查驗證的動作


[php] 檔案上傳

php檔案上傳的流程
表單→伺服器→暫存檔→檔案目錄

表單部份

FROM要有
enctype=”multipart/form-data” 屬性

//單檔
 //多檔  之後使用$_FILES['UploadFile']['tmp_name'][0~n]
$_FILES $_FILES['UploadFile']['tmp_name'] 暫存檔路徑和檔名 $_FILES['UploadFile']['name'] 上傳的原始檔名 $_FILES['UploadFile']['type'] MIME類型.如 "image/gif" $_FILES['UploadFile']['size'] 檔案大小 $_FILES['UploadFile']['error'] 錯誤代碼 UPLOAD_ERR_OK 上傳成功 UPLOAD_ERR_INI_SIZE 大於php.ini upload_max_filesize的設定 UPLOAD_ERR_FORM_SIZE 大於表單MAX_FILE_SIZE設定 UPLOAD_ERR_PARTIAL 只傳送部份資料 UPLOAD_ERR_NO_FILE 沒有上傳的檔案 把上傳的暫存檔放到upload/test.dat (如果已經有的話會覆蓋)
move_uploaded_file($_FILES['UploadFile']['tmp_name'], 'upload/test.dat');
if( $_FILES['UploadFile']['error'] == UPLOAD_ERROR_OK ){
    if(move_uploaded_file($_FILES['UploadFile']['tmp_name'], 'upload/'.$_FILES['UploadFile']['name'])){
        echo '上傳成功';
    }
}

程式碼註解

/**
* 用示範
* 這個檔案是一個xxxxx
* 有任何的問題請和作者連絡
* @author 伍
* @version 0.1b
*/
@see 參考
@version 版本
@author 作者
@since 最早支援時的版本
@param sex int 這是sex變數的說明,sex是性别,有效值是{@link #MALE 男性}和{@link #FEMALE}
@return 回傳值說明
@throws 例外classname 說明
@deprecated 建議的新class/function(也就是這個功能已經過時,盡量不要用)

[php] File 檔案處理

php 存取檔案、目錄和上傳檔案

讀取、寫入檔案

  • 整個讀取、寫入讀取檔案
    $filecontents = file_get_contents();
    echo $filecontents;
    寫入檔案
    在test.txt 寫入 “abcd”
    file_put_content(“test.txt”, “abcd”) ;

在test.txt 最後寫入efgh
file_put_content(“test.txt”, “efgh”, FILE_APPEND) ;

以上成功會回傳byte數,失敗傳回false

  • 逐行讀取、寫入開啟檔案
    fopen(檔名, 模式)
  • 回傳資料代碼

模式
r : 讀
r+ : 讀寫(寫入時從目前讀到的位置寫入)
w : 寫(會刪掉原先內容)
w+ : 讀寫(會刪掉原先內容,並可讀取新寫入的內容)
a : 寫(新增資料到檔案最後)
a+ : 讀寫(新增資料到檔案最後)


$f = fopen(“test.txt”, “r+”) ;

關閉檔案
fclose($f)

寫入檔案
if( fputs($f, ‘abcd’) ) {echo ‘寫入成功’;}

讀取檔案
一次一行
while($str = fgets($f) ){
echo $str.’<br />’;
}

一次一字元
while($str = fgetc($f) ){
echo $str.’<br />’;
}

檔案複製、刪除、改名

copy(來源, 目的檔)
複製檔案

rename(舊檔名, 新檔名)
重新命名

rename(舊目錄/檔名, 新目錄/檔名)
搬移

unlink(檔名)
刪除檔案

getcwd()
回傳目前工作目錄

檢查檔案、目錄的屬性

is_dir(filename)
是否為目錄

is_file(filename)
是否為檔案

is_readable(filename)
是否可讀

is_writable(filename)
是否可寫

file_exists(filename)
是否存在

讀取目錄

scandir(要讀取的目錄)
傳回升冪排序目錄 (陣列)

scandir(要讀取的目錄, 1)
傳回降冪排序目錄 (陣列)

[php] 提高PHP性能的技巧

​提高PHP性能的技巧
來源:http://tc.wangchao.net.cn/bbs/detail_2018915.html

  1. 用單引號代替雙引號來包含字符串,這樣做會更快一些。因爲PHP會在雙引號包圍的字符串中搜尋變量,單引號則不會,注意:只有echo能這麽做,它是一種可以把多個字符串當作參數的“函數”(譯注:PHP手冊中說echo是語言結構,不是真正的函數,故把函數加上了雙引號)。
  2. 如果能將類的方法定義成static,就盡量定義成static,它的速度會提升將近4倍。
  3. $row[’id’] 的速度是$row[id]的7倍。
  4. echo 比 print 快,並且使用echo的多重參數(譯注:指用逗號而不是句點)代替字符串連接,比如echo $str1,$str2。
  5. 在執行for循環之前確定最大循環數,不要每循環一次都計算最大值,最好運用foreach代替。
  6. 注銷那些不用的變量尤其是大數組,以便釋放內存。
  7. 盡量避免使用get,set,__autoload。
  8. require_once()代價昂貴。
  9. include文件時盡量使用絕對路徑,因爲它避免了PHP去include_path裏查找文件的速度,解析操作系統路徑所需的時間會更少。
  10. 如果你想知道腳本開始執行(譯注:即服務器端收到客戶端請求)的時刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。
  11. 函數代替正則表達式完成相同功能。
  12. str_replace函數比preg_replace函數快,但strtr函數的效率是str_replace函數的四倍。
  13. 如果一個字符串替換函數,可接受數組或字符作爲參數,並且參數長度不太長,那麽可以考慮額外寫一段替換代碼,使得每次傳遞參數是一個字符,而不是只寫一行代碼接受數組作爲查詢和替換的參數。
  14. 使用選擇分支語句(譯注:即switch case)好于使用多個if,else if語句。
  15. 用@屏蔽錯誤消息的做法非常低效,極其低效。
  16. 打開apache的mod_deflate模塊,可以提高網頁的浏覽速度。
  17. 數據庫連接當使用完畢時應關掉,不要用長連接。
  18. 錯誤消息代價昂貴。
  19. 在方法中遞增局部變量,速度是最快的。幾乎與在函數中調用局部變量的速度相當。
  20. 遞增一個全局變量要比遞增一個局部變量慢2倍。
  21. 遞增一個對象屬性(如:$this-prop++)要比遞增一個局部變量慢3倍。
  22. 遞增一個未預定義的局部變量要比遞增一個預定義的局部變量慢9至10倍。
  23. 僅定義一個局部變量而沒在函數中調用它,同樣會減慢速度(其程度相當于遞增一個局部變量)。PHP大概會檢查看是否存在全局變量。
  24. 方法調用看來與類中定義的方法的數量無關,因爲我(在測試方法之前和之後都)添加了10個方法,但性能上沒有變化。
  25. 派生類中的方法運行起來要快于在基類中定義的同樣的方法。
  26. 調用帶有一個參數的空函數,其花費的時間相當于執行7至8次的局部變量遞增操作。類似的方法調用所花費的時間接近于15次的局部變量遞增操作。
  27. Apache解析一個PHP腳本的時間要比解析一個靜態HTML頁面慢2至10倍。盡量多用靜態HTML頁面,少用腳本。
  28. 除非腳本可以緩存,否則每次調用時都會重新編譯一次。引入一套PHP緩存機制通常可以提升25%至100%的性能,以免除編譯開銷。
  29. 盡量做緩存,可使用memcached。memcached是一款高性能的內存對象緩存系統,可用來加速動態Web應用程序,減輕數據庫負載。對運算碼 (OP code)的緩存很有用,使得腳本不必爲每個請求做重新編譯。
  30. 當操作字符串並需要檢驗其長度是否滿足某種要求時,你想當然地會使用strlen()函數。此函數執行起來相當快,因爲它不做任何計算,只返回在zval 結構(C的內置數據結構,用于存儲PHP變量)中存儲的已知字符串長度。但是,由于strlen()是函數,多多少少會有些慢,因爲函數調用會經過諸多步驟,如字母小寫化(譯注:指函數名小寫化,PHP不區分函數名大小寫)、哈希查找,會跟隨被調用的函數一起執行。在某些情況下,你可以使用isset() 技巧加速執行你的代碼。
    (舉例如下)
    if (strlen($foo)
    (與下面的技巧做比較)
    if (!isset($foo{5})) { echo “Foo is too short”$$ }
  31. 調用isset()恰巧比strlen()快,因爲與後者不同的是,isset()作爲一種語言結構,意味著它的執行不需要函數查找和字母小寫化。也就是說,實際上在檢驗字符串長度的頂層代碼中你沒有花太多開銷。
  32. 當執行變量$i的遞增或遞減時,$i++會比++$i慢一些。這種差異是PHP特有的,並不適用于其他語言,所以請不要修改你的C或Java代碼並指望它們能立即變快,沒用的。++$i更快是因爲它只需要3條指令(opcodes),$i++則需要4條指令。後置遞增實際上會産生一個臨時變量,這個臨時變量隨後被遞增。而前置遞增直接在原值上遞增。這是最優化處理的一種,正如Zend的PHP優化器所作的那樣。牢記這個優化處理不失爲一個好主意,因爲並不是所有的指令優化器都會做同樣的優化處理,並且存在大量沒有裝配指令優化器的互聯網服務提供商(ISPs)和服務器。
  33. 並不是事必面向對象(OOP),面向對象往往開銷很大,每個方法和對象調用都會消耗很多內存。
  34. 並非要用類實現所有的數據結構,數組也很有用。
  35. 不要把方法細分得過多,仔細想想你真正打算重用的是哪些代碼?
  36. 當你需要時,你總能把代碼分解成方法。
  37. 盡量采用大量的PHP內置函數。
  38. 如果在代碼中存在大量耗時的函數,你可以考慮用C擴展的方式實現它們。
  39. 評估檢驗(profile)你的代碼。檢驗器會告訴你,代碼的哪些部分消耗了多少時間。Xdebug調試器包含了檢驗程序,評估檢驗總體上可以顯示出代碼的瓶頸。
  40. mod_zip可作爲Apache模塊,用來即時壓縮你的數據,並可讓數據傳輸量降低80%。
  41. 在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情況下,盡量用file_get_contents,因爲他的效率高得多!但是要注意file_get_contents在打開一個URL文件時候的PHP版本問題;
  42. 盡量的少進行文件操作,雖然PHP的文件操作效率也不低的;
  43. 優化Select SQL語句,在可能的情況下盡量少的進行Insert、Update操作(在update上,我被惡批過);
  44. 盡可能的使用PHP內部函數(但是我卻爲了找個PHP裏面不存在的函數,浪費了本可以寫出一個自定義函數的時間,經驗問題啊!);
  45. 循環內部不要聲明變量,尤其是大變量:對象(這好像不只是PHP裏面要注意的問題吧?);
  46. 多維數組盡量不要循環嵌套賦值;
  47. 在可以用PHP內部字符串操作函數的情況下,不要用正則表達式;
  48. foreach效率更高,盡量用foreach代替while和for循環;
  49. 用單引號替代雙引號引用字符串;
  50. “用i+=1代替i=i+1。符合c/c++的習慣,效率還高”;
  51. 對global變量,應該用完就unset()掉;(王朝網絡 wangchao.net.cn)
    http://tc.wangchao.net.cn/bbs/detail_2018915.html

正則表示式 Regular Expression 基本

特殊字元

n : 換行字元

r : 歸位字元

t : 定位字元(Tab)

字元類別

. : 除了 n 以外的任何字元

[aeiou] - 方括號表示此位置可出現括號內的任何字元 「k[aeiou]」可為ka ke ki ko ku

[0-9a-zA-Z] - 減號表示範圍,[0-9a-zA-Z]可為0rZ

數量詞

? : 0或1次

  • : 0或多次
  • : 至少一次

{n} : 剛好 n 次

{n,} : 最入要 n 次

{n,m} : n 到 m 次

群組

用括號( ) 把樣式括起來,可再搭配數量詞

(co){2}a : cocoa

co([A-Z]a){2} : coCaCa ..  coBaBa