存档

2015年4月 的存档

寰俊寮鍙戯紙鍏級鑷姩鍥炲鍜屽瀹㈡湇寮鍙

2015年4月30日 没有评论



瀹氬埗鐨勬湇鍔

瀵逛簬寰俊鏈嶅姟鍙锋潵璇达紝鏈涓昏鐨勫姛鑳芥槸鎻愪緵鏇村ソ鐨勬湇鍔°傜敤鎴锋洿鏂逛究鐨勬搷浣滐紝浠ュ強鏇村揩鐨勫弽棣堝搷搴斻傝嚜鍔ㄥ洖澶嶅姛鑳斤紝鑳藉澶у箙鍑忓皯浜や簰鏃堕棿鍜屽鏈嶅伐浣滈噺锛屽湪鏈嶅姟鍙锋帹娲诲姩鏃跺挨鍏舵槑鏄俱傚彟澶栧氨鏄湪澶氬鏈嶅姛鑳斤紝杩欎釜灏卞己澶т簡锛岀畝鐩村氨鏄竴涓紒涓歲q鏈嶅姟鍙枫傜洰鍓嶈繕涓嶈閽憋紝涓嶈繃鎴戞劅瑙夋湭鏉ュ彲鑳戒細鍙樻垚涓涓敹璐瑰姛鑳寰俊寮鍙戯紙鍏級鑷姩鍥炲鍜屽瀹㈡湇寮鍙

浣跨敤鍦烘櫙

杩欎袱涓笢瑗胯蛋涓濂楁祦绋嬶紝鎵浠ヨ繖閲屾斁鍦ㄤ竴璧疯浜嗐

鑷姩鍥炲鍔熻兘澶ц嚧鐨勪娇鐢ㄦ儏鏅槸锛岀敤鎴峰彂閫佲滄祦閲忊濓紝鏈嶅姟鍙峰洖澶嶁滀翰锛岄佹祦閲忔椿鍔ㄦ槸xxxxxx: 蹇偣鍑銆愭姠娴侀噺銆 鏉ュ弬鍔犮傗

鑰屽瀹㈡湇搴旇鏄嚜鍔ㄥ洖澶嶇殑涓涓秴闆嗭紝濡傛灉鑷姩鍥炲澶勭悊涓嶄簡锛屽氨瑕佽浆鎺ュ埌瀹㈡湇閭i噷銆

鎶鏈疄鐜

浠庢妧鏈笂璁诧紝杩欎袱涓姛鑳芥槸涔熶竴濂楅昏緫銆傛湇鍔″洖澶嶇敤鎴锋秷鎭紝浣跨敤鐨勬槸缁熶竴鐨勬牸寮忥紝濡傛灉娑堟伅闇瑕佽浆鍒板瀹㈡湇锛岄渶瑕佺粰寰俊鏈嶅姟鍣ㄥ洖澶嶇被浼艰繖鏍风殑娑堟伅浣擄細

 <xml>
     <ToUserName><![CDATA[touser]]></ToUserName>
     <FromUserName><![CDATA[fromuser]]></FromUserName>
     <CreateTime>1399197672</CreateTime>
     <MsgType><![CDATA[transfer_customer_service]]></MsgType>
 </xml>

瀹樻柟鏂囨。璇存槑鏄繖鏍风殑锛

濡傛灉鍏紬鍙峰浜庡紑鍙戞ā寮忥紝鏅氬井淇$敤鎴峰悜鍏紬鍙峰彂娑堟伅鏃讹紝寰俊鏈嶅姟鍣ㄤ細鍏堝皢娑堟伅POST鍒板紑鍙戣呭~鍐欑殑url涓婏紝濡傛灉甯屾湜灏嗘秷鎭浆鍙戝埌澶氬鏈嶇郴缁燂紝鍒欓渶瑕佸紑鍙戣呭湪鍝嶅簲鍖呬腑杩斿洖MsgTypetransfer_customer_service鐨勬秷鎭紝寰俊鏈嶅姟鍣ㄦ敹鍒板搷搴斿悗浼氭妸褰撴鍙戦佺殑娑堟伅杞彂鑷冲瀹㈡湇绯荤粺銆傚叿浣撳彲浠鍙傜収杩欓噷

鍥犳鎴戝仛浜嗚繖鏍风殑璁捐锛屾敹鍒扮敤鎴疯緭鍏ョ殑娑堟伅鍚庯紝棣栧厛鍦ㄦ暟鎹簱鐨勮〃涓鏌ユ槸鍚︽湁鍖归厤鐨勫簲绛旓紝濡傛灉鏈夊垯鐩存帴杩斿洖缁欑敤鎴凤紝鍚﹀垯锛屽氨杩斿洖绫诲瀷涓transfer_customer_service鐨勬秷鎭紝灏嗗叾杞帴鍒板鏈嶉偅杈广

瀹炵幇

