锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
瓚婃潵瓚婂鐨勪漢閫夋嫨鐢∕ac鎴栬匧inux鐜榪涜璺ㄥ鉤鍙伴」鐩紑鍙戙備絾鏄粛鐒舵湁澶ч儴鍒嗕漢涔?fàn)鎯簬鍦╓indows鐜涓嬭繘琛屽紑鍙戯紝姣曠珶Windows鍦ㄥ悇鏂歸潰浣跨敤榪樻槸杈冧負(fù)鏂逛究錛岀壒鍒儚鏂囦歡鐗堟湰綆$悊錛圙it錛孲VN絳夛級
鍦ㄨ法騫沖彴涓嬪紑鍙戞父鎴忔垨杞歡錛屽氨闇瑕佹湁涓濂楁柟渚跨殑鑷姩鍖栧伐鍏楓俉indows涓嬮渶瑕佷嬌鐢ㄦ壒澶勭悊錛岃櫧鐒舵湁PowerShell鍔犳寔錛屼絾榪欎笢瑗垮浜嗕篃涓嶉潬璋憋紝鍙湁涓涓鉤鍙拌兘鐢ㄣ傚ぇ瀹惰繕鏄範(fàn)鎯疞inux Shell銆傝繛Mac騫沖彴閮藉彲浠ョ敤Shell錛學(xué)indows涓婅鍋氳嚜鍔ㄥ寲鑴氭湰灝辨樉寰楅潪甯稿按灝?/p>
鎴戞浘緇忓湪欏圭洰涓嬌鐢╣o緙栧啓浜嗕竴濂楀皢閰嶇疆杞負(fù)鎵瑰鐞嗗拰Linux Shell鐨勫伐鍏楓備嬌鐢ㄨ繃紼嬭緝涓哄鏉傦紝浣嗘槸鑳借法騫沖彴榪涜琛ㄦ牸瀵煎嚭鍜屽崗璁紪璇戠瓑宸ヤ綔銆?/p>
浣嗘槸錛岃繖涓伐鍏瘋繕鏄渶瑕佸涓嶅悓鐨勫鉤鍙扮紪鍐欏濂楁ā鏉胯繘琛屼唬鐮佺敓鎴愶紝闈炲父綣佺悙銆傚鏋滄湁涓濂楄法騫沖彴鐨凷hell錛岀紪鍐欎竴嬈″氨鍙互璺ㄥ鉤鍙拌繍琛岄偅璇ュ濂姐?/p>
鏌ラ槄璧勬枡鍚庯紝涓鍏辨湁鍑犱釜鏂規(guī)錛?/p>
浣跨敤Python浣滀負(fù)鑷姩鍖栧伐鍏?榪欎釜鏂規(guī)鍏跺疄灝辨槸浣跨敤python鎶婃壒澶勭悊鍜孲hell騫茬殑浜嬫儏鐢ㄤ唬鐮佹潵瑙e喅銆備絾鍓嶆彁鏄閲嶆柊瀛︿範(fàn)Python錛屼篃闇瑕佷竴閮ㄥ垎鐔熸?zhèn)壗巰鍗曠殑Python璇硶錛屼漢涓哄涔?fàn)鎴愭湰杈冮珮锛屼篃姣旇緝璐逛簨銆?/p>
鑷繁緙栧啓涓濂楃嫭绔嬬殑鑷姩鍖栧伐鍏?榪欎釜鏂規(guī)闇瑕侀暱鏃墮棿鐨勯傞厤榪囩▼錛屽樊浠涔堟寚浠よˉ浠涔堟寚浠わ紝瀵歸」鐩繘搴︽湁涓瀹氬共鎵般?/p>
鑷繁緙栧啓Linux Shell鐨勮В閲婂櫒 榪欎釜灝辨洿闅句簡錛岃鍋氬埌100%鍏煎錛屽熀鏈笉鍙兘銆?/p>
鍦ㄧ爺絀禖ygwin鍜孧ingw濡備綍鏁村悎鐨勮繃紼嬩腑錛屾垜璇搷浣滅偣鍑諱簡涓涓猻h鍚庣紑鐨凩inux Shell錛岃繖鏄垜甯屾湜璁㎝ingw榪愯鐨凷hell銆傜粨鏋滃憿錛宻h鍚庣紑鐨勬枃浠跺眳鐒惰兘鍦╓indows涓嬭繍琛屻傛垜椹笂緙栧啓浜嗕竴緋誨垪鐨勪緥瀛愶紝鍙戠幇鍑犱箮瀹屽叏鍏煎甯哥敤鐨凷hell鎸囦護(hù)銆?緇忚繃鐮旂┒錛屾垜鍙戠幇Windows涓嬭兘榪愯sh鏂囦歡鏄敱Git鑷甫鐨刴sys2鎻愪緵鐨勩侻SYS2 錛圡inimal SYStem 2錛?nbsp;http://www.msys2.org/錛?/a> 鏄竴涓狹SYS鐨勭嫭绔嬫敼鍐欑増鏈紝涓昏鐢ㄤ簬 shell 鍛戒護(hù)琛屽紑鍙戠幆澧冦傚悓鏃跺畠涔熸槸涓涓湪Cygwin 錛圥OSIX 鍏煎鎬у眰錛?鍜?MinGW-w64錛堜粠"MinGW-鐢熸垚"錛夊熀紜涓婁駭鐢熺殑錛岃拷姹傛洿濂界殑浜掓搷浣滄х殑 Windows 杞歡銆?/p> 閭e氨鏄錛?span style="box-sizing: border-box; font-weight: 600;">鍙瀹夎浜咷it錛?a style="box-sizing: border-box; background-color: transparent; color: #0366d6; text-decoration-line: none;">https://git-scm.com/錛夛紝
闂繃鍛ㄨ竟鍙嬩漢鏄惁鐭ラ亾榪欎竴鍔熻兘錛岄兘璇寸煡閬擄紝鍙槸娌℃湁騫挎挱鑰屽凡錛屽鎴戠爺絀跺緢涔?#8230;…
Golang鐨勭儹鏇存柊閲囩敤浠涔堟満鍒?
浣跨敤go1.8鎻愪緵鐨刾lugin鍖呮満鍒跺疄鐜?/p>
plugin鍖呮湰韜璁$殑鐩殑鏄儹鏇存柊涔?
plugin鍖呭叾瀹炲彧鏄敮鎸佸皢浠g爜鍒嗗埆緙栬瘧涓哄涓姩鎬佸簱,鍔ㄦ佸姞杞藉悗榪愯 騫朵笉鑳藉畬鍏ㄦ敮鎸佺被浼糃/C++鐨勫姩鎬佸簱鏂瑰紡澶勭悊浠g爜
甯︾姸鎬佺殑榪涚▼鐑洿鏂扮殑鍩烘湰姒傚康鍙婅寖鍥存槸浠涔?
鏁版嵁閮ㄥ垎(model)涓嶆洿鏂? 鍙洿鏂伴昏緫閮ㄥ垎(鍑芥暟)
琛ㄦ牸鍜岄厤緗洿鏂扮畻鐑洿鏂頒箞?
綆? 浣嗕笉鏄湰鏂囨弿榪拌寖鍥?/p>
鐑洿鏂拌兘鍦╳indows涓婁嬌鐢ㄤ箞?
涓嶆敮鎸?/p>
鎴戣兘灝嗗師鏉ヤ竴涓猠xe鐨勪唬鐮佺紪璇戜負(fù)so鎻愪緵緇檖lugin浣跨敤涔?
鍙互, 浣嗘槸蹇呴』浠嶇劧淇濈暀main鍖呬綔涓烘彃浠跺叆鍙? 騫跺湪main鍖呭唴娣誨姞鎻愪緵緇檖lugin璋冪敤鍏ュ彛.
濡傛灉鍔ㄦ佸簱涓病鏈塵ain鍖? 緙栬瘧鍑虹殑so鑳界敤涔?
涓嶈兘, 鍖呭繀欏誨寘鍚玬ain, 鍚﹀垯杈撳嚭鐨勬槸.a鐨勬枃浠? plugin鍖呭姞杞戒細(xì)鎶ラ敊
鍔ㄦ佸簱涓? 闈瀖ain鍖呯殑鐨勪唬鐮佷慨鏀硅兘鍋氱儹鏇存柊涔?
涓嶈兘!(宕╂簝浜嗗惂, 鎴戞彁浜嗕竴涓猧ssue: https://github.com/golang/go/issues/20554)
濡傛灉紜疄鍋氫簡淇敼, 搴曞眰浼?xì)鎶ラ? plugin was built with a different version of package
瑙e喅鏂規(guī)硶: 淇敼plugin鍖呭簳灞傚疄鐜板茍閲嶆柊緙栬瘧 鎵撳紑runtime/plugin.go, 娉ㄩ噴浠ヤ笅浠g爜 for _, pkghash := range md.pkghashes { if pkghash.linktimehash != *pkghash.runtimehash { return "", nil, pkghash.modulename } } 鎵ц/usr/local/go/run.bash 閲嶇紪璇?嫻嬭瘯
浠g爜涓摢浜涘彲浠ヨ鏇存柊? 鏂規(guī)硶鍙互琚洿鏂頒箞? 闂寘鍛?
鍙兘鏇存柊鎷ユ湁闈欐佸湴鍧鐨勭粨鏋?渚嬪: 鍖呯駭鍒嚱鏁?綾諱技浜庨潤鎬佸嚱鏁?
渚嬪: svc_0.so閲屾湁涓涓狥oo鍑芥暟, svc_1.so淇敼浜咶oo鍑芥暟瀹炵幇, 鐑洿鏂板彲瀹炵幇
闂寘=鍑芥暟+鎹曡幏鍙橀噺, 瀹為檯涓婃槸涓涓姩鎬佺粨鏋? 娌℃湁闈欐佸湴鍧, 鏃犳硶琚洿鏂?/p>
鍚勭鍖呯駭鍒彉閲? 緇撴瀯浣撳彉閲? 緇撴瀯浣撴柟娉? 灞閮ㄥ彉閲忓潎涓嶈兘琚儹鏇存柊, 浣嗘槸鍙橀噺鍊間笉浼?xì)琚奖鍝?/p>
鏂板緇撴瀯鍙互琚繍琛?/p>
浣跨敤緇撴瀯浣撴柟娉曡皟鐢ㄤ簡鍖呯駭鍒嚱鏁? 鍖呯駭鍒嚱鏁拌兘琚洿鏂頒箞?
鍙互, 铏界劧鏂規(guī)硶涓嶈兘琚洿鏂? 浣嗘柟娉曡璋冪敤鐨勫寘綰у埆鍑芥暟鐨勫湴鍧鏄浐瀹氱殑, 鎵浠ュ彲浠ヨ鐑洿鏂?/p>
init鍖呭垵濮嬪寲鍑芥暟鑳界敤涔? 鑳借鐑洿鏂頒箞?
瀹樻柟榪欐牱鎻忚堪:
When a plugin is first opened, the init functions of all packages not already part of the program are called. The main function is not run. A plugin is only initialized once, and cannot be closed鎻掍歡絎竴嬈¤鎵撳紑鏃? 鍏跺叧鑱旂殑, 娌℃湁鎴愪負(fù)紼嬪簭鐨勪竴閮ㄥ垎鐨勬墍鏈夌殑鍖呯殑init鍑芥暟灝嗚璋冪敤. 鎻掍歡鐨刴ain鍑芥暟涓嶄細(xì)琚皟鐢? 鎻掍歡鍙細(xì)琚垵濮嬪寲涓嬈? 涓嶈兘琚叧闂?/p>
鍥犳, 闇瑕佹墜鍔ㄥ皢init鍑芥暟鏀規(guī)垚鑷繁鐨勫嚱鏁? 緇熶竴鍦╯o鐨刴ain鍖呴噷璋冪敤
濡備綍緙栬瘧鑾峰緱plugin鍖呮敮鎸佺殑鍔ㄦ佸簱
SVCNAME=$1 SVCVER=$2 TIMESTAMP=`date '+%Y%m%d_%H%M%S'` go build -v -buildmode=plugin --ldflags="-pluginpath=${SVCNAME}_${TIMESTAMP}" -o ${SVCNAME}_${SVCVER}.so ${SVCNAME}-buildmode=plugin鏄噸瑕佸弬鏁?/p>
--ldflags閲岀殑-pluginpath鐨勪綔鐢ㄦ槸: 姣忔緙栬瘧鐨勫唴閮ㄨ瘑鍒礬寰勯兘鏄笉鍚岀殑, 閬垮厤閲嶅鍔犺澆鐨勮鍛?/p>
鐩鎬綅鎶鏈ぇ瑙勬ā鍑虹幇鍦ㄩ瓟鍏戒笘鐣學(xué)LK鐗堟湰, 鐜板湪搴旂敤宸茬粡騫挎硾搴旂敤鍦ㄥ悇縐峂MORPG娓告垙涓? 涓嬮潰瀵圭浉浣嶆妧鏈殑鍋氭硶榪涜綆鍗曞綊綰蟲眹鎬?/p>
鏃╂湡鍓湰鐨勫嚭鐜? 閬垮厤鎶㈡棶棰? 鎵浠? 鍓湰鍏跺疄鏈韓灝辨槸涓縐嶇浉浣嶆妧鏈? 鍙笉榪囧疄鐜版椂, 鎴戜滑涓鑸細(xì)灝嗗皬闃熷拰鎬墿鐩存帴棰勫垎閰嶅湪鐙珛鐨勪竴涓壇鏈疄渚嬩腑(鎵浠ュ壇鏈師鏂囦篃鏄疄渚嬬殑鎰忔?
鐩鎬綅鎶鏈繕娌℃湁姝e紡鍛藉悕鏃? 鍚屼竴涓満鏅? 鐜╁榪涘埌涓嶅悓鐨勫垎綰跨湅鍒扮殑鐜╁涓嶄竴鏍? 涔熸槸灞炰簬鐩鎬綅鐨勪竴縐? 褰撶劧, 濡傛灉鏄粍闃熺帺瀹? 鏈嶅姟鍣ㄩ粯璁や細(xì)鍒嗛厤鎵鏈夐槦浼嶇帺瀹跺湪鍚屼竴涓嚎(浣嶉潰)
鍓湰鐩鎬綅鍜屽垎綰跨浉浣嶅叾瀹為兘鏄潤鎬佺浉浣? 涓鏃﹁繘鍏? 涓斾笉浼?xì)鏈夊垏鎹㈡垨鑰呮販鍚堟煡鐪嬬殑榪囩▼. 鐪熺浉浣嶅彲浠ュ湪涓涓満鏅腑,鍔ㄦ佸垏鎹㈢浉浣? 鐩鎬綅鍐呭拰鐩鎬綅澶栨墍浠ヤ笉鍚?/p>
鎴戜滑甯歌鐨勭湡鐩鎬綅琛ㄧ幇涓? 鐩鎬綅涓殑瑙掕壊+鐜╁+闃熶紞鎴愬憳
鍦ㄦ姢閫佷換鍔℃椂, 榪樹細(xì)鍦ㄤ笂闈㈡墍瑙佽鑹蹭腑鍙犲姞涓栫晫涓殑鎵鏈夎鑹? 涔熷氨鏄, 浣犲拰闃熶紞鎴愬憳鍙互鐪嬪埌鐨勮鑹? 鍏朵粬浜虹湅涓嶅埌, 鍏朵粬浜轟篃鐪嬩笉鍒頒綘鍜屼綘鐨勯槦浼嶆垚鍛?/p>
涓轟簡娓呮櫚鐨勭畝鍗曠殑鎻忚堪, 鎴戜負(fù)鐩鎬綅鍒涘緩濡備笅姒傚康涓庡悕璇?/p>
琛ㄧ幇涓洪櫎鐜╁澶栫殑瑙掕壊(鎬墿,浜や簰鐗╀綋涓庣浉浣嶅彲瑙佸満鏅?
榪欐槸鏈甯歌鐨勪竴縐嶇浉浣嶅唴瑙掕壊
鎸佹湁鍙橀噺
鍙朠hasingID鏃?涓篜hasingTargetID
鐢熸垚瑙勫垯
褰撶帺瀹跺紑鍚浉浣嶅悗, 鍦ㄧ帺瀹剁浉浣嶅唴鐢熸垚鐨勮鑹?/span>涓虹鏈夊浣?
姝ゆ椂, 灝?PhasingTargetID璁劇疆涓虹浉浣嶇敓鎴愯呯殑瀹炰緥ID
鍒犻櫎瑙勫垯
濡傛灉鐜╁閫鍑虹浉浣? 縐佹湁瀹綋浼?xì)瀛樺湪涓孌墊椂闂存垨鎸夌収闇姹傚垹闄?/p>
涓鑸寚鎻愬墠鏀劇疆鍦ㄥ満鏅腑, 涓栫晫鍐呬笉鍙, 浣嗘槸鑳借鍚岀浉浣嶇帺瀹跺彲瑙?涓斿悓鐩鎬綅鐜╁閮藉彲浠ヤ簰鐩稿彲瑙?姣斿: 鍙鎺ヤ簡鍚屼竴涓換鍔$殑鐜╁, 閮藉彲浠ョ湅鍒扮殑NPC
鎸佹湁鍙橀噺
鍙朠hasingID鏃?涓篜ublicPhasingID
鐢熸垚瑙勫垯
閫氳繃鍦烘櫙緙栬緫鍣? 鏀劇疆瑙掕壊鏃? 璁劇疆鍏跺彲琚瀵熷埌鐨勪換鍔D
瑙掕壊琚姞杞藉悗, 灝嗕換鍔D璁劇疆鍒癝taticPhasingID
鍒犻櫎瑙勫垯
鍦烘櫙鍒犻櫎, 瑙掕壊鍒犻櫎
鍖呭惈鐜╁涓庡悓闃熶紞鐜╁
寮鍚浉浣嶅悗, 鍙縐佹湁瀹綋+鍏湁瀹綋
闃熼暱瑙嗕負(fù)鐩鎬綅涓諱綋, 鍗曚漢鏃? 鑷繁涓洪槦闀?/p>
闃熶紞鍏朵粬鎴愬憳鍏變韓闃熼暱鐨勭鏈夌浉浣嶅浣?/p>
闃熶紞鍏朵粬鎴愬憳鏍規(guī)嵁鑷繁鐨凱ublicPhasingID鍖歸厤鐩爣瀵硅薄鐨凱ublicPhasingID鏃跺彲浜掔浉鍙
鎸佹湁鍙橀噺
鐩鎬綅寮鍚椂, 鍙朠hasingID鏃? 涓鴻鑹插疄渚婭D
鐩鎬綅鍏抽棴鏃? 鍙朠hasingID鏃? 涓?
PublicPhasingID
褰撲袱涓鑹茬殑PhasingID鐩哥瓑鏃? 涓諱綋涓庣鏈夊浣撲簰鐩稿彲瑙?/p>
褰撲袱涓鑹茬殑PublicPhasingID鐩哥瓑鏃? 涓諱綋涓庡叕鏈夊浣撲簰鐩稿彲瑙?/p>
鍙互閫氳繃寮鍏寵緗? 鏄惁鍦ㄥ彲瑙佺殑鐩鎬綅瀹綋鍩虹涓? 鍙犲姞涓栫晫瑙掕壊(鎶ら佷換鍔?
瑙e喅鏂規(guī)硶:
鍦≒articleSystem緇勪歡涓婂嬀閫塖ubEmitter, 涓嶈闂負(fù)浠涔? 鍋氬氨濂?/p>
鐩稿叧瀹樻柟閾炬帴
http://answers.unity3d.com/questions/218369/shuriken-particle-system-not-rendering-particles-w.html
澶╃厼鐨? 4.X紼嬪簭鏃犳硶璁塊棶綺掑瓙緋葷粺鐨勫弬鏁? 鎵浠ュ彧鑳借緵鑻︾編鏈厔寮熶滑浜?/p>
杞澆璇鋒敞鏄?http://m.shnenglu.com/sunicdavy鎴橀瓊灝忕瓚
緗戜笂鏈夊緢澶氱炕璇戜簡鑻規(guī)灉瀹樻柟鐨勬惌寤篿pv6嫻嬭瘯緗戠粶鐜鐨勬枃绔? 渚嬪:
http://www.cocoachina.com/ios/20160525/16431.html
娉ㄦ剰浠ヤ笅鍑犵偣
鏃犻渶璺敱鍣ㄦ敮鎸乮pv6, 浣嗙尗(modem)蹇呴』瑕佹敮鎸乮pv6. 鍥犱負(fù)鐜板湪澶у鏁伴兘鏄厜鐚?br>浠ヤ笅鎴浘鏄厜鐚鐞嗙![]()
鍏夌尗閲岀殑ipv6鏀寔榛樿鏄叧闂殑, 鎵浠ラ渶瑕佹墜鍔ㄦ墦寮, 鎸夐粯璁ゅ奸厤緗嵆鍙?/p>
璇風(fēng)‘璁ac os緋葷粺蹇呴』鏄痮sx 10.11浠ュ悗鐨勭増鏈墠鍙互鎵撳紑NAT64
杞澆璇鋒敞鏄?http://m.shnenglu.com/sunicdavy鎴橀瓊灝忕瓚
WWW綾繪湰韜凡緇忔敮鎸佷簡IPV6, 鏃犻渶澶勭悊, 榪欓噷璁茶В浣跨敤C#鍘熺敓Socket鐨勫鐞?
4.7.2鍜?.4.3鐨勫綋鍓嶇増鏈湪mono灞傚茍鏈敮鎸乮pv6浠g爜閫傞厤鐨勬牳蹇冨嚱鏁癵etaddrinfo, 鍥犳闇瑕侀氳繃oc灞傚仛杞崲, 浠ヤ笅鏄唬鐮?br>榪欐浠g爜灝唃etaddrinfo鐨勫湴鍧杞崲鎴愪竴涓畬鏁村瓧絎︿覆, 鏍煎紡鏄?
ipv4|ipv4鍦板潃|ipv6|ipv6鍦板潃|
P.S. copyStr榪欑鐢ㄦ硶鍙傝冧簡http://www.codeinsect.net/blog/2016/05/26/unity-ipv6-socket-%E6%94%AF%E6%8C%81%EF%BC%8C%E5%B7%B2%E6%B5%8B%E8%AF%95%E9%80%9A%E8%BF%87/
浼?xì)閫犳垚鍐呭瓨娉勯湶, 濡傛灉鏈夋洿濂界殑鏂規(guī)硶嬈㈣繋鍙嶉
杞澆璇鋒敞鏄?http://m.shnenglu.com/sunicdavy鎴橀瓊灝忕瓚
iosaddrinfo.mm
1: #include <sys/socket.h>2: #include <netdb.h>3: #include <arpa/inet.h>4: #include <err.h>5: #define OUTSTR_SIZE 40966: extern "C"7: {8: const char* copyStr( const char* str )9: {10: char* s = (char*)malloc(strlen(str) + 1);11: strcpy(s, str);12: return s;13: }14: const char* IOSGetAddressInfo(const char *host )15: {16: if( NULL == host )17: return copyStr("ERROR_HOSTNULL");18: char outstr[OUTSTR_SIZE];19: struct addrinfo hints, *res, *res0;20: memset(&hints, 0, sizeof(hints));21: hints.ai_family = PF_UNSPEC;22: hints.ai_socktype = SOCK_STREAM;23: hints.ai_flags = AI_DEFAULT;24: printf("getaddrinfo: %s\n", host);25: int error = getaddrinfo(host, "http", &hints, &res0);26: if (error != 0 )27: {28: printf("getaddrinfo: %s\n", gai_strerror(error));29: return copyStr("ERROR_GETADDR");30: }31: memset( outstr, 0, sizeof(char)*OUTSTR_SIZE );32: struct sockaddr_in6* addr6;33: struct sockaddr_in* addr;34: const char* solvedaddr;35: char ipbuf[32];36: for (res = res0; res; res = res->ai_next)37: {38: if (res->ai_family == AF_INET6)39: {40: addr6 =( struct sockaddr_in6*)res->ai_addr;41: solvedaddr = inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, sizeof(ipbuf));42: strcat ( outstr, "ipv6|");43: strcat ( outstr, solvedaddr);44: }45: else46: {47: addr =( struct sockaddr_in*)res->ai_addr;48: solvedaddr = inet_ntop(AF_INET, &addr->sin_addr, ipbuf, sizeof(ipbuf));49: strcat ( outstr, "ipv4|");50: strcat ( outstr, solvedaddr);51: }52: strcat ( outstr, "|");53: }54: return copyStr(outstr);55: }56: }杞澆璇鋒敞鏄?http://m.shnenglu.com/sunicdavy鎴橀瓊灝忕瓚
iosaddrinfo.h
1: #pragma once2: extern "C"{3: const char* IOSGetAddressInfo(const char *host );4: }
1: using System;2: using System.Net;3: using System.Net.Sockets;4: using System.Runtime.InteropServices;5: using UnityEngine;6: using System.Collections;7: using System.Collections.Generic;8: public class IOSIPV69: {10: [DllImport("__Internal")]11: private static extern string IOSGetAddressInfo(string host );12: public static IPAddress[] ResolveIOSAddress(string host, out AddressFamily af)13: {14: af = AddressFamily.InterNetwork;15: var outstr = IOSGetAddressInfo(host);16: Debug.Log("IOSGetAddressInfo: " + outstr);17: if (outstr.StartsWith ("ERROR"))18: {19: return null;20: }21: var addressliststr = outstr.Split('|');22: var addrlist = new List<IPAddress>();23: foreach (string s in addressliststr)24: {25: if (String.IsNullOrEmpty(s.Trim()))26: continue;27: switch( s )28: {29: case "ipv6":30: {31: af = AddressFamily.InterNetworkV6;32: }33: break;34: case "ipv4":35: {36: af = AddressFamily.InterNetwork;37: }38: break;39: default:40: {41: addrlist.Add(IPAddress.Parse(s));42: }43: break;44: }45: }46: return addrlist.ToArray();47: }48: }杞澆璇鋒敞鏄?http://m.shnenglu.com/sunicdavy鎴橀瓊灝忕瓚
鏌愪漢鐨勮В鍐蟲柟妗?br>http://www.codeinsect.net/blog/2016/05/26/unity-ipv6-socket-%E6%94%AF%E6%8C%81%EF%BC%8C%E5%B7%B2%E6%B5%8B%E8%AF%95%E9%80%9A%E8%BF%87/
娉ㄦ剰, 姝ゆ柟妗堜腑鐨勬柟娉曞彲鐢? 浣嗘槸鍦板潃騫朵笉鑳借В鍐沖崡鍖椾簰閫氱殑闂
1. 鎶鑳介儴鍒嗙殑鐗規(guī)晥鍙互閬嶅巻鍔ㄤ綔琛ㄦ挱鏀劇殑鎵鏈夌壒鏁坕d, 鎻愬墠棰勮澆
2. buff綾葷壒鏁堟槸鍔ㄦ佺‘瀹氱殑,鏃犳硶鍒嗘瀽. 闇瑕侀氳繃瑙掕壊琛ㄦ坊鍔犺祫婧恑d鍦ㄥ姞杞借鑹叉椂鍔犺澆鐗規(guī)晥
榪欑鍋氭硶鐨勭己鐐?
褰撹鑹茬壒鏁堟晥鏋滆皟鏁存椂, 緹庢湳鍜岀瓥鍒掗渶瑕佽皟鏁寸壒鏁坕d琛? 澶氬嚭鏉ヤ笉鐢ㄧ殑鐗規(guī)晥涔熷姞杞芥槸鎰熻涓嶅嚭鏉ョ殑, 鍒嗘瀽涔熸槸寰堝洶闅劇殑
鎵浠ヨ繖縐嶄互浼犵粺鐨勭數(shù)瀛愯〃鏍奸厤緗負(fù)涓績鐨勬柟寮忓湪Unity3D閲? 鍐呭瓨, 鍖呬紭鍖栦細(xì)鏄釜澶ч棶棰?
閭d箞, 浠涔堟槸Unity3D鐨勫紑鍙戞牳蹇冩濇兂?
闄や簡緇勪歡鎬濇兂澶? 灝辨槸Prefab, 璐交鏁翠釜緙栬緫鍣ㄥ強寮曟搸鑷鑷崇粓
澶勭悊瑙掕壊鎼哄甫鐗規(guī)晥鍔犺澆鍚庢挱鏀劇殑榪欎釜case, 鐢≒refab涓轟腑蹇冪殑璧勬簮綆$悊鏉ュ仛鐨勮瘽, 澶ф灝辨槸榪欐牱:
1. 紼嬪簭緙栧啓涓涓鑹茬壒鏁堝垪琛ㄨ剼鏈? 鎶奓ist鏆撮湶鍑烘潵鍙互鍦ㄧ紪杈戝櫒閲屼嬌鐢?/p>
2. 緹庢湳鍦ㄥ仛鎶鑳芥椂, 鎶婅鐢ㄥ埌鐨勭壒鏁堟嫋鎷藉埌List涓?/p>
3. 鐗規(guī)晥鏃犻渶鍐嶇紪鍒跺叏灞ID緙栫爜
4. 絳栧垝鏍規(guī)嵁榪欎釜瑙掕壊鎸傛帴鐨勭壒鏁堢儲寮? 鍦ㄩ厤緗〃閲屾坊鍔犳挱鏀炬寚浠?/p>
榪欐牱鍋氱殑浼樼偣:
瑙掕壊寮曠敤鍒扮殑璧勬簮鎵嶄細(xì)琚墦鍒版渶緇堟父鎴忓寘鍐? 涓嶄嬌鐢ㄧ殑璧勬簮鏄笉浼?xì)琚姞铦茬?/p>
綾諱技鐨? 鍦║I鐗規(guī)晥閲? 涔熷簲璇ユ槸灝嗚鎾斁鐨勭壒鏁堟寕鎺ュ埌瀵硅薄涓? 鑰屼笉鏄姩鎬侀氳繃浠g爜鍘誨姞杞?/p>
鍦║nity3D涓? Prefab灝嗗浘鐗?Shader, 鐗規(guī)晥, 鑴氭湰絳変竴鍒囧鉤絳夌湅寰? 鍙鏈夊紩鐢? 涓嬈℃у姞杞?
鍚屾椂, 涔熷彲浠ラ氳繃闈欐佸伐鍏峰垎鏋怭refab.
濡傛灉鏄氳繃浠g爜鍔犺澆鐨勬晥鏋? 鍒欏彧鑳借紼嬪簭鍛樺仛浼樺寲, 榪欑榪囩▼鏃犳硶璁︰nity3D瀹樻柟鍚庢湡鎻愪緵鐨勫伐鍏瘋繘琛屼紭鍖?/p>
鎵浠? 鎺ㄨ崘浣跨敤Prefab涓轟腑蹇冪殑璧勬簮綆$悊妯″紡
涓嬮潰浠嬬粛涓媝roto3鐨勪竴浜涚粏鑺傚彉鍖?/p>
榪欎釜鐗堟湰鐨刾rotoc鐨刾rotobuf緙栬瘧鍣ㄥ凡緇忓彲浠ユ敮鎸乸roto2璇硶鍜宲roto3鐨勮娉?/p>
濡傛灉浣犵殑proto鏂囦歡娌℃湁娣誨姞syntax璇存槑鐨勮瘽, 鐢ㄨ繖涓増鏈殑緙栬瘧鍣ㄤ細(xì)鎶ラ敊, 鎻愮ず浣犻粯璁roto2鏀寔, 璇鋒坊鍔犺娉曟爣璁?/p>
syntax = "proto2";
鍙繚鐣檙epeated鏍囪鏁扮粍綾誨瀷, optional鍜宺equired閮借鍘繪帀浜?/p>
瀹為檯浣跨敤璇佹槑, required鐨勮璁$‘瀹炴槸铔嬬柤, C++鐨勮皟璇曠増浼?xì)寮瑰嚭assert,release鐗堝拰optional涔熸病鍟ュ尯鍒?/p>
map緙栧啓鏍煎紡涓?/p>
map<key_type, value_type> map_field = N;
渚嬪:
map<string, Project> projects = 3;
浠g爜鐢熸垚紜鏀寔map, 榪欏浜庡緢澶氳璦鏉ヨ鍙堝彲浠ュ伔鎳掍簡
浣嶄簬proto2璇硶鐨勫瓧孌祅umber鍚庣殑[default=XX]
榪欎釜涓滆タ涓嶈兘鐢ㄤ簡, 鐞嗙敱鏄?
瀵逛簬鍚屼竴孌靛簭鍒楀寲鍚庣殑鏁版嵁, 濡傛灉搴忓垪鍖栫鐨刣efault鍜屽弽搴忓垪鍖栫鐨刣efault鎻忚堪涓嶄竴鏍蜂細(xì)瀵艱嚧鏈緇堢粨鏋滃畬鍏ㄤ笉涓鑷?/p>
鍗? 鍚屼竴涓暟鎹袱涓粨鏋? 榪欐槸涓嶅彲棰勬祴鐨勭粨鏋? 鍥犳騫叉帀榪欎釜鐗規(guī)?/p>
涓嶈繃鏈漢瑙夊緱, 瀵逛簬娓告垙鏉ヨ, 榪欎釜鍔熻兘鏈韓鍙互鍘嬬緝寰堝鏁版嵁,铏界劧浼?xì)鏈夐殣鎮(zhèn)?/p>
proto2閲岀殑榛樿鍊兼槸鏋氫婦鐨勭涓涓獀alue瀵瑰簲鐨勫? 涓嶄竴瀹氫負(fù)0
proto3鍦ㄤ綘瀹氫箟value鏃? 寮哄埗瑕佹眰絎竴涓煎繀欏諱負(fù)0
榪欎釜淇敼涓洪伩鍏嶉殣鎮(zhèn)h繕鏄湁甯姪鐨?/p>
any綾誨瀷, 鍙互浠h〃浠諱綍綾誨瀷, 鍙互鍏堣榪涙潵, 鍐嶈繘琛岃В鏋? 娌″叿浣撶敤, 姝ュ瓙璺ㄥぇ浜嗘曟壇鍒拌泲
榪欎釜鏋佸ソ, json鍐嶆琚悓鍖栦簡
js, objc, ruby, C#絳夌瓑
鐒惰? C#鐗堟湰鐨勫熀紜runtime搴撴槸鐢–# 6.0鐨勮娉曞啓鐨?榪欏浜嶶nity mono紲栦紶2.0鏉ヨ, 紜疄鎵埌铔嬩簡,娌℃硶鐢?/p>
緙栬瘧璧鋒潵紼嶅井楹葷儲, 榪樿涓嬩釜琚鎺夌殑cmake鈥?/p>
Golang鐨勫畼鏂筽rotobuf鏀寔: https://github.com/golang/protobuf
瀵逛簬proto2鐨勬枃浠? 鐢熸垚鐨刧o浠g爜涓殑緇撴瀯浣撲緷鐒朵嬌鐢ㄧ被鍨嬫寚閽堜綔涓洪粯璁ゅ瓨鍌? 鍏煎鑰佺殑緋葷粺
瀵逛簬proto3鐨勬枃浠? 鐢熸垚鐨刧o浠g爜涓殑緇撴瀯浣撶洿鎺ヤ嬌鐢ㄥ瓧孌典綔涓洪粯璁ゅ瓨鍌? 涓嶅啀浣跨敤GetXXX鏉ヤ綔涓哄瓧孌靛艱闂? 璧嬪兼椂涔熸棤闇浣跨敤proto.綾誨瀷() 鍑芥暟榪涜鎸囬拡綾誨瀷瀛楁鍊煎垱寤?
榪欎釜璋冩暣寰堟槸鏂逛究, 浣嗕涪澶變簡optional鍒ゆ柇鍔熻兘, 瀵瑰簲C++閲屽氨鏄痟asXXX鐨勫姛鑳? 涓嶈繃濂芥榪欎釜閫昏緫鐜板湪鐢ㄧ殑涓嶅浜?/p>
榪欎釜淇敼澶ф涔熸槸閰嶅悎json搴忓垪鍖栨潵鍋氱殑, go榛樿鐨刯son搴忓垪鍖栨椂, 鏃犳硶浣跨敤proto2鐢熸垚鐨勭粨鏋勪綋鐨? 鍥犱負(fù)閮芥槸鎸囬拡,鏃犳硶璧嬪?.
鏂版彃浠朵細(xì)緇欐瘡嬈$敓鎴愮殑鏂囦歡娣誨姞榪欐牱涓孌典唬鐮?/p>
var fileDescriptor0 = []byte{// 220 bytes of a gzipped FileDescriptorProto0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x64, 0x8f, 0xcd, 0x4e, 0xc5, 0x20,0x10, 0x85, 0x53, 0xbd, 0x35, 0x32, 0xb7, 0xdd, 0x4c, 0x5c, 0xb0, 0x70, 0x71, 0xd3, 0xb8, 0x70,0x75, 0x17, 0xfa, 0x04, 0xc6, 0xd8, 0xb8, 0x50, 0x63, 0xa8, 0x2f, 0x80, 0xed, 0x44, 0x89, 0x28,0x04, 0xc6, 0xbf, 0x47, 0xf1, 0x6d, 0x95, 0x49, 0x8d, 0x4d, 0x5c, 0x01, 0xdf, 0x39, 0x7c, 0x30,0x00, 0x1c, 0x82, 0xdf, 0xc6, 0x14, 0x38, 0xe0, 0xaa, 0xec, 0xbb, 0x37, 0x68, 0x2e, 0x3e, 0x62,0x48, 0x7c, 0x49, 0x76, 0xa2, 0x84, 0x47, 0xd0, 0xde, 0x96, 0xf8, 0xee, 0x33, 0xd2, 0x8d, 0x7d,0x26, 0x5d, 0x6d, 0xaa, 0x63, 0x65, 0xda, 0xb8, 0x84, 0xd8, 0x41, 0x63, 0xc2, 0x7b, 0xef, 0xc8,0x4f, 0x52, 0xda, 0x91, 0x52, 0x93, 0x16, 0x0c, 0x0f, 0x41, 0x89, 0xa9, 0x77, 0x9e, 0xf4, 0xae,0x14, 0x54, 0xfc, 0x05, 0xdd, 0x57, 0x05, 0x4a, 0xba, 0xd7, 0xc4, 0x16, 0xb7, 0x80, 0x03, 0x27,0xf7, 0xf2, 0x70, 0x72, 0xe5, 0x32, 0x0f, 0xd1, 0x3b, 0xa6, 0x34, 0x5b, 0x31, 0xff, 0x4b, 0x70,0x03, 0x6b, 0x43, 0x91, 0x2c, 0x9f, 0x3f, 0xd2, 0xf8, 0x24, 0xf6, 0x7d, 0xb3, 0x4e, 0x7f, 0x08,0x0f, 0xa0, 0x3e, 0xf3, 0xce, 0x66, 0xbd, 0x12, 0x49, 0x6d, 0xcb, 0xa1, 0x4c, 0x37, 0xbf, 0xf3,0xb3, 0xbc, 0x8e, 0xac, 0x6b, 0xb9, 0xd9, 0xe6, 0x25, 0xbc, 0xdf, 0x93, 0x6f, 0x9e, 0x7e, 0x07,0x00, 0x00, 0xff, 0xff, 0x0c, 0x9f, 0x10, 0xa8, 0x2e, 0x01, 0x00, 0x00,}
瀵逛簬meta淇℃伅鐨勬彁鍙栬繕鏄緢鏂逛究鐨?/p>
鐒惰?/p>
瀵逛簬澶氫釜鏂囦歡鐨勭敓鎴? 榪欐牱鍋氶潪甯哥殑楹葷儲, 鍥犱負(fù)榪欎釜瀛楁浼?xì)閲嶅瀵艰嚧缂栬瘧閿欒?/p>
寰堝浜哄湪璁哄潧閲屽悙妲? 瀹樻柟緇欏嚭鐨勮В鍐蟲柟娉曟槸, 浣跨敤protoc涓嬈℃т紶鍏ヤ竴涓猵ackage涓嬬殑鎵鏈夌殑proto鐩存帴鐢熸垚涓涓猤o
鑰屼笉鏄幇鍦ㄧ殑涓涓猵roto涓涓猤o
浠ュ墠榪欎釜浠g爜闇瑕佽嚜宸辨潵鍋? 鐜板湪瀹樻柟鎻愪緵浜嗘敮鎸? 寰堟槸鏂逛究
鐒惰? 涓轟粈涔堜笉鏀寔閬嶅巻鈥?孌嬪康鍟? 鍙堣鑷繁鍔ㄦ墜浜?/p>
棣栧厛鎴戜滑鏉ョ湅涓?/p>
鍋囪A瑕佹妸鍐呭浼犺緭緇橞
1. B鐢熸垚RSA鐨勫叕閽ュ拰瀵嗛挜, 榪欐槸鎴愬鍑虹幇鐨? 瀵嗛挜鐢盉淇濆瓨, 鎶婂叕閽ュ憡璇堿
2. A鐢˙鐨勫叕閽ュ姞瀵嗗唴瀹? 騫舵妸瀵嗘枃鍐呭浼犺緭緇橞
3. B鐢ㄥ瘑閽ヨВ瀵?/p>
璇佹槑鏌愪釜鍐呭鏄綘鍙戠殑, 鑰屼笉鏄鍒漢鍐掑悕欏舵浛, 渚嬪git鐨刾ush涓氨甯︽湁榪欎釜鍔熻兘
鍋囪A鏈夊唴瀹? B瑕侀獙璇佸唴瀹圭‘瀹炵敱A鍙戝嚭
1. A鐢熸垚鍏挜鍜屽瘑閽?/p>
2. A灝嗗唴瀹瑰仛涓涓猦ash, 鎶奾ash鐮佺敤鑷繁鐨勫瘑閽ュ姞瀵嗗茍鎶婅繖孌靛瘑鏂囧彂緇橞
3. B鐢ˋ鐨勫叕閽ュ瀵嗘枃榪涜楠岃瘉, 鍗沖彲紜瀵嗘枃鏄惁鐢盇鍙戝嚭
鍙互鐪嬪嚭, 涓ょ鐢ㄦ硶閮芥槸鍏稿瀷鐨勯潪瀵圭О鐢ㄦ硶
浣哖P鍔╂墜鍗村共浜嗕歡紲炲鐨勪簨鎯?
鍦≒P SDK瀹樻柟鏂囨。閲? 鎴戜滑鎵懼埌浜哖HP璇█鐨勯獙璇佹柟娉? 鏂規(guī)硶閲屼嬌鐢ㄤ簡榪欐牱涓涓狝PI
浠庡畼鏂規(guī)枃妗g湅寰楀嚭榪欎釜浣跨敤openssl鐨勭畻娉曞簱
綾諱技鐨? 榪樻湁Java, C++, Python璇█鐨勫鐞嗘柟娉?/p>
鍏朵腑, C++涔熸槸鐢ㄧ殑openssl, Python鍒欐槸闇瑕侀緙栬瘧C搴擄紝鍦║buntu涓嬮渶瑕佹墜宸atch M2Crypto鐨刜ssl.c鏂囦歡.
鍏堜笉璇磋繖浜涢潪姝h鐨勭紪璇?patch鏂規(guī)硶浼?xì)閫犳垚澶氬ぇ鐨勯棶棰? 鍗曞氨榪欎釜鐢ㄥ叕閽ヨВ瀵嗗氨寰堣泲鐤?/p>
浠庝箣鍓嶇殑RSA綆楁硶涓簡瑙? 鍙湁瀵瑰叕閽ヨ繘琛岄獙璇佺殑鏂規(guī)硶, 涔熷氨鏄彧鑳藉緱鍒版槸榪樻槸涓嶆槸鐨勭粨鏋? 浣哖P鐨凷DK鍒欒姹傚繀欏葷敤鍏挜瑙e瘑鈥?/p>
瑙e嚭鐨勬暟鎹負(fù)涓孌礿son, 浠ュ姣旀槸鍚︽湁璁㈠崟綃℃敼.
閭d箞榪欑鍋氭硶灝辯瓑鏁堜簬, 鐢ㄦ渶綆鍗曠殑寮傛垨+涓涓叕閽ヨ繘琛岃鍗曞姞瀵? 鐒跺悗鍚屾牱鐢ㄨ繖涓叕閽ヨ繘琛岃В瀵?/p>
鍙笉榪囩敤RSA鎰熻寰堥珮綰р?/p>
榪欑鍋氭硶涓鏃﹀叕閽ュ湪PP鍔╂墜鏈嶅姟鍣ㄦ垨鑰呯帺瀹剁殑寮鍙戞湇鍔″櫒, 鐢氳嚦婧愪唬鐮佹硠闇? 閭d箞椹笂灝辨湁寰堝ぇ鐨勪吉閫犺鍗曠殑鍗遍櫓
鎴戞妸榪欎釜鍋氭硶鍙戠粰鏈嬪弸鐪? 浠栦滑璇? 鍏跺疄PP鍔╂墜鐨勫紑鍙戣呭彧綆$敤浜哛SA, 璺熶紶杈撲笉鏄槑鏂囧氨濂戒簡, 鑷充簬浠涔堜俊鎭畨鍏? 閮芥槸灞?
姣忔Unity3D緙栬緫鍣ㄦ墦寮鏃? 榪炴帴鏈嶅姟鍣ㄩ兘浼?xì)鏈変竴瀹氬嚑鐜囧け璐? 闇瑕佸弽澶嶅叧闂啀鎵撳紑緙栬緫鍣?~4嬈″悗, 鎵嶈兘姝e父鎺ユ敹鍒板皝鍖?/strong>
杞澆璇鋒敞鏄? 鎴橀瓊灝忕瓚http://m.shnenglu.com/sunicdavy
鎴戜滑鐨勭綉緇滃簱鍩轟簬C#鐨凚egin/End緋葷殑寮傛Socket, 榪欑socket鏇存帴榪慍++鐨刟sio妯″瀷, 鎾歌搗鏉ョ壒鐖?
1. 鏍規(guī)嵁緇忛獙, 榪欎釜璇″紓闂澶氬崐璺熷綰跨▼鏈夊叧緋? 澶嶆煡浠g爜, 鏃犳晥.
2. 鎵懼弸浜烘洿鎹㈢綉緇滃簱, 鎹㈤樆濉濻ocket瀹炵幇鍜孲ocketAsyncEventArgs榪欑瀹炵幇閮借瘯榪? 浠嶇劧鏃犳硶瑙e喅闂.
3. 鎺ヤ笅鏉ヨ繕鏄Begin/End緋葷殑緗戠粶搴撹繘琛屾棩蹇楄拷韙? 鍙戠幇, 鍙戦佷細(xì)鎬繪槸鎴愬姛, 榪炴帴鎴愬姛鍜屾帴鏀跺皝鍖呮湁涓瀹氬嚑鐜囦細(xì)鏂帀
鎴戜滑騫舵病鏈夊崟鐙紑綰跨▼鏉ュ鐞? 鑰屾槸鍒╃敤搴曞眰寮傛閫氱煡, 鐒跺悗鏈夌嚎紼嬪畨鍏ㄩ槦鍒楀垏鎹㈠埌涓葷嚎紼嬭繘琛屾姇閫? 鍥犳搴曞眰鐨勭嚎紼嬫甯告ф槸鏁翠釜闂鐨勭劍鐐?/p>
鐢變簬涓鐩存棤娉曟壘鍒板師鍥? 榪欎釜闂鎼佺疆浜?/p>
杞澆璇鋒敞鏄? 鎴橀瓊灝忕瓚http://m.shnenglu.com/sunicdavy
鐩村埌鏈変竴涓伓鐒剁殑鏈轟細(xì), 鍙栬繃鍚屼簨浠g爜鍚? 紿佺劧鍙戠幇絎竴嬈℃墦寮Unity3D緙栬緫鍣ㄥ彲浠ョ洿鎺ョ櫥褰? 浣嗕箣鍚庡張涓嶈. 鍚屼簨鎻愰啋, 浼?xì)涓嶄細(xì)鏄紭鍏堝害闂?
椹笂鎵撳紑Edit->Project Settings->Script Execution Orders. 鎻愰珮浜嗙綉緇滅粍寤轟紭鍏堝害
嫻嬭瘯, 閫氳繃, 闂瑙e喅
杞澆璇鋒敞鏄? 鎴橀瓊灝忕瓚http://m.shnenglu.com/sunicdavy
杞澆璇鋒敞鏄? 鎴橀瓊灝忕瓚http://m.shnenglu.com/sunicdavy
涓鐩存鐤戣繖涓棶棰樿窡Mono鐗堟湰榪囪佹湁鍏崇郴, 浣嗙敱浜?.2鐗堟湰鍒板勾搴曟墠鏇存柊, 涔嬪墠鍙兘鑷繁鍟僢ug.
鍦ㄨ繖涓棶棰樺彂鐢熷悗瑙e喅鍓? 鎴戜滑榪樻湁涓涓浉鍏寵闂? 鎴戜滑灝嗙綉緇滈儴鍒嗘瘮杈冪ǔ瀹氱殑浠g爜鎷嗗垎鏀懼埌dll涓? 閫氳繃Unity3D鐨勬満鍒惰繘琛屽姞杞?/p>
緇撴灉, 緗戠粶鏃犳硶鍒濆鍖? 浼拌涔熸槸璺熻繖涓棶棰樻湁鍏崇郴
鎬諱箣, 鏈夌被浼奸棶棰樻椂, 鍙互璇曠敤鑴氭湰鎵ц欏哄簭澶ф硶榪涜灝濊瘯
鎴戜滑鐨勯」鐩竴鐩翠嬌鐢∕ySQL浣滀負(fù)鏁版嵁搴? 鏃犺鏄粠C++鐨勬湇鍔″櫒, 榪樻槸鍒癎olang鏈嶅姟鍣? 褰撳勾鎼炴湇鍔″櫒鏃? 鐪嬪ぇ閮ㄥ垎浜洪兘鏄敤SQL(MySQL/SQLServer), 鑰孧ongo鎰熻鍍忛偑鏁欎竴鏍? 鍐嶅姞涓婃湇鍔″櫒榪樻槸Linux姣旇緝姝g粺, 鎵浠ユ灉鏂変簡MySQL.
鍒氬紑濮嬫劅瑙?娓告垙鏈嶅姟鍣ㄧ殑鏁版嵁瀛樺偍鍏跺疄搴旇鏄洰紲炲湥鐨勮繃紼? 閭d箞澶氱殑鏁版嵁, 闇瑕佹寜鐓ySQL涓鏍峰垎琛? 鍒嗗瓧孌靛瓨鍌? 涓轟簡鏌ヨ, 榪樿涔栦箹鐨勫涓涓婼QL鐨勮娉?/p>
灝辮繖涔堟姌鑵句簡鍑犲勾. 鍦ㄤ簯DB鐨勮挋钄戒笅, 涓鐩磋涓篗ySQL灝辨槸鍋氭父鎴忔湇鍔″櫒瀛樺偍鐨勪笓涓氭妧鏈? 鍒嗗竷寮忓拰瀛樺偍鍘嬪姏涓瀹氫氦緇欎簯DB鏉ュ仛. 鐩村埌鐪熸璇曚簡涓婲oSQL鍦ㄦ父鎴忔湇鍔″櫒寮鍙戦噷鐨勬濊礬.
鐢ㄤ簡Golang, 鎵嶅彂鐜板悓姝ュ啓閫昏緫鏄涔堢殑浼橀泤.
鐢ㄤ簡NoSQL緋誨垪鐨勬暟鎹簱, 鎵嶆剰璇嗗埌: 娓告垙鏈嶅姟鍣ㄧ殑鏁版嵁瀛樺偍鍜屾父鎴忔湇鍔″櫒鐨勫瓨鐩樹袱涓蹇靛樊寮傚叾瀹炶洰澶х殑.
MySQL涓? 鑳屽寘鍏跺疄璺熻鑹插畬鍏ㄦ病鏈夊叧緋? 鍙槸閫氳繃1涓鑹瞚d鏄犲皠榪囧幓, 浜轟負(fù)鐨勫壊瑁備簡鏁版嵁鐨勫叧鑱旀? 榪樼‖鐢熺敓鐨勬暣鍑轟釜姒傚康鍙粨鏋勫寲鏌ヨ璁╀綘瀛?/p>
NoSQL涓? 鍙槸鎶婃暟鎹簱褰撴垚鏄瓨鍌ㄧ偣, 姣忎釜瑙掕壊鐨勬暟鎹槸瀹屾暣鐨勪竴鍧? 閲岄潰鎬庝箞瀛橀殢浣犱究. 姣忎釜瑙掕壊閫氳繃id鏉ユ煡璇? 鍏朵粬閮芥病鏈変簡
浜庢槸涔? 娓告垙寮鍙戝彉寰楀紓甯哥畝鍗? MySQL瑙掕壊榪涢棬鏌ヨ4~5嬈℃墠鑳芥悶瀹氳鐨勬暟鎹?鑰孨oSQL涓鍙f皵鍏ㄦ煡鍑烘潵, 瀛樼洏涔熸棤闇澧為噺, 鐩存帴瀛樼洏灝卞彲浠ヤ簡
鎵浠ョ幇鍦ㄨ寰? NoSQL鐨勬濊礬瀵逛簬娓告垙鏈嶅姟鍣ㄥ瓨鍌ㄦ潵璇寸畝鐩存槸瀹岀編鐨?
杞澆璇鋒敞鏄? 鎴橀瓊灝忕瓚http://m.shnenglu.com/sunicdavy
NoSQL涓嬪疄鐜版柟妗堝緢澶? 娓告垙甯哥敤鐨勫氨榪欎箞3瀹? mongo, redis, memcached
涓嬮潰璇翠笅浼樼己鐐?/p>
紓佺洏鏄犲皠鍐呭瓨鏁版嵁搴?/p>
value涓篸ocument綾誨瀷, 鍩轟簬BSON鐨剉alue搴忓垪鍖?/p>
搴旂敤鍦烘櫙:
閫傚悎澶氬啓灝戣, 渚嬪鏃ュ織鍜屽浠?/p>
杞澆璇鋒敞鏄? 鎴橀瓊灝忕瓚http://m.shnenglu.com/sunicdavy
鍐呭瓨鏁版嵁搴?/p>
鍗曟牳
value闄愬埗512M
澶氱value綾誨瀷, 娓告垙鐢ㄩ斾嬌鐢ㄧ鏈夌殑搴忓垪鍖栧崗璁?渚嬪protobuf)
鏀寔钀藉湴(bgsave)
鐢ㄦ埛: 鏂版氮, 娣樺疂, Flickr, Github
搴旂敤鍦烘櫙: 閫傚悎璇誨啓閮藉緢楂? 鏁版嵁澶勭悊澶嶆潅絳?/p>
杞澆璇鋒敞鏄? 鎴橀瓊灝忕瓚http://m.shnenglu.com/sunicdavy
鍐呭瓨鏁版嵁搴?/p>
澶氭牳
value闄愬埗1M
涓嶆敮鎸佽惤鍦?鎸佷箙鍖?
鐢ㄦ埛: LiveJournal銆乭atena銆丗acebook銆乂ox
搴旂敤鍦烘櫙: 鍔ㄦ佺郴緇熶腑鐨勭紦鍐? 閫傚悎澶氳灝戝啓
杞澆璇鋒敞鏄? 鎴橀瓊灝忕瓚http://m.shnenglu.com/sunicdavy
memcached 閫傚悎緗戦〉緙撳啿, 娓告垙閲屽緢灝戞湁浣跨敤. 鐩墠鍙湁鑵捐浜戞敮鎸佷簯memcached
redis闈炲父閫傚悎娓告垙鐨勫唴瀛樻暟鎹簱, 浣嗘槸钀藉湴絳栫暐浼?xì)姣旇緝澶嶆? 闇瑕佸叿浣撳垎鏋? 鍙互鍙傝冨悗闈㈢殑閾炬帴鐪嬩笅浜戦鎬庝箞澶勭悊榪欎釜闂
mongo鏁版嵁搴撳湪鏃╂湡榪樻槸闈炲父涓嶉敊鐨凬oSQL鐨勬暟鎹簱. 宸ュ叿姣旇緝鏂逛究, 鍙鍖? 浣嗘槸闅忕潃榪戝勾鏉ユ父鎴忕殑騫跺彂搴﹁秺鏉ヨ秺楂? 鎵浠ヤ負(fù)浜嗕竴嬈″埌浣? 寰堝浜鴻繕鏄夋嫨浜唕edis
涓嬪浘鍙傝冭嚜鐭ヤ箮闂. 閾炬帴鍦ㄥ悗闈㈡湁鎻愮ず, 鑻ヤ鏡鏉冭鑱旂郴鍒犻櫎
杞澆璇鋒敞鏄? 鎴橀瓊灝忕瓚http://m.shnenglu.com/sunicdavy
http://blog.codingnow.com/2014/03/mmzb_redis.html
杞澆璇鋒敞鏄? 鎴橀瓊灝忕瓚http://m.shnenglu.com/sunicdavy
Memcache,Redis,MongoDB錛堟暟鎹紦瀛樼郴緇燂級鏂規(guī)瀵規(guī)瘮涓庡垎鏋?/p>
http://blog.csdn.net/suifeng3051/article/details/23739295
http://www.zhihu.com/question/31417262
鍩轟簬C/C++娓告垙鏈嶅姟鍣ㄦ鏋舵諱綋璁捐鐨勮繕鏄笉閿欑殑, 鍏勫紵浠諱綋浣跨敤鏁堟灉閮芥槸濂借瘎. 鍥犱負(fù)鍦ㄦ妧鏈笂鍠滄"鍋鋒噿", 鎵浠ュ湪寰堝璁捐涓? 閮芥槸鍔涙眰綆鍗? 楂樻晥(寮鍙戞晥鐜?.
鍩轟簬浠誨姟鐨勫紓姝B鏌ヨ緋葷粺, 甯﹀閲嶅紓姝ョ殑鍚屾
浠g爜紺轟緥:
1: 2: void BatchQueryPlayerInfo( uint32 ClientID, const std::string& AccountName, int64 CharID )
3: { 4: GDBExecutor->Commit 5: ( 6: dynamic_cast<DBDataTask*>( (new DBQueryCharInfo( ClientID, CharID ) )
7: ->LinkAtomTask( new DBQueryQuest( ClientID, CharID ) )
8: ->LinkAtomTask( new DBQuerySkill( ClientID, CharID ) )
9: ->LinkAtomTask( new DBQueryHero( ClientID, CharID ) )
10: ->LinkAtomTask( new DBQueryAccountInfo( ClientID, AccountName ) )
11: ->LinkAtomTask( new DBQueryEquip( ClientID, CharID ) )
12: ->LinkAtomTask( new DBQueryObject( ClientID ,CharID ) )
13: ->LinkAtomTask( new DBQueryLevel(ClientID, CharID))
14: ->LinkAtomTask( new DBQueryChapter(ClientID, CharID))
15: ->LinkAtomTask( new DBQueryActivity( ClientID, CharID ))
16: ) 17: ); 18: 19: }榪欐涓昏澶勭悊鐜╁鍦ㄧ櫥闄嗘椂, 闇瑕佷粠DB鏌ヨ澶ч噺鐨勪笉鍚屽垎綾葷殑鏁版嵁. 涓轟簡淇濊瘉鏁堢巼, 鎴戣姣忎釜Task騫惰鎵ц, 鐒跺悗閫氳繃涓涓満鍒? 璁╂墍鏈変換鍔″畬鎴愬悗, 鍥炶皟絎竴涓換鍔$殑涓涓嚱鏁? 榪欐牱灝辨棤闇鎵嬪姩瀹炵幇寰堝綺樺悎浠g爜, 閬垮厤浜嗗弽澶嶈皟璇曞拰閿欒
鍩轟簬protobuf鍙嶅皠鏈哄埗鐨勮鍙ヨ嚜鍔ㄥ悎鎴?/strong>
1: DBUpdateCharInfo::DBUpdateCharInfo( int64 CharID, const std::string& Buffer )
2: {3: char buffer[256];
4: 5: sprintf( buffer, "update tb_char set $FIELD$ where charid = %lld;", CharID );
6: 7: ExecuteCommand( buffer, Buffer, dbopr::FET_Equation ); 8: }榪欐灝辨槸涓涓吀鍨嬬殑DB浠誨姟, 鏋勯犲嚱鏁版彁渚涗簡CharID鍜屼竴涓敱緇撴瀯浣撳簭鍒楀寲濂界殑buffer, $FIELD$瀛楁, 鏄氳繃鍙嶅皠鏍規(guī)嵁Buffer鍐呭, 鑷姩濉厖瀛楁
榪欐渚嬪瓙涓? $FIELD$鍙互濉厖涓?hp=100, mp=100涔嬬被鐨? 鑷姩濉厖閬垮厤浜嗗洜涓烘坊鍔犲瓧孌電殑鍒板娣誨姞浠g爜, 榪橀渶瑕佽皟璇? 瀹規(guī)槗鎼為敊
閰嶇疆緋葷粺姒傚康
鍩轟簬鍚屼竴涓厤緗郴緇? 鍒嗗眰瀹炵幇涓嶅悓鐨勯渶姹? 鏇寸畝鍗曠殑璇? 瑙e喅鐨?涓疄闄呴棶棰樻槸:
鑷繁鏀逛簡閰嶇疆鏂囦歡涓殑ip, 涓婁紶svn鍚? 瑕嗙洊浜嗗埆浜虹殑閰嶇疆, 寰堝浜虹殑瑙e喅鏂規(guī)硶閮芥槸, 鏈湴閰嶇疆涓嶆彁浜? 浣嗗悓鏃墮棶棰樺張鏉ヤ簡:
褰撻厤緗腑鏈夊埆浜烘柊鍔犵殑緋葷粺閰嶇疆, 鎬庝箞淇濊瘉姣忎釜浜洪兘鑳芥洿鏂板埌?
涓婄嚎鍚? 鏈嶅姟鍣ㄤ氦浠樿繍緇? 浠栦滑浼?xì)瀵归厤缃湁涓瀹氱▼搴︾殑淇敼, 榪欎釜鏃跺欐庝箞鍚堝茍紼嬪簭閰嶇疆鍜岃繍緇撮厤緗?
鍏跺疄瀵逛簬鍐茬獊鐨勯渶姹? 鍙瀵圭郴緇熻繘琛屽垎灞傚氨鍙互瑙e喅闂,鎴戠殑澶勭悊鏂瑰紡:
閰嶇疆鍒嗕負(fù):
鍏ㄥ眬閰嶇疆: 鎵鏈夋湇鍔$殑鎬諱綋閰嶇疆
鍗曟湇鍔¢厤緗? 鏈湇鍔$殑閰嶇疆, 娑夊強緗戠粶鍙婇昏緫
鏈湴閰嶇疆: 榪欎釜閰嶇疆姣忎釜浜轟竴浠? 涓嶄笂浼燬VN
鍛戒護(hù)琛岄厤緗? 鏍煎紡鍜屽墠闈㈢殑涓鑷? 榪欏潡灝卞彲浠ラ氳繃榪愮淮榪涜閰嶇疆
鎬諱綋緇撴瀯鍏跺疄灝辨槸OO鐨勬淳鐢熸蹇? 涓嬪眰鍙互瑕嗙洊, 淇敼涓婂眰鐨勯厤緗?/p>
鏈嶅姟鍣ㄤ簰鑱斿強璇嗗埆妗嗘灦
鍩烘湰鍔熻兘: 鍩轟簬涓浜涚畝鍗曠殑閰嶇疆灝卞彲浠ュ皢澶氬彴鏈嶅姟鍣? 鍚岀綾葷殑涓嶅悓鏈嶅姟鍣ㄤ簰鐩歌繛鎺ヨ搗鏉? 鏂嚎鑷姩閲嶈繛.
鏈嶅姟鍣ㄨ繛鎺ュ悗, 鎵鏈夋湇鍔″櫒鍙煡鏅撳茍鍙嚜鍔ㄦ寜闇榪炴帴
閫昏緫绔篃寰堟柟渚跨殑榪涜騫挎挱鎴栬呭崟鐙彂閫佺瓑
涔熷氨鏄, 姣忎釜鏈嶅姟鍣ㄧ殑榪炴帴鍜屾帴鍙楃閮芥槸甯﹁瘑鍒悕縐版垨id鐨?
鍚庨潰瑙夊緱榪欏涓滆タ瀹炲湪鏄仛鐨勫鏉? 澶氭暣鍑轟竴鍙頒腑蹇冩湇鍔″櫒鏉ュ仛. 浣嗗ソ姝規(guī)鏋剁ǔ瀹氫笅鏉ヤ簡, 涔熷氨濂戒簡.
鍩轟簬lua鐨勬湇鍔″櫒web鍚庡彴妗嗘灦
鎬濇兂鏄緢涓嶉敊鐨? C++ 閰嶅悎lua鏈韓緇濆鏄釜澶辮觸
闂鍑哄湪web澶勭悊,鏈韓閮芥槸涓涓悓姝ラ樆濉炶繃紼? 鑰岃繖涓悗鍙版鏋舵槸寮傛鏂瑰紡鏉ュ仛, 鎵浠ョ壒鍒埆鎵?/p>
涓嶈繃姣旇搗浠ュ墠鐨勬湰鍦癎M緋葷粺, 榪欏潡鐨勮璁℃槸浼熷ぇ鐨勮繘姝?/p>
鐜板湪姝e湪璁捐鍩轟簬golang鐨勬湇鍔″櫒妗嗘灦, 鍩烘湰妗嗘灦宸茬粡瀹屽伐, 絳夊緟緙栧啓閫昏緫鍚庣殑瀹炴垬?gòu)箣璇?/p>
浠ヤ笂鐨勫緢澶氭濇兂鍦╣olang鐨勬湇鍔″櫒妗嗘灦閮芥湁鏀硅繘, 鐗瑰埆鏄痝olang鏈韓鍋歸eb涔熸槸浼樼鐨? 澶栧姞martini榪欑鐗沊妗嗘灦, 鏇存槸姘村埌娓犳垚
濡傛灉浣犲鏈嶅姟鍣ㄦ鏋惰璁℃湁鐗瑰埆鐨勮璇? 鎴栬呮兂紕版挒鎬濇兂, 鍙互鍔犲崥瀹㈢兢 309800774鎴栬呮垜鐨剄q: 20998333璁ㄨ
TexturePacker鐨勮嚜瀹氫箟鎻掍歡鐩綍浣嶄簬鍏跺畨瑁呯洰褰曠殑bin\exporters\涓? 浣嗘湁涓浜涙彃浠跺睘浜庡唴寤烘敮鎸? 渚嬪cocos2dx鐨刾list鏍煎紡, 鍥犳鏃犳硶鎵懼埌瀵瑰簲鎻掍歡
鏈漢鍙傝僺hiva3d鎻掍歡, 瀵瑰簲瀵煎嚭鐣岄潰鐨凞ataFormat涓殑Shiva3D, 蹇熷浼?xì)浜嗗浣曞鍑?/p>
瀹樻柟鏂囨。浣嶄簬http://www.codeandweb.com/texturepacker/documentation/#customization
鎻掍歡鐨勫熀鏈牸寮忓強鍘熺悊鏄?
bin\exporters\涓嬬殑鏌愪竴鐩綍涓嬪瓨鍦ㄧ殑涓涓悕涓篹xporter.xml鏂囦歡浣滀負(fù)鎻掍歡鐨勬弿榪?渚嬪:
<exporter version="1.0">
<!-- identifier of the exporter --><name>shiva3d</name>
<!-- display name of the exporter for the combo box --><displayName>Shiva3D</displayName>
<!-- description of the exporter --><description>Exporter for Shiva3D.</description>
<!-- exporter version --><version>1.0</version>
<!-- currently only one file allowed - more to come with update --><files>
<file>
<!-- name of this file variable --><name>xml</name>
<!-- human readable name (for GUI) --><displayName>XML</displayName>
<!-- file extension for the file --><fileExtension>xml</fileExtension>
<!-- name of the template file --><template>shiva.xml</template>
</file>
</files>
<!-- target framework supports trimming --><supportsTrimming>false</supportsTrimming>
<!-- target framework supports rotated sprites --><supportsRotation>true</supportsRotation>
<!-- rotated sprites direction (cw/ccw) --><rotationDirection>cw</rotationDirection>
<!-- supports npot sizes --><supportsNPOT>true</supportsNPOT>
<!-- supports file name stripping (remove .png etc) --><supportsTrimSpriteNames>yes</supportsTrimSpriteNames>
<!-- supports texure subpath --><supportsTextureSubPath>yes</supportsTextureSubPath>
</exporter>
鍦═emplate瀛楁涓? 鎻忚堪鍚岀洰褰曠殑瀵煎嚭鏂囦歡鏍煎紡妯℃澘. TexturePacker浣跨敤涓縐嶅彨Grantlee鐨勬ā鏉垮紩鎿?綾諱技浜嶱ython浣跨敤鐨凞jango妯℃澘寮曟搸, 鏂囨。鍙傝:Grantlee Documentation. 綆鍗曠殑鏂囨湰鏍煎紡鍙互鍙傝僺hiva.xml蹇熷浼?/p>
榪欓噷鎴戜滑浣跨敤protobuf鐨勬枃鏈牸寮?鏋佷負(fù)綾諱技json)瀵煎嚭plist, 涓嬮潰鏄鍑烘ā鏉?/p>
{% for sprite in allSprites %}Sprite { Name: "{{sprite.trimmedName}}" FrameX: {{sprite.frameRect.x}} FrameY: {{sprite.frameRect.y}} FrameWidth: {{sprite.frameRectWithoutRotation.width}} FrameHeight: {{sprite.frameRectWithoutRotation.height}} OffsetX: {{sprite.cornerOffset.x}} OffsetY: {{sprite.cornerOffset.y}} OriginalWidth: {{sprite.untrimmedSize.width}} OriginalHeight: {{sprite.untrimmedSize.height}} {% if sprite.rotated %}Rotated: true {% endif %}}
{% endfor %}瀵煎嚭鐨勭粨鏋滅被浼間簬:
Sprite { Name: "car01"FrameX: 100
FrameY: 129
FrameWidth: 76
FrameHeight: 47
OffsetX: 0
OffsetY: 0
OriginalWidth: 76
OriginalHeight: 47
Rotated: true }
Sprite { Name: "car02"FrameX: 100
FrameY: 51
FrameWidth: 76
FrameHeight: 47
OffsetX: 0
OffsetY: 0
OriginalWidth: 76
OriginalHeight: 47
Rotated: true }
...
瀵煎嚭鎻掍歡榪樻敮鎸乯s鎵╁睍, 鍏蜂綋鍐呭璇風(fēng)戶緇弬鑰冨畼鏂規(guī)枃妗? 浣嗗浜庣畝鍗曠殑鏂囨湰鏍煎紡, 榪欑鏂瑰紡宸茬粡瓚沖浜?/p>
瀵規(guī)瘮plist鍚? 鍙戠幇plist涓殑鍨冨溇淇℃伅鏋佷負(fù)澶? 鑰屼笖浣滀負(fù)spriteframe鐨刵ame灞呯劧甯︽湁鎵╁睍鍚?.. 鍥犳鑴辯plist,緙栧啓鑷繁鐨勫鍑烘彃浠舵墠鏄帇閬?
鎴戜滑鐨勯」鐩殑瀹㈡埛绔拰鏈嶅姟鍣ㄥ潎鐢盋++寮鍙戯紝鐢變簬HG璁捐鐨勭悊蹇墊槸1涓伐紼嬪搴?涓簱錛?鍥犳鎴戜滑鐨勫鎴風(fēng)鍜屾湇鍔″櫒鏄垎寮鐨勪袱涓狧G浠g爜搴撱傝繖縐嶆濇兂鍜孲VN綆$悊鐨勪唬鐮佹湁寰堝ぇ涓嶅悓銆係VN鏃朵唬鐨勬父鎴忓伐紼嬪ぇ澶氭槸榪欐牱瀹夋帓鐩綍鐨勶細(xì)
common <-瀹㈡埛绔拰鏈嶅姟鍣ㄥ叡浜殑搴?/p>
client<-瀹㈡埛绔殑浠g爜
server<-鏈嶅姟鍣ㄧ殑浠g爜
閫氳繃SVN寮哄ぇ鐨勬潈闄愭帶鍒剁粰涓嶅悓鐨勫墠鍚庣璧嬩簣鏉冮檺錛屽墠鍚庣紼嬪簭灝嗚幏寰椾笉鍚岀殑鐩綍緇勫悎銆係VN涓嬬殑榪欑宸ョ▼緇勭粐鏂規(guī)硶鑳藉緢濂界殑瑙e喅鍗曚竴璇█璺ㄥ伐紼嬬殑浠g爜錛屽崗璁叡浜棶棰樸傝櫧鐒剁幇鍦ㄥ悇縐岴rlang錛孞ava鐨勬湇鍔″櫒璇█涓巃s3,lua鐨勪笉鍚屽鎴風(fēng)鑴氭湰璇█娣鋒潅鐨勬椂浠e凡緇忔棤鎵璋撹繖縐嶈佸紡璁捐鎬濇兂銆備絾鏄浜庢垜浠函C++鐨勬墜娓告潵璇達(dá)紝榪樻槸蹇呴』闈㈠鍒嗗竷寮忎唬鐮佺鐞嗗伐鍏蜂笅鐨勪唬鐮佽法搴撳叡浜棶棰樸?/p>
鎴戝氨榪欎釜闂涓庡騫村墠琚垜鎺ㄨ崘榪嘓G鐨勬湅鍙嬭璁鴻搗鏉ワ紝浠栦滑涔熷瓨鍦ㄦ垜浠繖涓棶棰橈紝浣嗘槸浠栦滑鐨勮В鍐蟲柟娉曞氨鏄瘡涓伐紼嬩竴涓簱銆傜劧鍚庤鎴戦棶鍒幫細(xì)鈥滃悓姝ヤ竴嬈′唬鐮侊紝涓嬈℃鐨勬墦寮涓嶅悓鐨勫簱錛堜粬浠鎴風(fēng)+鏈嶅姟鍣ㄤ竴鍏?鍒?涓狧G浠g爜搴擄級錛岃繘琛屽悓姝ワ紝 瀹屾垚鍚庯紝 榪樿鍙嶅悜pull錛屼笉绱晩錛熲濓紝 鏈嬪弸鍥炵瓟錛氣滀範(fàn)鎯氨濂解?/p>
闅忓悗錛屾垜涔熺炕鏌ヤ簡git瀵瑰欏圭洰鐨勬敮鎸併傚緱鍒扮殑絳旀涔熸槸璺烪G涓鏍風(fēng)殑錛?榪欑被鍒嗗竷寮忎唬鐮佺鐞嗗伐鍏鋒湰韜殑璁捐鐞嗗康鍙湁璐﹀彿錛岃屾棤鏉冮檺錛?鏈韓灝辨槸鍩轟簬寮婧愪唬鐮佺簿紲炶璁$殑宸ュ叿錛?濡傛灉鍒嗕簡鏉冮檺錛屽矀涓嶆槸榪濊儗寮婧愮簿紲烇紙榪欐槸鎴戞兂鐨?img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="寰瑧" src="http://m.shnenglu.com/images/cppblog_com/sunicdavy/Windows-Live-Writer/09a081eb5d4c_13A7F/wlEmoticon-smile_2.png">錛夈傚洜姝ゅ鏋滄兂綆$悊澶氫釜欏圭洰浠g爜錛?瑕佷箞澶氬簱錛岃涔堝悎搴撱?/p>
鏂囨湰鏍煎紡鐨勮В鏋愰敊璇笉鑳戒嬌鐢ㄦ崟鑾烽敊璇潵鑾峰彇, 鍥犳,鎴戜滑闇瑕佷嬌鐢ㄨ嚜瀹氫箟鐨勯敊璇敹闆嗗櫒榪涜鏀墮泦, 鐪嬩唬鐮?
#include <google/protobuf/text_format.h>
#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
#include <google/protobuf/io/tokenizer.h>
class PBTextErrorCollector : public google::protobuf::io::ErrorCollector
{public:PBTextErrorCollector( const std::string& FileName )
: mFileName( FileName )
{}
virtual void AddError(int line, int column, const string& message)
{ CCLog("%s(%d:%d) %s ", mFileName.c_str(), line, column, message.c_str() );}
virtual void AddWarning(int line, int column, const string& message)
{ CCLog("%s(%d:%d) %s ", mFileName.c_str(), line, column, message.c_str() );}
private: std::string mFileName;};
瑙f瀽浠g爜
google::protobuf::TextFormat::Parser P;
P.RecordErrorsTo( &PEC );
P.Parse( &AIS, &AF );
鍙﹀: 鏂囨湰鏍煎紡鐨勬敞閲婁嬌鐢╱nix shell椋庢牸: 浠?寮澶?/p>
涓嬮潰鏄垜鐨勬枃鏈牸寮忕殑閰嶇疆鏂囦歡
AnchorPointX: 0.5 AnchorPointY: 0 SpriteScale: 2 ComponentName: "ActorActionManager" ComponentName: "ActorFrameEventDispatcher" #ComponentName: "SoundFXController" ComponentName: "RoleDeltaMoveController" ComponentName: "RoleBehaviorDirector" InitAction: AA_Idle Animations { AnimationName: "mai_idle" AnimationInterval: 0.067 }
鎬佸害綃?br>1. 鍋氬疄浜?br>涓嶈鎶辨紝鍙戠墷楠氾紝鎸囪矗浠栦漢錛屾壘鍑洪棶棰樻墍鍦紝鎯沖姙娉曡В鍐熾傚闂鍜岄敊璇紝瑕佸媷浜庢壙鎷呫?br>2. 嬈查熷垯涓嶈揪
鐢ㄥ皬鑱槑銆佹潈瀹滀箣璁¤В鍐抽棶棰橈紝姹傚揩鑰屼笉欏句唬鐮佽川閲忥紝浼?xì)缁櫃骞鐩暀涓嬭鍛界殑姝昏銆?br>3. 瀵逛簨涓嶅浜?br>灝變簨璁轟簨錛屾槑鏅恒佺湡璇氥佽櫄蹇冨湴璁ㄨ闂錛屾彁鍑哄垱鏂版柟妗堛?br>4. 鎺掗櫎涓囬毦錛屽鍕囧墠榪?br>鍕囨皵寰寰鏄厠鏈嶅洶闅劇殑鍞竴鏂規(guī)硶銆?br>瀛︿範(fàn)綃?br>5. 璺熻釜鍙樺寲
鏂版妧鏈眰鍑轟笉絀峰茍涓嶅彲鎬曘傚潥鎸佸涔?fàn)鏂版妧鏈紝璇諱功錛岃鎶鏈潅蹇楋紝鍙傚姞鎶鏈椿鍔紝涓庝漢浜ゆ祦銆傝澶氱悊瑙f柊璇嶈儗鍚庣殑鎵浠ョ劧錛屾妸鎻℃妧鏈ぇ瓚嬪娍錛屽皢鏂版妧鏈敤浜庝駭鍝佸紑鍙戣璋ㄦ厧銆?br>6. 瀵瑰洟闃熸姇璧?br>鎵撻犲涔?fàn)鍨嬪洟闃熷Q屼笉鏂彁楂樺厔寮熶滑鐨勫鉤鍧囨按騫熾?br>7. 鎳傚緱涓㈠純
鑰佺殑濂楄礬鍜屾妧鏈紝璇ヤ涪錛屽氨寰椾涪銆備笉瑕佸浐姝ヨ嚜灝併?br>8. 鎵撶牬鐮傞攨闂埌搴?br>涓嶆柇榪介棶錛岀湡姝f悶鎳傞棶棰樼殑鏈川銆備負(fù)浠涔堬紵搴旇鎴愪負(fù)浣犵殑鍙eご紱呫?br>9. 鎶婃彙寮鍙戣妭濂?br>鎺у埗濂芥椂闂達(dá)紝鍏繪垚濂戒範(fàn)鎯紝涓嶈鍔犵彮銆?/p>
寮鍙戞祦紼嬬瘒
10. 璁╁鎴峰仛鍐沖畾
璁╃敤鎴峰湪鐜板満錛屽懼惉浠栦滑鐨勫0闊籌紝瀵逛笟鍔℃渶閲嶈鐨勫喅絳栧簲璇ヨ浠栦滑璇翠簡綆椼?br>11. 璁╄璁℃寚瀵艱屼笉鏄搷綰靛紑鍙?br>璁捐鏄墠榪涚殑鍦板浘錛屽畠鎸囧紩鐨勬槸鏂瑰悜錛岃屼笉鏄洰鐨勬湰韜傝璁$殑璇︾暐紼嬪害搴旇閫傚綋銆?br>12. 鍚堢悊鍦頒嬌鐢ㄦ妧鏈?br>鏍規(guī)嵁闇瑕佽屼笉鏄叾浠栧洜绱犻夋嫨鎶鏈傚鍚勭鎶鏈柟妗堣繘琛屼弗鏍煎湴榪介棶錛岀湡璇氶潰瀵瑰悇縐嶉棶棰樸?br>13. 璁╁簲鐢ㄩ殢鏃墮兘鍙互鍙戝竷
閫氳繃鍠勭敤鎸佺畫闆嗘垚鍜岀増鏈鐞嗭紝浣犲簲璇ラ殢鏃墮兘鑳藉緙栬瘧銆佽繍琛岀敋鑷抽儴緗插簲鐢ㄣ?br>14. 鎻愭棭闆嗘垚錛岄綣侀泦鎴?br>闆嗘垚鏈夐闄╋紝瑕佸敖鏃╁敖閲忓鍦伴泦鎴愩?br>15. 鎻愭棭瀹炵幇鑷姩鍖栭儴緗?br>16. 浣跨敤婕旂ず鑾峰緱棰戠箒鍙嶉
17. 浣跨敤鐭凱浠o紝澧為噺鍙戝竷
18. 鍥哄畾浠鋒牸灝辨剰鍛崇潃鑳屽彌鎵胯
浼扮畻搴旇鍩轟簬瀹為檯鐨勫伐浣滀笉鏂彉鍖栥?br>鐢ㄦ埛綃?br>19. 瀹堟姢澶╀嬌
鑷姩鍖栧崟鍏冩祴璇曟槸浣犵殑瀹堟姢澶╀嬌銆?br>20. 鍏堢敤瀹冨啀瀹炵幇瀹?br>嫻嬭瘯椹卞姩寮鍙戝叾瀹炴槸涓縐嶈璁″伐鍏楓?br>21. 涓嶅悓鐜錛屽氨鏈変笉鍚岄棶棰?br>瑕侀噸瑙嗗騫沖彴闂銆?br>22. 鑷姩楠屾敹嫻嬭瘯
23. 搴﹂噺鐪熷疄鐨勮繘搴?br>鍦ㄥ伐浣滈噺浼扮畻涓婏紝涓嶈鑷嬈轟漢銆?br>24. 鍊懼惉鐢ㄦ埛鐨勫0闊?br>姣忎竴澹版姳鎬ㄩ兘闅愯棌鐫瀹濊吹鐨勭湡鐞嗐?
緙栫▼綃?br>25. 浠g爜瑕佹竻鏅板湴琛ㄨ揪鎰忓浘
浠g爜鏄粰浜鴻鐨勶紝涓嶈鑰嶅皬鑱槑銆?br>26. 鐢ㄤ唬鐮佹矡閫?br>娉ㄩ噴鐨勮壓鏈?br>27. 鍔ㄦ佸湴榪涜鍙栬垗
璁頒綇錛屾病鏈夋渶浣寵В鍐蟲柟妗堛傚悇縐嶇洰鏍囦笉鍙兘闈㈤潰淇卞埌錛屽叧娉ㄥ鐢ㄦ埛閲嶈鐨勯渶姹傘?br>28. 澧為噺寮忕紪紼?br>鍐欎竴鐐逛唬鐮佸氨鏋勫緩銆佹祴璇曘侀噸鏋勩佷紤鎭傝浠g爜騫插噣鍒╄惤銆?br>29. 灝介噺綆鍗?br>瀹佺畝鍕跨箒銆傚鏋滄病鏈夊厖瓚崇殑鐞嗙敱錛屽氨涓嶈浣跨敤浠涔堟ā寮忋佸師鍒欏拰鐗瑰埆鐨勬妧鏈?br>30. 緙栧啓鍐呰仛鐨勪唬鐮?br>綾誨拰緇勪歡搴旇瓚沖灝忥紝浠誨姟鍗曚竴銆?br>31. 鍛婄煡錛屼笉瑕佽闂?br>澶氱敤娑堟伅浼犻掞紝灝戠敤鍑芥暟璋冪敤銆?br>32. 鏍規(guī)嵁濂戠害榪涜鏇挎崲
濮旀墭寰寰浼樹簬緇ф壙銆?
璋冭瘯綃?br>33. 璁板綍闂瑙e喅鏃ュ織
涓嶈鍦ㄥ悓涓鍦版柟鎽斿掍袱嬈°傞敊璇槸鏈瀹濊吹鐨勮儲瀵屻?br>34. 璀﹀憡灝辨槸閿欒
蹇借緙栬瘧鍣ㄧ殑璀﹀憡鍙兘閾告垚澶ч敊銆?br>35. 瀵歸棶棰樺悇涓嚮鐮?br>鍒嗚屾不涔嬫槸璁$畻鏈虹瀛︿腑鏈閲嶈鐨勬濇兂涔嬩竴銆備絾鏄紝瑕佷粠璁捐鍜屽師鍨嬮樁孌靛氨鑰冭檻鍚勯儴鍒嗗簲璇ヨ兘澶熷緢濂藉湴鍒嗙銆?br>36. 鎶ュ憡鎵鏈夌殑寮傚父
37. 鎻愪緵鏈夌敤鐨勯敊璇俊鎭?br>紼嶅井澶氳姳涓鐐瑰績鎬濓紝鍑洪敊鐨勬椂鍊欙紝灝嗙粰浣犲甫鏉ユ瀬澶т究鍒┿?
鍥㈤槦鍗忎綔綃?br>38. 瀹氭湡瀹夋帓浼?xì)闈㈡棄櫁?br>甯稿紑浼?xì)锛屽紑鐭細(xì)銆?br>39. 鏋舵瀯甯堝繀欏誨啓浠g爜
涓嶅啓浠g爜鐨勬灦鏋勫笀涓嶆槸濂芥灦鏋勫笀銆傚ソ鐨勮璁¢兘鏉ヨ嚜瀹為檯緙栫▼銆傜紪紼嬪彲浠ュ甫鏉ユ繁鍏ョ殑鐞嗚В銆?br>40. 瀹炶浠g爜闆嗕綋鎵鏈夊埗
璁╁紑鍙戜漢鍛樺湪緋葷粺涓嶅悓鍖哄煙涓笉鍚岀殑妯″潡鍜屼換鍔′箣闂磋疆宀椼?br>41. 鎴愪負(fù)鎸囧鑰?br>鏁欏鐩擱暱銆傚垎浜兘鎻愰珮鍥㈤槦鐨勬諱綋鑳藉姏銆?br>42. 璁╁ぇ瀹惰嚜宸辨兂鍔炴硶
鎸囧紩鏂瑰悜錛岃屼笉鏄洿鎺ユ彁渚涜В鍐蟲柟妗堛傝姣忎釜浜洪兘鏈夋満浼?xì)鍦q蹭腑瀛︿範(fàn)銆?br>43. 鍑嗗濂藉悗鍐嶅叡浜唬鐮?br>涓嶈鎻愪氦鏃犳硶緙栬瘧鎴栬呮病鏈夐氳繃鍗曞厓嫻嬭瘯鐨勪唬鐮侊紒
44. 鍋氫唬鐮佸鏌?br>澶嶆煡瀵規(guī)彁楂樹唬鐮佽川閲忋佸噺灝戦敊璇瀬涓洪噸瑕併?br>45. 鍙婃椂閫氭姤榪涘睍涓庨棶棰?
涓誨姩閫氭姤錛屼笉瑕佽鍒漢鏉ラ棶浣犮?/p>
杞澆鑷? 閫嶉仴鑷湪鐨凜SDN鍗氬 http://blog.csdn.net/xoyojank/archive/2011/04/10/6313422.aspx
嫻嬭瘯瀵硅薄錛歊TTI鐨刣ynamic_cast鍜岃嚜宸卞疄鐜扮殑RTTI緋葷粺錛屼唬鐮佸涓?/p>
template<typename TClass>
TClass* Cast( )
{return IsKindOf( TClass::StaticGetClassInfo() ) ? (TClass*)this:null;
}
bool RTTIObject::IsKindOf( RTTIClass* ClassInfo ) {RTTIClass* ThisClass = GetRTTIClass();
if ( ThisClass == null )
return false;
return ThisClass->IsKindOf( ClassInfo );}
bool RTTIClass::IsKindOf( RTTIClass* ClassInfo ) { RTTIClass* ThisClass = this;while ( ThisClass != null )
{ if ( ClassInfo == ThisClass )return true;
ThisClass = ThisClass->mParentClass;
}
return false;
}
嫻嬭瘯浠g爜錛?/p>
class ClassA : public RTTIObject
{public:DECLARE_RTTI_CLASS( ClassA )
int a;private:};
IMPLEMENT_RTTIROOT( ClassA )
class ClassB: public ClassA
{DECLARE_RTTI_CLASS( ClassB )
public:int b;private:};
IMPLEMENT_RTTI_CLASS( ClassB, ClassA )
class ClassC : public ClassB
{DECLARE_RTTI_CLASS( ClassC )
public:int c;private:};
IMPLEMENT_RTTI_CLASS( ClassC, ClassB )
class ClassD: public ClassA
{DECLARE_RTTI_CLASS( ClassD )
public:int d;private:};
ClassC c;
ClassD d;
ClassA* fakeC = &c;
ClassA* fakeD = &d;
const int TestTimes = 10000;
float t1 = TimeSource::GetAppTime();for ( int i = 0;i<TestTimes;i++)
{ClassC* realC = dynamic_cast<ClassC*>(fakeC);
ClassD* realD = dynamic_cast<ClassD*>(fakeD);
}
float t2 = TimeSource::GetAppTime() - t1;for ( int i = 0;i<TestTimes;i++)
{ClassC* realC = fakeC->Cast<ClassC>( );
ClassD* realD = fakeD->Cast<ClassD>( );
}
float t3 = TimeSource::GetAppTime() - t2;SimpleLog log;
log.Debug(L"%f %f", t2, t3);
| 10000嬈★紝鍗曚綅:姣 | dynamic_cast | Cast |
| Debug | 1.468590 | 5.173067 |
| Release | 1.025950 | 0.702404 |
鍙互鐪嬪緱鍑烘潵錛屾病鏈変紭鍖栬繃鐨凜ast浠g爜鎬ц兘鏋佸樊錛屼絾鏄紭鍖栬繃鐨凜ast鎬ц兘瓚呰秺浜嗙郴緇熺殑dynamic_cast,璺熻釜姹囩紪鍙戠幇緋葷粺鏈夊仛涓竴浜涘紓甯稿強bad_cast鐨勫鐞?/p>
寤鴻錛氬彲浠ュ仛涓涓畯錛屽湪涓嶆敮鎸丷TTI鐨勭紪璇戝櫒鍙婂鉤鍙頒笅浣跨敤鑷繁鐨凜ast
榪欓噷鍙傝冧簡mybios鍗氬涓殑鏂囩珷,緇機EGUI瀛楃涓插仛涓涓猵atch
鐒跺悗闇瑕佹壘鍒皏s2008鐨刟utoexp.dat鏂囦歡
XP涓嬩綅浜?C:\Program Files\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\autoexp.dat
鐢ㄨ浜嬫湰絳夊伐鍏鋒墦寮, 鍦ˋutoExpand孌典腑鍍忚繖鏍鋒坊鍔?
[AutoExpand]
; CEGUI String
CEGUI::String = str =<d_quickbuff,su> length =<d_cplength>
鍗沖彲鍦╒C璋冭瘯鍣ㄤ腑鐪嬪埌CEGUI瀛楃涓插唴瀹? 涓嶈繃涓枃榪樻槸鏆傛椂鏃犳硶鏀寔
棣栧厛,鎴戜滑寰楀純鐢–PU钂欑毊, 铏界劧鍏煎鎬уソ,浣嗘槸闈㈠鐜頒粖澶氭牳浣嗗茍涓嶆彁楂樺崟鏍擱熺巼鐨勬儏鍐典笅,GPU榪樻槸鐜嬮亾.鑰屼笖GPU钂欑毊浠g爜鍙兘鏇寸畝鍗?涓嶈繃涔熸湁涓鐐瑰皬緙虹偣, 瀵逛簬灝忓紩鎿庢潵璇?Shader蹇呴』緇欓潤鎬佹ā鍨嬪拰楠ㄩ鍔ㄧ敾妯″瀷鍐欎袱濂?
鍏舵鎴戜滑闇瑕佸姞寮轟竴涓猄ubSkin鐨勯楠兼敮鎸佹暟閲? 楠ㄩ鍔ㄧ敾涓婄殑姣忎釜SubSkin閮芥槸涓嬈raw, 浣嗘槸鎸夌収浼犵粺楠ㄩ鍔ㄧ敾緋葷粺,姣忎釜楠ㄥご瀵瑰簲涓涓煩闃典紶鍏?閭d箞SM2.0淇濆畧璁$畻鍙兘鏀寔50鏍歸澶? 涓嶈繃鍦ㄦ垜鍓嶆鏃墮棿鐨?a href="http://m.shnenglu.com/sunicdavy/archive/2010/04/26/113578.html">鏂囩珷涓湁鎻愬埌榪欎釜鎶鏈?騫朵笖宸茬粡鍦ㄦ垜鐨勯楠煎姩鐢葷郴緇熷強OGRE涓疄鐜?鏁堟灉寰堝ソ.
緹庢湳涔熻寰堝弽鎰熶竴涓漢鐗╁仛1涓猄ubSkin, 浠栦滑鏇存柊濂藉涓猄ubSkin,涔熷氨鏄韜綋姣忎釜閮ㄥ垎閮芥槸涓涓猄ubSkin, 榪欐牱鏂逛究淇敼, 鍚屾椂緋葷粺鏀寔鐨勯楠兼暟閲忚繕鍙互鏈変竴瀹氶噺鐨勪笂鍗?涓嶈繃鎴戜滑榪橀渶瑕佸仛涓涓儲寮曞伐浣? 浼犵粺鐨凣PU楠ㄩ鍔ㄧ敾涓繪槸鍦ㄦ覆鏌揝ubSkin鍓嶄紶鍏ユ墍鏈夎繖浜汼ubSkin闇瑕佺敤鍒扮殑楠ㄩ鐭╅樀. 浣嗘槸姣忎釜SubSkin騫朵笉涓瀹氳兘鐢ㄥ埌鎵鏈夌殑榪欎簺鐭╅樀,榪欐槑鏄炬槸涓縐嶆氮璐? 鍥犳鍦∣GRE涓仛榪囦竴嬈$儲寮曢澶勭悊,涔熷氨鏄皢姣忎釜SubSkin鐢ㄥ埌鐨勯楠肩粺璁″嚭鏉? 鍦ㄦ覆鏌撹繖嬈ubSkin鏃舵墠閲嶆柊浼犲埌GPU. 寰堟槑鏄?榪欐槸鐢ㄩ熷害榪樼┖闂村拰鍏煎鎬? 濡傛灉鍦―X10浠ヤ笂,鏈塁onstantBuffer榪樺ソ. DX9瀹炲湪澶參浜?/p>
浣跨敤Marker鐐圭殑鎹㈣緋葷粺寰堥毦澶勭悊渚嬪璐磋韓琛g墿榪欑被鐗╀歡鎹㈣. OGRE涓湁涓縐嶅叡浜楠肩殑鎶鏈? 鍙互鏀寔, 涓嶈繃浠庝唬鐮佸垎鏋愮湅鏉?榪欑鎶鏈CPU绔楠艱綆楅噺瀹炲湪鏄ぇ鐨勬儕浜? 鍥犳鎴戜滑鍐沖畾灝嗘暣涓猄ubSkin(涔熷氨鏄疭ubEntity)鎹㈡帀,榪欐牱鐢辯編鏈牴鎹笉鍚屾崲瑁呯被鍨嬫潵灝嗚。鏈嶅湪MAX涓洿鎺ョ粦瀹氬ソ鍚庣洿鎺ユ浛鎹㈠師濮嬫ā鍨嬩腑鐨凷ubSkin鍗沖彲杈懼埌鎹㈣鏁堟灉.鍙互璇磋繖鏄粠鍔ㄦ佽綆楀埌闈欐侀澶勭悊鐨勮漿鍙?鏁堢巼鎻愬崌寰堝.
鍚勪綅鍙互涓嬭澆鐪嬩笅
浠庣洿瑙備釜浜哄垎鏋愯寮曟搸鎶鏈寘鎷?
1. 鍩轟簬SlimDX鐨?NET寮曟搸
2. JavaScript鑴氭湰
3. 鍦烘櫙鍓旈櫎鏁堢巼榪樹笉閿?/p>
4. 鎵嬫劅闈炲父媯? 涓嶄簹浜嶹OW
浠?a >鍗氬閲岃繕鏈夊嚑綃囧叧浜庝繚鐣欐ā寮忓紩鎿庣殑璁ㄨ. 涓漢瑙夊緱榪欏ぇ姒傛槸浠ュ悗鐨勮秼鍔? 寰蔣鐨刉PF棣栧厛褰撲簡鐐伆, 搴嗗垢.
float4x4 matBoneArray[40]; // 榪欐槸浼犺緭鐨勭摱棰?/span>VS_OUTPUT vs_main( SkinnedVS_INPUT In )
{VS_OUTPUT Out = (VS_OUTPUT)0;
float4x4 skinTransform = 0;
skinTransform += matBoneArray[In.BoneIndices.x] * In.BoneWeights.x;
skinTransform += matBoneArray[In.BoneIndices.y] * In.BoneWeights.y;
skinTransform += matBoneArray[In.BoneIndices.z] * In.BoneWeights.z;
skinTransform += matBoneArray[In.BoneIndices.w] * In.BoneWeights.w;
float4 localpos = mul(In.Position, skinTransform);
Out.Position = mul( localpos, matViewProj );
Out.TexCoord = In.TexCoord;
return Out;}
matBoneArray榪欎釜鏁扮粍鏄楠肩殑LocalRot鍜孡ocalTranslation 閫氳繃浠ヤ笅鍑芥暟build鍑烘潵
Matrix4& Matrix4::FromTranslationRotation( const Vector3& translation, const Quaternion& rotation )
{ float xx = rotation.x * rotation.x * 2.0f, yy = rotation.y * rotation.y * 2.0f, zz = rotation.z * rotation.z * 2.0f; float xy = rotation.x * rotation.y * 2.0f, zw = rotation.z * rotation.w * 2.0f, xz = rotation.x * rotation.z * 2.0f; float yw = rotation.y * rotation.w * 2.0f, yz = rotation.y * rotation.z * 2.0f, xw = rotation.x * rotation.w * 2.0f;m[0][0] = 1.0f - yy - zz; m[0][1] = xy + zw; m[0][2] = xz - yw; m[0][3] = 0.0f;
m[1][0] = xy - zw; m[1][1] = 1.0f - xx - zz; m[1][2] = yz + xw; m[1][3] = 0.0f;
m[2][0] = xz + yw; m[2][1] = yz - xw; m[2][2] = 1.0f - xx - yy; m[2][3] = 0.0f;
m[3][0] = translation.x; m[3][1] = translation.y; m[3][2] = translation.z; m[3][3] = 1.0f;
return *this;
}
浠庤繖閲屼綘鍙互鍙戠幇, 鏈潵姣忔牴楠ㄥご鍙渶瑕?涓猣loat4 浼犻掑彉鎹俊鎭殑,鐜板湪鍗撮渶瑕?涓猣loat4,涔熷氨鏄竴涓煩闃墊潵浼犻?鐭╅樀涓繕鏈夊緢澶氫笉浣跨敤鐨勫彉閲忎篃琚紶杈撳埌GPU涓?榪欓噷灝辨槸浼樺寲鐨勭偣.
閲嶆柊璋冩暣鍚庣殑Shader浠g爜:
float4x4 BuildFromTransRot( float4 translation, float4 rot )
{float4 rotation = rot;
float xx = rotation.x * rotation.x * 2.0f, yy = rotation.y * rotation.y * 2.0f, zz = rotation.z * rotation.z * 2.0f; float xy = rotation.x * rotation.y * 2.0f, zw = rotation.z * rotation.w * 2.0f, xz = rotation.x * rotation.z * 2.0f; float yw = rotation.y * rotation.w * 2.0f, yz = rotation.y * rotation.z * 2.0f, xw = rotation.x * rotation.w * 2.0f; float4x4 m = { {1.0f - yy - zz, xy + zw, xz - yw, 0}, {xy - zw, 1.0f - xx - zz, yz + xw, 0}, {xz + yw, yz - xw, 1.0f - xx - yy, 0}, {translation.x, translation.y, translation.z, 1}};
return m;}
float4x4 GetBoneElement( float index ){ return BuildFromTransRot( vecBoneLocalTrans[index], vecBoneLocalRot[index] );}
VS_OUTPUT vs_main( SkinnedVS_INPUT In )
{VS_OUTPUT Out = (VS_OUTPUT)0;
float4x4 skinTransform = 0;
skinTransform += GetBoneElement(In.BoneIndices.x) * In.BoneWeights.x;
skinTransform += GetBoneElement(In.BoneIndices.y) * In.BoneWeights.y;
skinTransform += GetBoneElement(In.BoneIndices.z) * In.BoneWeights.z;
skinTransform += GetBoneElement(In.BoneIndices.w) * In.BoneWeights.w;
float4 localpos = mul(In.Position, skinTransform);
Out.Position = mul( localpos, matViewProj );
Out.TexCoord = In.TexCoord;
return Out;}
鎴戜滑灝嗛澶寸殑local鏃嬭漿鍙婂亸縐諱紶閫掕嚦GPU,鐒跺悗鍦℅PU鍐呴噸緇?铏界劧瀵笹PU鎬ц兘璁$畻鏈夐儴鍒嗘崯鑰?浣嗘槸楠ㄩ鏁伴噺灝辮兘淇濆畧鎻愰珮鍒?00涓?
CORE DLL
ENGINE DLL
GAME EXE
D3DRENDER DLL
鍏朵腑D3DRENDER鏄疓AME鍔ㄦ佽澆鍏ョ殑錛屽叾闇瑕侀摼鎺ORE,ENGINE
榪欐槸涓涓緢甯歌鐨勬ā寮忥紝浣嗘槸涓嶅ソ鐨勬槸錛屽洜涓篊ORE鍜孍NGINE鍧囨槸DLL錛屼唬鐮佷腑鐨凷ymbol閮借瀵煎嚭鎵嶅彲浣跨敤銆備換浣曚漢浣跨敤DEPENDENCE宸ュ叿灝卞彲浠ュ皢DLL涓紩鐢ㄧ殑涓滆タ鏌ョ湅鐨勬竻妤氾紝铏界劧榪欎笉鑷充簬閫犳垚鎶鏈硠婕忥紝浣嗕粠閫熷害鍜孌LL澶у皬鏉ヨ閮芥槸涓嶅垝綆楃殑銆?/p>
鐜板湪寰堝娓告垙涓籩xe涓鑸兘鏄?0M+鐢氳嚦20M+鐨勫ぇexe錛岃繖閮芥槸浣跨敤闈欐侀摼鎺ヨ屾垚銆備絾鏄浠g爜緇撴瀯涔熷繀欏誨仛鍑轟竴瀹氱殑璋冩暣銆傛墍鏈夊伐紼嬪繀欏婚兘鏄潤鎬佸簱錛岃繖鏍鋒墠鑳戒繚璇佸儚CORE榪欐牱鐨勯潤鎬佸簱涓殑鍏ㄥ眬/闈欐佸彉閲忎笉鑷充簬琚摼鎺?浠借岄犳垚鍐呭瓨孌甸昏緫閿欒銆?/p>
褰撶劧錛屼嬌鐢ㄥ叏闈欐佸簱榪橀渶瑕佹敞鎰忎竴鐐癸細(xì)鎵鏈夌殑lib閮芥槸鍦ㄦ渶鍚庣殑game宸ョ▼閲屾潵鍋氶摼鎺ャ?/p>
UDK鏄痷nrealengine develpoment kit 鐨勭緝鍐欙紝綆鍗曟潵璇村氨鏄ぇ鍚嶉紟榧庣殑铏氬夠錛撳紩鎿庣殑鍏嶈垂鍟嗕笟鐗堟湰錛庝笉榪囪櫄騫伙紦姣曠珶榪樻槸錛斿勾鍓嶇殑dx9鐨勫叆闂ㄧ駭寮曟搸錛屽湪鍟嗕笟涓婂彇寰?br>宸ㄥぇ鎴愬姛錛屾妧鏈笂涔熸樉寰楄惤鍚庯紟鐩墠Epic鎯蟲Θ騫茶櫄騫伙紦鐨勬渶鍚庝竴鐐規(guī)綔鍔涳紝浜庢槸騫茶剢鍙戝竷浜嗚繖涓厤璐圭増鏈紟浠諱綍浜洪兘鍙互鐢嫉錛わ極寮鍙戞父鎴忥紝浣嗘槸濡傛灉娓告垙鐗熷埄鐨勮瘽姣忓勾榪樻槸瑕佸悜
Epic浜ょ撼涓瀹氭暟閲忕殑鎶鏈巿鏉冭垂鐢ㄧ殑錛庡厛涓嶇榪欎釜錛岃繕鏄潵鐪嬬湅瀹冪殑瀹樻柟瑙嗛鏁欑▼鍚э紟
銆銆[attach]44[/attach]
閾炬帴濡備笅錛氥銆
http://udn.epicgames.com/Three/VideoTutorials.html
涓鍏憋紩涓暀紼嬨浠庡紩鎿庨厤緗粙緇嶅紑濮嬶紝鍒板叧鍗″拰浜虹墿緙栬緫鍣紝浠ュ強鏈鍚庝竴涓畬鏁寸殑灝忔父鎴忕殑鍒朵綔錛屽浜庡叆闂ㄦ潵璇村畬鍏ㄨ凍澶熶簡錛?br>瑙嗛璇寸殑榪樻瘮杈冭緇嗭紝鍚姏涓嶅ソ鐨勫悓瀛﹀彲浠ュ鐓т笅寮鍙戞枃妗chttp://www.udk.com/documentation銆閲岄潰鍩烘湰璇寸殑寰堣緇嗭紟
鏈鍚庨檮涓婏嫉錛わ極鐨勪笅杞藉湴鍧錛氥March 2010 UDK Beta (548 MB .exe)銆
濂戒簡錛岋嫉錛わ極瀵逛簬鍒濆鑰呮潵璇磋繕鏄瘮杈冮傚悎鐨勶紟瀵逛簬娓告垙鐨勫紑鍙戜漢鍛樻潵璇村紩鎿庣殑鏁翠綋鏋舵瀯榪樻槸寰堝煎緱瀛︿範(fàn)鐨勶紟甯屾湜浣犲鐨勬剦蹇紟
OGRE鐨凜ompositor鍏跺疄灝辨槸鐢ㄤ簬瑙e喅緇樺埗PostEffect鐨勶紝綆鍗曠殑璇達(dá)紝灝辨槸涓縐峈enderTarget鐨勬祦紼嬫帶鍒惰剼鏈?/p>
榪欐槸OGRE compositor鏂囦歡鐨勭墖孌?/p>
compositor Bloom
{technique
{ // Temporary texturestexture rt_output target_width target_height PF_R8G8B8
texture rt0 target_width_scaled 0.25 target_height_scaled 0.25 PF_R8G8B8
texture rt1 target_width_scaled 0.25 target_height_scaled 0.25 PF_R8G8B8
target rt_output
{ // Render output from previous compositor (or original scene)input previous
}
target rt0
{ // Start with clear textureinput none
// Horizontal blur passpass render_quad
{ // Renders a fullscreen quad with a materialmaterial Ogre/Compositor/BrightPass2
input 0 rt_output
}
}
target rt1
{ // Start with clear textureinput none
// Horizontal blur passpass render_quad
{ // Renders a fullscreen quad with a materialmaterial Ogre/Compositor/BlurV
input 0 rt0
}
}
target rt0
{ // Start with clear textureinput none
// Horizontal blur passpass render_quad
{ // Renders a fullscreen quad with a materialmaterial Ogre/Compositor/BlurH
input 0 rt1
}
}
target_output
{ // Start with clear outputinput none
// Draw a fullscreen quadpass render_quad
{ // Renders a fullscreen quad with a materialmaterial Ogre/Compositor/BloomBlend2
input 0 rt_output
input 1 rt0
}
}
}
}
澶ф鎴戜滑鐭ラ亾錛屼竴涓狢ompositor鍒嗕負(fù)璧勬簮瀹氫箟涓庣粯鍒舵楠わ紙target xxx錛?/p>
鑰屼竴涓粯鍒舵楠ゅ張鍒嗗埆瀹氫箟錛?/p>
1. 錛堣緭鍏ワ級緇樺埗鐨勬槸浠涔堜笢瑗匡紵
2. 錛堟晥鏋滐級緇樺埗鎴愪粈涔堟牱瀛愶紵
3. 錛堣緭鍑猴級寰鍝噷緇樺埗錛?/p>
杈撳嚭鏂瑰紡鍦ㄨ繖涓緥瀛愭湁2縐嶏細(xì)綰圭悊錛圧T錛夊拰灞忓箷
杈撳叆鏂瑰紡鏈?涓細(xì)綰圭悊鍙婂満鏅?/p>
鎴戜滑鍙互浣跨敤涓涓洖璋冩潵瀵逛竴涓粯鍒舵楠ゆ彁渚涚粯鍒惰緭鍏?/p>
緇樺埗鏁堟灉灝辨槸涓澶у爢鐨凷hader錛岃繖浜泂hader閮芥槸鍩轟簬涓涓猶uad鏉ュ仛鐨勶紝涔熷氨鏄竴涓煩褰紝浣跨敤鍙樻崲鍚庣殑欏剁偣鍜屼竴涓汗鐞嗗潗鏍囦綔涓洪《鐐瑰畾涔?/p>
涓嶈繃榪欓噷鏄笉闇瑕佸仛vertexshader鐨勶紝浠呬粎ps瓚崇煟銆?/p>
緇樺埗鐨勬渶鍚庯紝鏄皢鍓嶉潰緇樺埗鐨凴T錛堢汗鐞嗭級娣峰悎璧鋒潵
褰撶劧錛屽鏋滄楠ゆ瘮杈冨鍜屽鏉傛椂錛孯T涔嬮棿璺熷瘎瀛樺櫒涓鏍鳳紝鍙互鍙嶅浣跨敤
鏄劇ず鑼跺6娉曠嚎鐨勫満鏅姞涓?Blur 鐨凱ostEffect
<?xml version="1.0" encoding="gb2312" ?>
<Compositor name = "bloom" >
<Resource>
<RenderTarget name ="rt_source" size="screenquad" />
<RenderTarget name ="rt0" size="screenquad" />
<RenderTarget name ="rt1" size="screenquad" />
</Resource>
<Step target="rt_source">
<Geometry type ="callback" callback = "rt_input"/>
</Step>
<Step target="rt0">
<Geometry type = "screenquad"/>
<Effect name ="material\blurH.xml">
<Texture name ="mTexture" value ="rt_source" />
</Effect>
</Step>
<Step target="rt1">
<Geometry type = "screenquad"/>
<Effect name ="material\blurV.xml">
<Texture name ="mTexture" value ="rt_source" />
</Effect>
</Step>
<Step>
<Geometry type = "screenquad"/>
<Effect name ="material\combine.xml">
<Texture name ="mTexture1" value ="rt0" />
<Texture name ="mTexture2" value ="rt1" />
</Effect>
</Step>
</Compositor>
MAX鎻掍歡瀵煎嚭鐨勬ā鍨嬭祫婧愬垎錛歁esh/Skin, Skeleton, Animation
涓嶅悓鍔ㄤ綔鎸夌収涓嶅悓鐨勫姩鐢繪枃浠朵繚瀛?
ResourceHandle 鍖呭惈鍩烘湰id
>NamedResourceHandle 甯︽湁鍚嶇О璧勬簮錛屽寘鍚玥ashA, hashB錛?浣跨敤鏆撮洩hash鍑芥暟鐢熸垚
>ModelHandle
>MeshHandle
>SkeletonHandle
>AnimationHandle
鑾峰彇璧勬簮錛屽鏋滆祫婧愪笉瀛樺湪鏃訛紝鑷姩鍔犺澆
ModelMaster.ManualCache( &ModelHandle )
鐩存帴璧勬簮璁塊棶錛?br>RawSkeleton = ModelMaster.ManualCache( &SkeletonHandle("a.skl") )
RawSkeleton->GetMarker(...)
寮傛璧勬簮鍔犺澆錛屽紓姝d淇濆瓨浜嶮odelHandle涓紝鍦╟allback涓牴鎹甶d紜
ModelMaster.AsyncCache( &ModelHandle )
鑾峰彇璧勬簮鎸囬拡錛屾湭鍔犺澆鏃訛紝榪斿洖絀?br>ModelResource = ModelMaster.Fetch( &ModelHandle )
妯″瀷璧勬簮鍔犺澆鍣?br> 鍦ㄦā鍨嬪彞鏌勪腑緇戝畾瀵瑰簲鍔犺澆鍣?br> 鍙互鑷緙栧啓甯︽崲瑁呯殑ModelLoader錛岄氳繃璇誨彇鑷繁鐨勯厤緗枃浠訛紝鑷鍔犺澆璧勬簮鍚庣敓鎴怰awModel
ModelLoader
ModelHandle ---mapping---> ModelLoader ---generate--> RawModel
MeshHandle ---mapping---> MeshLoader ---generate--> RawMesh
SkeletonHandle ---mapping---> SkeletonLoader ---generate--> RawSkeleton
AnimationHandle ---mapping---> AnimationLoader ---generate--> RawAnimation
寮曠敤璁℃暟綾?nbsp;
ModelResource
>RawModel
>RawMesh
>RawSkeleton
>RawAnimation
RawModel涓笉淇濈暀Handle錛屽彧淇濈暀鎸囬拡
RawModel
+MeshVB 浠庢ā鍨嬫枃浠朵腑鐩存帴璇誨彇欏剁偣鏍煎紡錛屽寘鍚?闈欐?GPU,CPU綾誨瀷欏剁偣
+RawMesh
+MeshIB 涓嬈℃у~鍏匢B
>GPUMeshVB 涓嬈℃у~鍏匳B
>CPUMeshVB 姣忓撫璁$畻
+Animation 榪愯鏈熸暟鎹紙鏃墮棿/甯э級
+RawAnimation 鍘熷鍔ㄧ敾鍐呭
+Skeleton
+RawSkeleton
鏈榪戝湪鍐橠3D9妯℃嫙D3D10鎺ュ彛鐨勬覆鏌撶郴緇熶腑紕板埌澶ч噺鐨勬覆鏌撶姸鎬佸璞★紝涓嶄粎鎴愬憳澶氾紝鏋氫婦涔熷鐨勮鍛姐?/p>
struct CORE_API RasterizerState : ResourceHandle { eFillMode mFillMode; eCullMode mCullMode; bool mFrontFaceCCW; float mDepthBias; float mSlopeScaledDepthBias; bool mDepthClipEnable; bool mScissorEnable; bool mMultisampleEnable; RasterizerState(); };
鑰岃浠庨厤緗枃浠朵腑璇誨彇鏁版嵁騫跺~鍏呭埌榪欎釜緇撴瀯浣擄紝瀵逛簬C++鏉ヨ瀹屽叏灝辨槸鍚冨姏涓嶈濂界殑錛屽啓鍑烘潵鐨勪唬鐮佷篃鏄瀬涓鴻繃紼嬶紝淇敼鍜屾墿灞曟瀬涓洪夯鐑︾殑銆?/p>
鍥犳鍐沖畾浣跨敤鍙嶅皠鐨勬柟娉曟潵濉厖鏁版嵁錛屽厛鎬葷粨涓涓嬫垜鐨凜++鍙嶅皠緋葷粺
class RTTIObject // 鍔ㄦ佺被鍨嬭瘑鍒璞″熀綾伙紝瀵硅薄閫氳繃涓浜涘畯鍚庡彲浠ュ緢鏂逛究鐨勯氳繃瀛楃涓插垱寤哄嚭綾誨疄渚嬶紝騫朵笖鍙互鏌ヨ娉ㄥ唽鏃剁殑綾誨瀷鍜屽叾浠栫粦瀹氫俊鎭?/span> class NameRef // 鍚嶅瓧琛紝綾諱技浜庤櫄騫諱腑鐨凢Name錛屽彲浠ュ畾涔塁onst鍜屾櫘閫歂ame錛屾瘮杈冨拰鎷瘋礉鍙槸涓涓猟word鑰楄垂鐨勬椂闂?/span> value_parse錛寁alue_tostring錛寁alue_typename // 涓緋誨垪綾誨瀷妯℃澘鍑芥暟錛屾彁渚涘綾誨瀷鐨凾oString錛孭arse鍙婄被鍨嬪悕鏌ヨ
棣栧厛闇瑕佸鐞嗙殑鏄灇涓炬煡璇紝榪欓噷灝嗘灇涓鵑氳繃瀹忓仛鎴愪竴涓釜鏋氫婦瀵硅薄錛屽茍鍙互閫氳繃鍚嶅瓧鍒涘緩瀹炰緥
#define DECLARE_ENUMOBJECT( TEnum ) \ struct EnumObject_##TEnum : EnumObject\ {\ DECLARE_RTTIOBJECT( EnumObject_##TEnum );\ EnumObject_##TEnum( );\ }; #define IMPLEMENT_ENUMOBJECT_BEGIN( TEnum, TEnum_prefixoffset, TMember_prefixoffset ) \ IMPLEMENT_RTTIOBJECT_STRING( EnumObject_##TEnum, #TEnum + TEnum_prefixoffset, #TEnum + TEnum_prefixoffset, "EnumObject" )\ EnumObject_##TEnum::EnumObject_##TEnum(){ const int member_prefixoffset = TMember_prefixoffset; #define ENUMOBJECT_ADD( enumkey ) AddMember( #enumkey + member_prefixoffset, (dword)enumkey ); #define IMPLEMENT_ENUMOBJECT_END } #define ENUMOBJECT_STATICINIT( TEnum ) EnumObject_##TEnum::StaticInit();
EnumObject 涓氳繃瀹忓皢鏋氫婦鐨勫悕縐板拰鍊間繚瀛樺湪榪欎釜瀵硅薄涓?/p>
IMPLEMENT_ENUMOBJECT_BEGIN( eFillMode, 1, 3 ) // 榪欓噷鐨?錛?鏄皢eFillMode鍙奆M_Point杞垚瀛楃涓插悗鍘繪帀鍓嶇紑 ENUMOBJECT_ADD( FM_Point ) ENUMOBJECT_ADD( FM_Line ) ENUMOBJECT_ADD( FM_Fill ) IMPLEMENT_ENUMOBJECT_END // 娉ㄥ唽鍒癛TTIObject緋葷粺 ENUMOBJECT_STATICINIT( eFillMode )
// 閫氳繃鏋氫婦瀵硅薄鍙互鏌ユ壘鍒板瓧絎︿覆瀵瑰簲鐨勫?/span> dword v; EnumObject::GetEnumValue( "FillMode", "Point", v )
涓嬩竴姝ユ槸灝嗙粨鏋勪綋鎴愬憳淇℃伅璁板綍
void SettingObject::BindMember( const NameRef& objname, void* instancePtr, void* dataPtr, SettingProxy* proxy ) { proxy->mOffset = dword(dataPtr) - dword(instancePtr); MemberList& memberlist = mSettingMap[ objname ]; memberlist[ proxy->mName ] = proxy; }
榪欓噷璁板綍鐨勬槸緇撴瀯浣撴垚鍛樼殑鍐呭瓨鍋忕Щ
浣跨敤澶ч噺鐨勫畯錛屽彲浠ヨ緇撴瀯浣撶粦瀹氬彉寰楁紓浜?/p>
#define BIND_SETTINGOBJECT_BEGIN( TClass ) \ { const NameRef& soname = TClass::StaticGetClassInfo()->mClassName;TClass soobj; #define BIND_SO_MEMBER( TMemberType, TMember ) \ so.BindMember( soname, &soobj, &soobj.TMember, new TSettingElement<TMemberType>(#TMember + 1 ) ); #define BIND_SO_MEMBER_NAME( TMemberType, TMember, TName ) \ so.BindMember( soname, &soobj, &soobj.TMember, new TSettingElement<TMemberType>(TName) ); #define BIND_SO_ENUM( TEnumType, TMember ) \ so.BindMember( soname, &soobj, &soobj.TMember, new TSettingEnum(#TMember + 1, #TEnumType + 1) ); #define BIND_SO_ENUM_NAME( TEnumType, TMember, TName ) \ so.BindMember( soname, &soobj, &soobj.TMember, new TSettingEnum(TName, #TEnumType + 1) ); #define BIND_SETTINGOBJECT_END }
緇戝畾浠g爜濡備笅
BIND_SETTINGOBJECT_BEGIN( RasterizerState )
BIND_SO_ENUM ( eFillMode , mFillMode )
BIND_SO_ENUM ( eCullMode , mCullMode )
BIND_SO_MEMBER ( bool , mFrontFaceCCW )
BIND_SO_MEMBER ( float , mDepthBias )
BIND_SO_MEMBER ( float , mSlopeScaledDepthBias)
BIND_SO_MEMBER ( bool , mDepthClipEnable)
BIND_SO_MEMBER ( bool , mScissorEnable)
BIND_SO_MEMBER ( bool , mMultisampleEnable)
BIND_SETTINGOBJECT_END
鎵鏈夌粨鏋勪綋鐨勪俊鎭璁板綍鍦⊿ettingObject涓紝璇誨彇閰嶇疆鏂囦歡濉厖緇撴瀯浣撶殑浠誨姟灝卞彉寰楀紓甯哥殑綆鍗曚簡
SettingObject settings;
// 灝嗘墍鏈夌殑緇撴瀯浣撲俊鎭褰?/span>
InitRenderStateObjectSetting( settings );
const NameRef& rzname = DepthStencilState::StaticGetClassInfo()->mClassName;
DepthStencilState a;
// 榪欓噷灝辨槸灝嗛厤緗枃浠剁殑淇℃伅濉厖鍒扮粨鏋勪綋
settings.SetMember( rzname, &a, "BackFace.StencilFunc", "Equal" );
Lemon緋葷粺鐗規(guī)э細(xì)
1. 鏀寔 Canvas,Sprite,ImageSet錛堝浘鐗囧撫瀛樺偍浜庝竴寮犲浘鐗囷紝絳夊ぇ灝忥級
2. ImageSetEx錛堣嚜鐢辨憜鏀劇殑鍥劇墖甯т簬涓寮犲浘鐗囷級*
3. 鏀寔瀵硅薄鏃犲叧閿撫鏃朵嬌鐢ㄩ潤鎬佸睘鎬ц繘琛岃緗紝綾諱技浜嶩GE閲岀殑綺劇伒
4. 姣忎釜瀵硅薄鍧囧彲鎴愪負(fù)Container錛屽茍鎷ユ湁Child Node
5. 鍔ㄧ敾鍏抽敭甯х被鍨嬫敮鎸侊細(xì)緙╂斁錛屾棆杞紝浣嶇Щ錛岄鑹詫紝鍔ㄧ敾甯э紝閿氱偣錛岄煶鏁?
6. 鏀寔鎷懼彇
7. 鍩轟簬XML瀛樺偍鐨勬枃浠舵牸寮?/p>
8. 鍩轟簬Squirrel鏉鵑紶鑴氭湰鐨勯珮閫熼潰鍚戝璞¤剼鏈?
9. 鍥懼艦緋葷粺Graphics鎶借薄錛岄傜敤浜庝換浣曟覆鏌撹澶?/p>
10. 鎺т歡緋葷粺*
11. 瑙嗛鍥炴斁*
鎵鏈夊璞″潎鐢盧TTI鍒涘緩錛屾灇涓懼潎鏈塏amePool+Hash錛屽茍鐢變簬PropertySet鐨勫弽灝勭郴緇?/p>
LemonComposer緙栬緫鍣ㄧ壒鎬?/p>
鐣岄潰鍩轟簬鎴戝幓騫村紑鍙戠殑MotionUI錛宭ua
8+1鎺у埗鐐圭偣瀵硅薄璋冭妭灞炴?/p>
綾籄dobe Flash鐨勫撫緙栬緫銆?/p>
綾?DS Max鐨勫垎杞ㄩ亾鍏抽敭甯х紪杈戯紝鏈夊姪浜庝紭鍖朼rt assert
鑷敱璋冭妭瀵硅薄灞傜駭鍙婄埗瀛愬叧緋?/p>
鍏ㄥ姛鑳芥棤闄愬埗鑷敱Redo,Undo
*灝嗗湪鏈潵鐗堟湰鏀寔
2D娓告垙鏄嫭绔嬫父鎴忕殑涓繪祦錛屼篃鏄垱鎰忥紝鎶曞叆姣旀渶灝忕殑涓涓淮搴︺備絾鏄熀浜?D鐨勫ぇ澶氭槸涓浜涚被浼間簬HGE錛孖ndieLib絳夊紑婧愬厤璐?D寮曟搸銆備絾鏄潰瀵規(guī)父鎴忎腑澶ч噺鐨勫姩鐢昏岃█錛屽紑鍙戣呭ぇ澶氭槸浣跨敤鍥劇墖甯ф潵鍒朵綔錛岃櫧鐒舵晥鏋滃緢濂斤紝浣嗘槸璁懼璧勬簮濂界敤鍜屽埗浣滈毦搴︿篃鏄緢闅炬帶鍒剁殑銆?/p>
嫻佽浜庡幓騫寸殑妞嶇墿瀵瑰兊灝稿拰2004騫村彂琛岀殑RO Offline緇忚繃璧勬簮鍒嗘瀽錛屽氨鏄嬌鐢ㄧ被浼間簬Lemon緋葷粺錛屾垨鑰呰Flash鐨勭郴緇熷埗浣滆屾垚錛屽洜姝ゆ晥鏋滃拰鎵╁睍鎬ч潪甯稿ソ銆?/p>
榪欏氨鏄疞emon瀛樺湪鐨勭悊鐢便?/p>
Flash闈㈠悜鐨勬槸GDI+Web錛岄偅涔圠emon灝辨槸閽堝娓告垙涓撴湁鐨勶紝鍩轟簬紜歡鍔犻熺殑娓告垙妗嗘灦
Flash Action Script 瀵瑰簲鐨勫氨鏄疞emon鐨?a >Squirrel鑴氭湰
FlashIDE 瀵瑰簲鐨勫氨鏄疞emon Composer
Lemon鐨勭洰鏍囧氨鏄2D娓告垙寮鍙戞洿綆鍗曪紝璁╂父鎴忎腑鍏呮弧鏇村鐨勫姩鐢? 璁╂父鎴忓紑鍙戦毦搴﹂檷浣?/p>
The frame buffer blender can now blend alpha channels independent from color-channel blending on render targets. This control is enabled with a new render state, D3DRS_SEPARATEALPHABLENDENABLE.
When D3DRS_SEPARATEALPHABLENDENABLE is set to FALSE (which is the default condition), the render-target blending factors and operations applied to alpha are the same as those defined for blending color channels. A driver needs to set the D3DPMISCCAPS_SEPARATEALPHABLEND cap to indicate that it can support render-target alpha blending. Be sure to enable D3DRS_ALPHABLEND to tell the pipeline that alpha blending is needed.
To control the factors in the alpha channel of the render-target blenders, two new render states are defined as follows:
D3DRS_SRCBLENDALPHA D3DRS_DESTBLENDALPHA
Like the D3DRS_SRCBLEND and D3DRS_DESTBLEND, these can be set to one of the values in the D3DBLEND enumeration. The source and destination blend settings can be combined in several ways, depending on the settings in the SrcBlendCaps and DestBlendCaps members of D3DCAPS9.
The alpha blending is done as follows:
renderTargetAlpha = (alphain* srcBlendOp) BlendOp (alphart* destBlendOp)
Where:
緲昏瘧濡備笅錛?/p>
浣跨敤 D3DRS_SEPARATEALPHABLENDENABLE娓叉煋鐘舵佸彲浠ヨFrame Buffer 娣峰悎鍣ㄥ皢RT涓殑Alpha閫氶亾涓庨鑹查氶亾鍒嗗紑娣峰悎銆?/p>
褰揇3DRS_SEPARATEALPHABLENDENABLE 璁劇疆涓?FALSE錛堥粯璁わ級錛孯T娓叉煋鍙傛暟鍜屾搷浣滀細(xì)璺熼鑹查氶亾涓鏍瘋搴旂敤鍒癆lpha閫氶亾銆?榪欓」鐗規(guī)ч渶瑕佹樉鍗℃敮鎸丏3DPMISCCAPS_SEPARATEALPHABLEND 鐗規(guī)с傝浣忥紝鍦ㄤ箣鍓嶈緗瓺3DRS_ALPHABLEND浠ヤ究鎵撳紑Alpha娣峰悎銆?/p>
RT娣峰悎鍣ㄧ殑Alpha閫氶亾娣峰悎鍥犲瓙娓叉煋鐘舵佸涓嬶細(xì)
D3DRS_SRCBLENDALPHA
D3DRS_DESTBLENDALPHA
鍏惰瀹氫箟鍦?a >D3DBLEND鏋氫婦涓紝D3DRS_SRCBLEND 鍜孌3DRS_DESTBLEND涔熸槸榪欐牱瀹氫箟鐨勩傛潵婧愯壊涓庣洰鏍囬鑹插皢浼?xì)鏈夊緢澶毦l勫悎鏂瑰紡錛屼富瑕佷緷璧栦簬D3DCAPS9涓殑SrcBlendCaps 鍜孌estBlendCaps
Alpha娣峰悎鍏紡濡備笅錛?/p>
renderTargetAlpha = (alphain* srcBlendOp) BlendOp (alphart* destBlendOp)
鍏朵腑錛?/p>
alphain涓鴻緭鍏lpha鍊?/p>
srcBlendOp鏄疍3DBLEND涓殑涓涓販鍚堝洜瀛?/p>
BlendOp鏄?D3DBLENDOP涓殑涓涓販鍚堝洜瀛?/p>
alphart鏄疪T鐨刟lpha鍊?/p>
destBlendOp鏄疍3DBLEND涓殑涓涓販鍚堝洜瀛?/p>
renderTargetAlpha鏄渶鍚庢販鍚堝悗鐨刟lpha鍊?/p>
鏈綆鍗曠殑鏂規(guī)硶鑾繃浜庡垽鏂紶鏍囩偣鏄惁鍦?涓笁瑙掑艦涓備絾鏄緢澶氬垽瀹氭柟娉曢兘鏄湁闂鐨勶紝姣斿璇?/p>
copy鑷狪ndieLib
bool Triangle2D::Inside2( const Vector2& p ) { Vector2 v0 = mP3 - mP1; Vector2 v1 = mP2 - mP1; Vector2 v2 = p - mP1; // Compute dot products float dot00 = Vector2::DotProduct( v0, v0 ); float dot01 = Vector2::DotProduct( v0, v1 ); float dot02 = Vector2::DotProduct( v0, v2 ); float dot11 = Vector2::DotProduct( v1, v1 ); float dot12 = Vector2::DotProduct( v1, v2 ); // Compute barycentric coordinates float invDenom = 1 / (dot00 * dot11 - dot01 * dot01); float u = (dot11 * dot02 - dot01 * dot12) * invDenom; float v = (dot00 * dot12 - dot01 * dot02) * invDenom; // Check if point is in triangle return (u > 0) && (v > 0) && (u + v < 1); }
Google鍑虹殑鏌愪漢浠g爜
float Triangle2D::CrossProduct3(const Vector2& p1,const Vector2& p2, const Vector2& p0 ) { return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y); } bool Triangle2D::Inside( const Vector2& p ) { return (CrossProduct3(mP1,p,mP2)*CrossProduct3(mP3,p,mP2)<0) && (CrossProduct3(mP2,p,mP1)*CrossProduct3(mP3,p,mP1)<0) && (CrossProduct3(mP1,p,mP3)*CrossProduct3(mP2,p,mP3)<0); }
榪?涓柟娉曢兘鏈夌己闄鳳紝褰撶偣鍦ㄤ笁瑙掑艦杈逛笂鏃訛紝灝辨棤娉曞緱鍑恒傚綋鐢ㄥ湪涓涓鏂瑰艦鍒ゆ柇鏃訛紝姝f柟褰腑蹇冪偣灝卞垽瀹氫負(fù)娌℃湁鍦ㄥ叾鍐呴儴錛屾樉鐒舵槸涓涓敊璇?
涔嬪悗錛屽張Google鍑烘煇鍑犱釜澶т緺鐨勭畻娉曞拰鎬濇兂錛岃冭檻浜嗕笅錛屽垽瀹氱偣涓庡洓杈瑰艦閲嶅績鐐圭殑綰挎鏄惁涓庡洓杈瑰艦4鏉¤竟鐩鎬氦錛岀浉浜ゆ椂錛屽叾鍦ㄥ洓杈瑰艦澶栭儴錛屽弽涔嬩害鐒躲?
bool Quadrangle::Inside2( const Vector2& p ) { Vector2 c = Segement2D::GetCrossPoint( mP1, mP3, mP2, mP4 ); return !(Segement2D::Intersect( mP1, mP2, c, p) || Segement2D::Intersect( mP2, mP3, c, p) || Segement2D::Intersect( mP3, mP4, c, p) || Segement2D::Intersect( mP4, mP1, c, p) ); } bool Segement2D::Intersect( const Vector2& p1, const Vector2& p2,const Vector2& p3, const Vector2& p4 ) { float gradab, gradcd, ycptab, ycptcd, interceptX, intercepty; // In order to avoid divisions by zero //if (mP1.y == mP2.y) // mP2.y += 0.0001f; //if (mP1.x == mP2.x) // mP2.x += 0.0001f; //if (seg.mP1.y == seg.mP2.y) // seg.mP2.y += 0.0001f; //if (seg.mP1.x == seg.mP2.x) // seg.mP2.x += 0.0001f; // Calculates the intersection between the two lines gradab = (p1.y - p2.y) / (p1.x - p2.x); gradcd = (p3.y - p4.y) / (p3.x - p4.x); ycptab = p1.y - p1.x * gradab; ycptcd = p3.y - p3.x * gradcd; interceptX = (ycptab - ycptcd) / (gradcd - gradab); intercepty = (ycptab - (gradab * ycptcd) / gradcd) / (1 - gradab / gradcd); // Checking in the intersection is inside the segment if (!((interceptX >= p1.x && interceptX <= p2.x) || (interceptX >= p2.x && interceptX <= p1.x))) return 0; if (!((intercepty >= p1.y && intercepty <= p2.y) || (intercepty >= p2.y && intercepty <= p1.y))) return 0; if (!((interceptX >= p3.x && interceptX <= p4.x) || (interceptX >= p4.x && interceptX <= p3.x))) return 0; if (!((intercepty >= p3.y && intercepty <= p4.y) || (intercepty >= p4.y && intercepty <= p3.y))) return 0; return 1; } Vector2 Segement2D::GetCrossPoint(const Vector2& p1, const Vector2& p2, const Vector2& q1, const Vector2& q2) { //蹇呴』鐩鎬氦姹傚嚭鐨勬墠鏄嚎孌電殑浜ょ偣錛屼絾鏄笅闈㈢殑紼嬪簭孌墊槸閫氱敤鐨? /*鏍規(guī)嵁涓ょ偣寮忓寲涓烘爣鍑嗗紡錛岃繘鑰屾眰綰挎ф柟紼嬬粍*/ Vector2 crossPoint; //姹倄鍧愭爣 float tempLeft = (q2.x - q1.x) * (p1.y - p2.y) - (p2.x - p1.x) * (q1.y - q2.y); float tempRight = (p1.y - q1.y) * (p2.x - p1.x) * (q2.x - q1.x) + q1.x * (q2.y - q1.y) * (p2.x - p1.x) - p1.x * (p2.y - p1.y) * (q2.x - q1.x); crossPoint.x = tempRight / tempLeft; //姹倅鍧愭爣 tempLeft = (p1.x - p2.x) * (q2.y - q1.y) - (p2.y - p1.y) * (q1.x - q2.x); tempRight = p2.y * (p1.x - p2.x) * (q2.y - q1.y) + (q2.x- p2.x) * (q2.y - q1.y) * (p1.y - p2.y) - q2.y * (q1.x - q2.x) * (p2.y - p1.y); crossPoint.y = tempRight / tempLeft; return crossPoint; }
榪欎釜綆楁硶鏁堢巼騫朵笉鏄緢楂橈紝浣嗗浜庤璁″櫒鏉ヨ鏃犳墍璋撲簡錛屽鏋滄湁濂界殑鍑嗙‘綆楁硶錛屽彲浠ヨ璁?/p>