protected String getRawText(String key) {
    // 濡傛灉瀵瑰簲鐨凟VENT_KEY鏈変釜鐩稿悓鐨勯厤缃俊鎭紝灏辩洿鎺ヨ浇鍏
    String tmpRaw = getRawByStateDao(key);
    if (tmpRaw != null && tmpRaw.length() > 0) {
        raw = tmpRaw;
    } else {
        raw = "";
    }
    return raw;
}

String getRawByStateDao(String key) {
    //you should get data from db here
}

public String getContextText(String key) {
    // 鍥炲鏂囨湰娑堟伅
    TextMessage textMessage = new TextMessage();
    textMessage.setToUserName(fromUserName);
    textMessage.setFromUserName(toUserName);
    textMessage.setCreateTime(new Date().getTime());
    String contextText = getRawText(key);
    if(contentText.length()>0){
        textMessage.setContent(contentText);
        textMessage.setMsgType("text");
    } else {
        textMessage.setMsgType("transfer_customer_service");
    }
    
    // 灏嗘枃鏈秷鎭璞¤浆鎹㈡垚xml
    String respXml = MessageUtil.messageToXml(textMessage);
    return respXml;
}

澶ц嚧娴佺▼灏辨槸杩欐牱锛屼娇鐢ㄦ椂璋冪敤getContextText鍑芥暟锛屽氨杩斿洖涓涓寘瑁呭ソ鐨勬秷鎭紝璧癏TTP杩旇繕缁欓箙鍘傜殑鏈嶅姟鍣ㄣ

閮ㄧ讲

鍦ㄥ井淇″叕浼楀彿鐨勫悗鍙伴夋嫨娣诲姞鍔熻兘鎻掍欢->澶氬鏈嶃傛坊鍔犲ソ鍔熻兘妯″潡鍚庯紝娣诲姞涓涓鏈嶅伐鍙凤紝涓嬭浇瀹夎瀹㈡埛绔傝繖涓儴缃叉瘮杈冪畝鍗曪紝娌″暐澶у潙銆備笂绾垮悗鎷夌潃瀹㈡湇浜哄憳锛岀粰鍋氫釜绠鍗曠殑浣跨敤鍩硅灏辨垚浜嗐

濡傛灉浣犺寰楄繖绡囨枃绔犲浣犳湁甯姪锛屽彲浠ラ『鎵嬬偣涓锛屼笉浣嗕笉浼氬枩褰撶埞锛岃繕鑳借鏇村浜鸿兘鐪嬪埌瀹… 寰俊寮鍙戯紙鍏級鑷姩鍥炲鍜屽瀹㈡湇寮鍙

分类: 未分类 标签:

LaTex 缂栬緫鍏紡 蹇熶笂鎵

2015年4月29日 没有评论

LaTex 鍏紡

鍦ㄥ涔犳暟瀛︾煡璇嗙殑鏃跺欙紝鍦ㄨ绠楁満涓婂啓鍏紡鏄瘮杈冨ご鐤肩殑浜嬫儏銆備娇鐢↙aTex鍙互鍦ㄤ竴瀹氱▼搴︿笂缂撹В铔嬬柤鐨勭姸鍐碘斺旀渶璧风爜鐪嬭捣鏉ヨ繕鎸烘媺椋庛備笅闈㈡垜浠竴璧风湅涓涓嬪畠鐨勫熀鏈敤娉曘

閫氱敤璇硶

浣跨敤鍙$$鍥翠綇琛ㄨ揪寮忥紝鍙互灞呬腑鏄剧ず銆

绌烘牸

闇瑕佷娇鐢 /qquad,/quad,a/b,搴旇鏄崰浣嶇鍜屽彉閲忎箣闂撮渶瑕佹湁{}鐩搁殧銆

$$ C_{1} /qquad {C_2} $$

$$ C_{1} /quad {C_2} $$

$$ C_{1} / {C_2} $$

C1C2

C1C2

C1 C2

涓嬫爣

浣跨敤绗﹀彿_

$$ C_{1} + {C_2}$$

$$C_{m,n}$$

C1+C2

Cm,n

涓婃爣

浣跨敤绗﹀彿^

$$ c_{1}^{2}=a^{2}+b^{2} $$

c21=a2+b2

甯岃厞瀛楁瘝

$$/lambda,/xi,/pi,/mu,/Phi,/Omega,/alpha, /beta, /gamma,/Gamma, /Delta $$

,,,,,,,,,,

鍊兼瘮杈冪

/eq/geq/neq

$$e^{x^2} /neq {e^x}^2$$
$$ 3>2$$

ex2ex2


3>2

骞虫柟鏍

浣跨敤/sqrt/surd

$$/sqrt{x+y}$$
$$/sqrt[3]{x^{2}+y}$$
$$/surd[x^2 + y^2] $$

x+y


x2+y3


[x2+y2]

姘村钩绾

/overline,/underline

$$/overline{m+n} /quad /underline{m+n}$$

m+nm+n

姘村钩鎷彿

/overbrace/underbrace

$$ /underbrace{a+b+/cdots+z}_{26}$$

a+b++z26

閲嶉煶鍙

/widetilde/widehat

$$y'=3/widetilde a$$

y=3a

鍚戦噺

/overrightarrow/overleftarrow

$$/overrightarrow {AC} = /overrightarrow {AB} +/overrightarrow {BC} $$ 

AC=AB+BC

鍦嗙偣

/cdot, /cdots,/vdot,/ddot

$$ a=b /cdot c $$

a=bc

鍑芥暟鍚

/arccos /cos /csc /arcsin /cosh /deg /arctan /cot /det /arg /coth /dim /sinh /sup /tan

/[/lim_{x /rightarrow 0} /frac{/sin x}{x}=1/]

/exp /ker /limsup /min /gcd /lg /ln /Pr /hom /lim /log /sec /inf /liminf /max /sin 

/tanh 

渚嬪锛

limx0sin(x+y)

鏁板绗

/mathbf

$$ x^{2} /geq 0/qquad /textrm{for all }x/in/mathbf{R} $$
$$x^{2} /geq 0/qquad /textrm{for all }x/in/mathbb{R} $$

x20for all xR


x20for all x

鍒嗘暟

/frac{}{} 鎴栬呯‖鍐

$$/sin /alpha = /frac{a}{c} $$
$$x^{1/2} $$

sin=ac


x1/2

浜岄」绯绘暟

{... /choose ...}{... /atop ...}銆傜浜屼釜鍛戒护涓庣涓涓懡浠ょ殑杈撳嚭鐩稿悓,鍙槸娌℃湁鎷彿銆

$${n/choose m} /qquad {x/atop y+2}$$

(nm)xy+2

鍓嶇紑绗﹀彿

/int,/sum,/prod

$$ {/int_{0}^{/frac{/pi}{2}}} $$
$$ /sum_{i=1}^{n}$$
$$/prod_/epsilon$$

20


i=1n


杞箟绗﹀彿

鏈夋椂淇濈暀瀛楅渶瑕佸姞鍏/鏉ヨ繘琛岃浆涔

$${a,b,c}/neq/{a,b,c/}$$

a,b,c{a,b,c}

鎷彿灞傛

姝g‘鐨勬嫭鍙峰ぇ灏/left/right銆傚鏋滃皢鍛戒护 /left 鏀惧湪寮鍒嗛殧绗﹀墠,TEX浼氳嚜鍔ㄥ喅瀹氬垎闅旂鐨勬纭ぇ 灏忋傛敞鎰忓繀椤荤敤瀵瑰簲鐨勫彸鍒嗛殧绗 /right 鏉ュ叧闂瘡涓涓乏鍒嗛殧绗 /left,骞 涓斿彧鏈夊綋杩欎袱涓垎闅旂鎺掑湪鍚屼竴琛屾椂澶у皬鎵嶄細琚纭‘瀹氥

$$ 1+/left(/frac {1}{1-x^2}/right) ^3 /qquad 1+(/frac {1}{1-x^2}) ^3$$

1+(11x2)31+(11x2)3


鍙﹀涔熷彲浠ユ墜宸ユ寚鍑烘嫭鍙峰ぇ灏忥紝浣跨敤/big,/Big/bigg

$$ /Big( (x+y) (x-y) /Big)^{2} $$

$$/big(/Big(/bigg(/Bigg($$ 
$$/big/}/Big/}/bigg/}/Bigg/} $$
$$/big/|/Big/|/bigg/|/Bigg/| $$

((x+y)(xy))2

((((


}}}}


鍨傜洿瀵归綈

浣跨敤array鍛戒护锛屽苟//鍛戒护鏉ュ垎琛屻傛敞鎰忚浆涔

$$/mathbf{X} =
	/left( /begin{array}{ccc}
	x/_{11} & x/_{12} & /ldots ///
	x/_{21} & x/_{22} & /ldots ///
	/vdots & /vdots & /ddots
	/end{array} /right) $$

X=x_11 x_21 x_12x_22

杞浇璇锋敞鏄庡嚭澶: http://blog.csdn.net/fansongy/article/details/45368915

分类: 未分类 标签:

How to disable logs from external APIs in Android

2015年4月29日 没有评论

I have a Cocos2d-x project and I wish to disable all the logs from the external JARs that I’ve attached, from Flurry to Pushwoosh, there are many external API’s. Is there any way to remove the logs for these?

I tried setting,
android:debuggable="false"
in the AndroidManifest.xml, but no use,

Also in proguard-project.txt, I set,

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** w(...);
    public static *** v(...);
    public static *** i(...);
}

But still in the Release build, the logs are being seen. Any help on this would be great!

分类: stackoverflow精选, unity3d 标签:

寰俊寮鍙戯紙鍏級寰俊缃戦〉鎺堟潈( Oauth )閫氳繃Oauth鑾峰彇鐢ㄦ埛淇℃伅

2015年4月28日 没有评论



缃戦〉鎺堟潈

寰俊寮鍙戞椂锛屾垜浠绘槸鎯宠灏藉彲鑳藉鐨勬椿鍔ㄧ敤鎴风殑淇℃伅銆備絾寰俊瀹樻柟鍜岀敤鎴锋湰韬紝鍙堜笉鎯虫毚闇茶繖浜涗俊鎭傛悶鏉ユ悶鍘伙紝灏卞嚭鐜颁簡寰堝濂囧舰鎬姸鐨勮鍒欏拰浜や簰鏂瑰紡銆傚井淇$綉椤垫巿鏉冨氨鏄叾涓箣涓锛屽畠鍙互涓烘垜浠彁渚涜幏鍙栫敤鎴稯penID閫斿緞銆傚仛鍒版倓鎮勭殑杩涙潙锛屽紑鏋殑涓嶈銆

娴佺▼璇存槑

杩欎釜娴佺▼鍏跺疄涔熶笉澶嶆潅銆傞鍏堢敤鎴疯闂 https://open.weixin.qq.com/connect/oauth2/authorize 杩欎釜杩炴帴锛岄摼鎺ュ悗闈㈠甫鐫appid锛屾垜浠璺宠浆鐨勯摼鎺ュ悕绉帮紝浠ュ強涓涓嚜瀹氫箟鍙橀噺銆傚綋鐢ㄦ埛璁块棶鏃讹紝寰俊鏈嶅姟鍣ㄤ細璺宠浆鍥炴垜浠殑閾炬帴锛屽苟灏嗙敤鎴风殑openID浼犲洖鏉ャ傚畼鏂硅鏄庡涓嬶細

鍦ㄧ‘淇濆井淇″叕浼楄处鍙锋嫢鏈夋巿鏉冧綔鐢ㄥ煙锛坰cope鍙傛暟锛夌殑鏉冮檺鐨勫墠鎻愪笅锛堟湇鍔″彿鑾峰緱楂樼骇鎺ュ彛鍚庯紝榛樿鎷ユ湁scope鍙傛暟涓殑snsapi_base鍜宻nsapi_userinfo锛夛紝寮曞鍏虫敞鑰呮墦寮濡備笅椤甸潰锛

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

鑻ユ彁绀衡滆閾炬帴鏃犳硶璁块棶鈥濓紝璇锋鏌ュ弬鏁版槸鍚﹀~鍐欓敊璇紝鏄惁鎷ユ湁scope鍙傛暟瀵瑰簲鐨勬巿鏉冧綔鐢ㄥ煙鏉冮檺銆瀹樻柟閾炬帴鍦ㄨ繖閲

褰撶劧闅忛殢渚夸究缁欎綘鐢ㄦ埛鐨刼penID鏄湁鏉′欢鐨勶細淇濇姢璐逛氦涓涓嬨傚疄鍚嶈璇佸皯涓嶄簡婊淬

鎺ュ彛璁捐

鏈変簡杩欎釜鎴戜滑灏卞彲浠ヤ娇鐢ㄥ緢澶氭巿鏉冮〉闈簡銆傚鏋滀綘鍙鐢ㄦ埛鐨刼penID锛屾槸涓嶄細鍑虹幇閭d釜鎭跺績浜虹殑缁胯壊鐣岄潰鐨勩傚鏋滅敤鎴锋湭鍏虫敞浣犵殑鏈嶅姟鍙凤紝骞朵笖浣犺繕鎯宠鏄电О鍜屽ご鍍忥紝灏变細鍑虹幇閭d釜鈥滄垜鏄醇鈥濈殑缁胯壊椤甸潰銆備笂闈㈠啓鏄庝簡瑕佹樀绉板拰澶村儚鐨勬巿鏉冿紝铏界劧鎴戜篃鐭ラ亾娌″暐鍚庢嫑锛屼絾鍑℃槸鍑虹幇杩欎釜椤甸潰鐨勶紝鎴戦兘姣笉鐘硅鲍鐨勫叧鎺変簡 寰俊寮鍙戯紙鍏級寰俊缃戦〉鎺堟潈( Oauth )閫氳繃Oauth鑾峰彇鐢ㄦ埛淇℃伅

涓轰簡閬垮厤璁捐寰堝涔变竷鍏碂鐨凮auth鎺ュ彛锛屾垜寤鸿鍙娇鐢ㄤ竴涓帴鍙o紝鐒跺悗閫氳繃state鐨勫兼潵鍋氶昏緫鍒ゆ柇鐨勬爣鍑嗭紝鏇存敼绋嬪簭杩斿洖鐨勯〉闈

瀹炵幇

棣栧厛杩樻槸閭e彞璇濓紝瀹炲悕璁よ瘉锛屾病杩欎釜锛屾帴鍙e暐鐨勫厤璋堛

鐒跺悗缂栧啓涓涓粺涓鐨凮auth鎺ュ彛銆

@RequestMapping(value="/authIntf")
public void authLogin(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws IOException{
    String redirectURL="http://blog.csnd.net/fansongy";
    String code = request.getParameter("code");
    if(code == null ||code.length() == 0){
        logger.error("can't get param code from auth request!");
    }
    String actionType =request.getParameter("state");
    if(actionType == null || actionType.length() == 0){
        logger.error("can't get param code from auth request!");
    }
    String userOpenId = wxAuthService.getUserOpenID(code);
    if(userOpenId != null && userOpenId.length()>0) {
        redirectURL = loginAndJumpBack(userOpenId, actionType);
    }else {
        logger.info("Can't find openId in authLogin");
    }
    response.sendRedirect(redirectURL);
}

public String loginAndJumpBack(String fromUserName, String actionType) {
    //your logic
    return "http://www.baidu.com";
}

閮ㄧ讲

鍦ㄥ井淇℃湇鍔″彿鐨勫悗鍙拌缃悎娉曠殑鍩熷悕锛屽叿浣撳仛娉曞彲浠ュ弬鑰冨畼鏂规枃妗o細

鍦ㄥ井淇″叕浼楀彿璇锋眰鐢ㄦ埛缃戦〉鎺堟潈涔嬪墠锛屽紑鍙戣呴渶瑕佸厛鍒板叕浼楀钩鍙板畼缃戜腑鐨勫紑鍙戣呬腑蹇冮〉閰嶇疆鎺堟潈鍥炶皟鍩熷悕銆傝娉ㄦ剰锛岃繖閲屽~鍐欑殑鏄煙鍚嶏紙鏄竴涓瓧绗︿覆锛夛紝鑰屼笉鏄疷RL锛屽洜姝よ鍕垮姞http://绛夊崗璁ご锛

鏈缁堥儴缃叉椂锛屽缓璁厛鏇存柊鏈嶅姟锛岀劧鍚庡湪寰俊涓氳繃閾炬帴鐨勬柟寮忔祴璇曪紝娴嬭瘯瀹屾垚鍚庯紝鍦ㄦ坊鍔犲井淇″叆鍙o紝姣斿鑿滃崟鐐瑰嚮浜嬩欢銆

濡傛灉浣犺寰楄繖绡囨枃绔犲浣犳湁甯姪锛屽彲浠ラ『鎵嬬偣涓锛屼笉浣嗕笉浼氬枩褰撶埞锛岃繕鑳借鏇村浜鸿兘鐪嬪埌瀹… 寰俊寮鍙戯紙鍏級寰俊缃戦〉鎺堟潈( Oauth )閫氳繃Oauth鑾峰彇鐢ㄦ埛淇℃伅

分类: 未分类 标签:

UNITY 2015 大会 观展记录

2015年4月19日 没有评论



题记

折折腾腾的晃了一天,感觉这次会议干货还是挺多的。听了不少有的没的,记录一下,走过撸过不要错过。所谓无图无真相,先上一张跟Unity大叔的合影:

UNITY 2015 大会 观展记录

上午主会

开场高富帅CEO出来各种炫特效,加入了灯光预计算啦,使用了一门IL2CPP的脚本语音啦,烘培可以在内建Cloud上啦,Unity ADS广告平台老流弊啦,还来了个倍儿有面子的Demo,估计过两天网上就能找到。

UNITY 2015 大会 观展记录

接着是REPUBLIC的开发团队分享他们使用Unity5的开发经验。首先我玩过这个游戏,与《看门狗》很像,各种监视器计算机电源门禁跳来跳去亮瞎眼。具体犀利不犀利我不太好评判,因为只玩了一天,就去打炉石了…… 不过肯定比国产游戏强就是了。最后这个公司做了一个的Demo放到Asset Store上了,下载地址在这里 ,一般人我不告诉。

UNITY 2015 大会 观展记录

然后上来了一对“相声演员”。技术人员粘了一个大胡子,一个老外当捧哏,俩人show了一下新版本的特性,有种误入cocoChina开发者大会的错觉。不管怎样,东西看起来确实不错,手机上的效率有待未来验证。回头有时间好好研究一下。

 UNITY 2015 大会 观展记录

然后女神上台了,每年Unity大会都主要是来看她的,谁有她联系方式,请一定要告诉我,啊,不是,我是来看新的技术的。上来问了一句大家早上好,从此进入中国人的场子。

 UNITY 2015 大会 观展记录

接着来自宝岛台湾的艺人向大会主席台走来,他载歌载舞,演绎了一段亦真亦幻的…Duang….Duang….的特效。

 http://v.youku.com/v_show/id_XOTM3NTc2MjUy.html  PS:CSDN不能上视频啊…..

之后符总上台,然后我就被好基友叫出去了,真的特别巧

——————————————技术党的分割线,看热闹党速速退去——————————————–

全局光照

这版最重要的东西是全局光照系统,自然要去听老外讲这个了。 我的理解,新的光照系统有三部分组成:

Enlighten + Reflection Probes + Screen Space Reflection

Enlighten

Enlighten是全局的基础光照,大面上的效果基本靠它扛。它做不来动态的计算,因此主场景必须是Static。另外动态的物品比如扔出去个球之类的,球上的弹射光与球的自发光,这东西也做不了。具体为什么?它又是什么原理?我给你个图你自己体会一下: 

UNITY 2015 大会 观展记录

Reflection Probes

动的东西不能搞反光岂不是很挫?于是就有了 Reflection Probes.这个东西就专干反射这种事的。各种动,各种反射,各种贴图,各种过渡,调调调,调来美术妹子吹捧,弹弹弹,弹走光源鱼尾纹。

Screen Space Reflection

最后你要是还是对某些局部的反射效果不满意,你就用这个技术,补个妆,把画面弄的更有逼格。

当然,具体啥样我也没试过,掉坑里表骂我~

The Matrix

这个是Unity大中华区新上一个产品,叫 “黑客帝国”,然后它是用来测试其他应用的,其实我感觉有点怪怪的。因为没听全,也太不知道咋回事,应该是4月27号上,看界面是各种炫,性能指标老多了。据说还是真人测,不知道量大了能不能抗住啊,为这些兄弟捏把汗。网址在这里 趁着现在免费赶紧去注册,我觉得早晚得要钱,那可都是人肉测试啊。

资源管理

GUID

Unity3d的资源文件总是各种坏有木有。其实是GUID的问题。每当文件被替换,且Unity编辑器没打开,GUID都会重新生成,然后文件就丢了。

另外,我们都知道场景文件可以搞成text的。它遵循 YAML 标准,在Unity的手册中有详细的记录哦,点击这里 可以查看。

最后就是有个名为binary2text的工具,Mac下的目录为/Contents/Tools/,它可以将二进制的Unity文件转换为人能看懂的格式。有了它再也不担心看不懂生成的“垃圾文件”了。

当然,我也知道我之前为啥项目总坏了。我之前使用Github管理项目,都不带Library目录一起玩,这个目录下面放了好多项目文件管理的Key-Value文件,这东西都不带,不丢东西才怪呢。其中有个guidmapper它保存了全项目的文件GUID映射。meatdata文件夹下就是这些文件,它以开头两个字母做文件夹名字,存放了项目中所有的.meta文件。

内存管理

内存管理是老生常谈了,记录一下吧:

  • 避免频繁的分配内存
  • reuse临时的buffer
  • 纯数据用struct替代class (struct分配到栈上,不走GC)
  • "in-between"scene (切换场景用一个过渡场景,避开GC峰值)
  • 事先加载,然后 enable/disable
  • Object Pool (PoolManager插件)

数据热更新

数据热更新,将纯数据与程序逻辑分离,每个资源都有对应的wrapper,将资源初始化后,用程序绑脚本。当然它不如某uLua逆天,我觉得也可以接受。最后有一点要知道,AddComponent(String)的查找范围是当前域,AddComponent(Type)的查找范围是整个域。

FPS Create

讲这场的是个加拿大的老外,现场做了一个简单的FPS游戏,从创建新项目,导入skyBox,增加Enlighten,增加灯泡的shader,添加Reflection,烘培,制作动画控制脚本(继承自stateMachineBehaviour),制作声音混响控制,一气呵成,当之无愧的成为本届大会最有价值的实践。不过,没PPT,我也光顾听了,啥也没记,现在也说不太明白了…… 另外,值得一提的是,这场的同传妹子老有意思了,时不时来一句,“把这个GameObject扥出来”,一股国际化的方言味,给我逗完了都,翻译的挺好,希望以后还能碰到。

以上就是这次观会的总结了,总得说来这次会议干货挺多,值得一听。明天还有一天,不过由于是礼拜一,得上班,就听不了了啊。有人说,这也算增加业务能力,咋公司不给假?我能吐槽说,我现在被卖到一个互联网金融公司,去做网站和手机APP偶尔写写微信服务号么…… 算啦,不提这些,最后上个在现场照的Unity娘,华丽的结束本文:

UNITY 2015 大会 观展记录

如果你觉得这篇文章对你有帮助,可以顺手点个,不但不会喜当爹,还能让更多人能看到它… UNITY 2015 大会 观展记录

分类: 未分类 标签:

Cocos2d-js: Custom TTF font won't display in Android

2015年4月12日 没有评论

I define the font resources with

var res = {
   indieflower_ttf: {type:"font", name:"IndieFlower", srcs:["res/fonts/IndieFlower.ttf"]},
}

And create a TTF label with:

var text = cc.LabelTTF.create(text, "IndieFlower", bubble.fontsize, cc.size(60,0),cc.TEXT_ALIGNMENT_LEFT, cc.VERTICAL_TEXT_ALIGNMENT_TOP);

and will display is ok in Firefox and Chrome, but will show the default font (Arial) on Android.

What else is to do? I checked the thread Cocos2d-js: How to use a custom ttf font on android devices?, but it doesn’t help.

The problem is, that the native platforms need the full path of the ttf font, while the html platform needs the font name. I got two solutions from the cocos2d-x forum:

  1. Use bitmap fonts. (Yes … but I wanted to have ttf)

  2. Code it:

In the resource file I have now:

var res = {
    indieflower_ttf: {type:"font", name:"IndieFlower", srcs:["res/fonts/IndieFlower.ttf"]},
}

Then a helper function:

var _b_getFontName = function(resource) {
    if (cc.sys.isNative) {
        return resource.srcs[0];
    } else {
        return resource.name;
    }
}

And to create a label:

var text = cc.LabelTTF.create("text", _b_getFontName(res.indieflower_ttf), 48, cc.size(300,0),cc.TEXT_ALIGNMENT_CENTER, cc.VERTICAL_TEXT_ALIGNMENT_TOP);
分类: stackoverflow精选, unity3d 标签:

使用 sass/scss 编写CSS 快速上手

2015年4月9日 没有评论

Why Scss

CSS不是一种编程语言,它只是个配置文件,并没有生命。但我等大程序  怎么能容忍自己写出来的东西不能动态变化,不能封装继承,不能xxoo呢,于是就有了css预处理的概念。即,写是一套,用是一套。Scss是css预处理的一个选择,它依托于Ruby,算是逼格比较高的。相似的还有Less等,语言优劣之争意义不大,用好一个其他也是大同小异。

安装

Mac上自带Ruby,直接运行:

gem install sass

安装对应模块,然后可以使用:

sass --watch style.scss:style.css

命令来监视style.scss,当它有更改时,会自动编译成style.css。

友情提示: 我运行gem时完全不动,还以为是掉网了。后来听说是我大GFW威武,可以将源更改为x宝的服务器来解决:

$ gem sources -l
$ gem sources --remove https://rubygems.org/  
$ gem sources -a http://ruby.taobao.org/
$ gem sources -l

//然后我顺手更新了一下Ruby的版本
$ sudo gem update --system

经过上面的折腾,顺利安装sass 使用 sass/scss 编写CSS 快速上手

常用语法

变量

//定义
$magin : 30px; //px
$blue : #1875e7; //color
$side : left; //str Usage: boder-#{$side}-radius

所有的数字类型的变量都可以进行相应的计算。

嵌套

nav {
    ul {...}
    border : { //注意冒号 相当于树形属性 会编译成 border-color:red
        color : red;
    }
    a {
        &:hover { color :$blue;} //&表示引用上层 会编译成 a:hover{...}
    }
}

注释

标准的CSS注释 /* comment */ ,会保留到编译后的文件。

单行注释 // comment,只保留在SASS源文件中,编译后被省略。

在/*后面加一个感叹号,表示这是”重要注释”。即使是压缩模式编译,也会保留这行注释,通常可以用于声明版权信息。

继承

使用@extend可以继承相应的css:

.class1 {
    border:1px solid #ddd;
}

.class2 {
    @extend .class1;
    border-color: green;
}

写的时候要注意顺序,编译时,css是不会调顺序的,谁先谁后得想好了。

Mixin

这个是一个函数与宏的私生子。实现像函数,使用像宏。关键词为@mixin和@include

@mixin left($color, $value:10px) {
    color:$color;
    margin-left:$value;
}

.mydiv {
    @include left($blue,15px);
}

颜色处理函数

lighten(#cc3, 10%) // #d6d65c
darken(#cc3, 10%) // #a3a329
grayscale(#cc3) // #808080
complement(#cc3) // #33c

$linkColor: #08c;
a {
    text-decoration:none;
    color:$linkColor;
    &:hover{
      color:darken($linkColor,10%);
    }
}

用这个方法就能制作一个链接变灰的效果

引入文件

@import “style2.css”;

逻辑编译

想要真正的动起来,就得有判断啦,循环啦常规流程函数。

@if可一个条件单独使用,也可以和@else结合多条件使用

$type: monster;
p {
  @if $type == ocean {
    color: blue;
  } @else if $type == matador {
    color: red;
  } @else if $type == monster {
    color: green;
  } @else {
    color: black;
  }
}

for循环有两种形式,分别为:@for $var from <start> through <end>@for $var from <start> to <end>。$i表示变量,start表示起始值,end表示结束值,这两个的区别是关键字through表示包括end这个数,而to则不包括end这个数。

@for $i from 1 through 3 {
  .item-#{$i} { width: 2em * $i; }
}

each语法为:@each $var in <list or map>。其中$var表示变量,而list和map表示list类型数据和map类型数据。

$animal-list: puma, sea-slug, egret, salamander;
@each $animal in $animal-list {
  .#{$animal}-icon {
    background-image: url('/images/#{$animal}.png');
  }
}

$headings: (h1: 2em, h2: 1.5em, h3: 1.2em);
@each $header, $size in $headings {
  #{$header} {
    font-size: $size;
  }
}

sublime 分页

其实这个也不能算是Scss的知识了,只不过是用到它更方便一些。Sublime可以左右分屏,我们可以将源文件放在左侧的窗口中编译后的放在右侧,方便我们做检查。Mac上的快捷键比较变态:

cmd+option+ctrl+2

左右移动使用

cmd+shift+[

如果你觉得这篇文章对你有帮助,可以顺手点个,不但不会喜当爹,还能让更多人能看到它… 使用 sass/scss 编写CSS 快速上手

分类: 基础知识, 未分类 标签:

Swift Version of Cocos2d Code : sprite1.colorRGBA

2015年4月9日 没有评论

I used below cocos2d code and worked:

CCSprite *sprite1 = [[CCSprite alloc] init];
sprite1.position = ccp(SW*0.1f, SH*0.82f);
sprite1.normalMapSpriteFrame = normalMap;
sprite1.effect = glass;
sprite1.colorRGBA = [CCColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.0f];

Now tried to port it to Swift, but getting error for colorRGBA last line. Help me to get right code.

    var sprite1 = CCSprite.node() as CCSprite
    sprite1.position = ccp(SW*0.1, SH*0.82);
    sprite1.normalMapSpriteFrame = normalMap;
    sprite1.effect = glass;
    sprite1.colorRGBA =  ______ ?

Just created a new project with SpriteBuilder in Swift, tried this and all worked:

var sprite = CCSprite()    
sprite.colorRGBA = CCColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)

Maybe you need to look at official documentation or this answer about bridging headers? They will help you to use Objective-C classes in Swift.

I did not test this…but you can try

sprite1.colorRGBA =  UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0) 
分类: stackoverflow精选, unity3d 标签:

如何修改新建脚本模板-ScriptTemplates(Unity3D开发之十五)

2015年4月9日 没有评论

猴子原创,欢迎转载。转载请注明: 转载自Cocos2Der-CSDN,谢谢!
原文地址: http://blog.csdn.net/cocos2der/article/details/44957631

unity添加新脚本的时候,没有版权文件头信息,主要是没有脚本创建人的姓名,在项目开发中,如果想知道这个脚本是谁写的,呼来唤去搞半天才发现是自己写的!!!

用习惯了xcode,所以准备给unity的新建脚本添加一个信息头内容。

Unity自己就有新建脚本模板文件,但是这个文件里面的预定义key很少,不够咱们使用。所以需要自己添加几个key。然后在新建脚本的时候替换这个几个key为对应的内容。

一、修改模板文件

打开模板文件 Unity.app/Contents/Resources/ScriptTemplates/81-C# Script-NewBehaviourScript.cs.txt
修改为:

//
//  #SCRIPTNAME##FILEEXTENSION#
//  #PROJECTNAME#
//
//  Created by #SMARTDEVELOPERS# on #CREATIONDATE#.
//
//

using UnityEngine;
using System.Collections;

public class #SCRIPTNAME# : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }

}

上面的就是版权头信息,新建的脚本就这下面的效果了:

//
//  TestClass.cs
//  DomoJump
//
//  Created by YanghuiLiu on 04/09/2015.
//
//

using UnityEngine;
using System.Collections;

public class TestClass : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }

}

二、添加Editor脚本,用来解析上面我们自己添加的key

//
//  HEScriptKeywordReplace.cs
//  HEUnityExtensionLib
//
//  Created by YanghuiLiu on 04/09/2015.
//
//

using UnityEngine;
using UnityEditor;
using System.Collections;

public class HEScriptKeywordReplace : UnityEditor.AssetModificationProcessor {
    public static void OnWillCreateAsset ( string path ) {
        path = path.Replace(".meta", "");
        int index = path.LastIndexOf(".");
        string file = path.Substring(index);
        if (file != ".cs" && file != ".js" && file != ".boo") return;
        string fileExtension = file;

        index = Application.dataPath.LastIndexOf("Assets");
        path = Application.dataPath.Substring(0, index) + path;
        file = System.IO.File.ReadAllText(path);

        file = file.Replace("#CREATIONDATE#", System.DateTime.Now.ToString("d"));
        file = file.Replace("#PROJECTNAME#", PlayerSettings.productName);
        file = file.Replace("#SMARTDEVELOPERS#", PlayerSettings.companyName);
        file = file.Replace("#FILEEXTENSION#", fileExtension);

        System.IO.File.WriteAllText(path, file);
        AssetDatabase.Refresh();
    }
}

三、设置PlayerSettings的属性

点击Edit/Project Settings/Player,修改Company Name为所需要的名字。

OK,你也可以自己根据需求自己修改了。

分类: unity3d 标签: