±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÍøÂ磬±¾ÎÄÖ÷ÒªÊÇÒÔLayaAirÒýÇæÎªÀý£¬Í¨¹ý´úÂëʾÀýÏêϸ²ûÊöÈçºÎÀûÓÃÒýÇæ¶ÔHTML5×÷³öÐÔÄܵļ«ÖÂÓÅ»¯¡£ |
|
HTML5×÷ΪÐÂÐËÁìÓòÔ½À´Ô½ÈÈ¡£È»¶øÔÚÒÆ¶¯É豸Ӳ¼þÐÔÄÜÈõÓÚPCµÄ±³¾°Ï£¬¶ÔÐÔÄܵÄÐèÇóÏԵøüÎªÖØÒª£¬¶øHTML5ÐÔÄÜÓÅ»¯Ç°ÓëÓÅ»¯ºóÓÐ׿«´óµÄ²î±ð£¬ÈçºÎÓÅ»¯²ÅÄÜÌá¸ßÐÔÄÜ£¬¶Ô´ËÊìÖªµÄÈ˺ÜÉÙ¡£±¾ÎÄÒÔLayaAirÒýÇæÎªÀý£¬Í¨¹ý´úÂëʾÀýÏêϸ²ûÊöÈçºÎÀûÓÃÒýÇæ¶ÔHTML5×÷³öÐÔÄܵļ«ÖÂÓÅ»¯¡£
Ö÷Ìâ°üÀ¨£º
´úÂëÖ´Ðлù±¾ÔÀí
»ù×¼²âÊÔ
ÄÚ´æÓÅ»¯
ͼÐÎäÖȾÐÔÄÜ
¼õÉÙCPUʹÓÃÁ¿
ÆäËûÓÅ»¯²ßÂÔ
µÚ1½Ú£º´úÂëÖ´Ðлù±¾ÔÀí
LayaAirÒýÇæÖ§³ÖAS3¡¢TypeScript¡¢JavaScriptÈýÖÖÓïÑÔ¿ª·¢£¬È»¶øÎÞÂÛÊDzÉÓÃÄÄÖÖ¿ª·¢ÓïÑÔ£¬×îÖÕÖ´ÐеͼÊÇJavaScript´úÂë¡£ËùÓп´µ½µÄ»Ãæ¶¼ÊÇͨ¹ýÒýÇæ»æÖƳöÀ´µÄ£¬¸üÐÂÆµÂÊÈ¡¾öÓÚ¿ª·¢ÕßÖ¸¶¨µÄFPS£¬ÀýÈçÖ¸¶¨Ö¡ÆµÂÊΪ60FPS£¬ÔòÔËÐÐʱÿ¸öÖ¡µÄÖ´ÐÐʱ¼äΪÁùÊ®·ÖÖ®Ò»Ã룬ËùÒÔÖ¡ËÙÔ½¸ß£¬ÊÓ¾õÉϸоõÔ½Á÷³©£¬60Ö¡ÊÇÂúÖ¡¡£
ÓÉÓÚʵ¼ÊÔËÐл·¾³ÊÇÔÚä¯ÀÀÆ÷ÖУ¬Òò´ËÐÔÄÜ»¹È¡¾öÓÚJavaScript½âÊÍÆ÷µÄЧÂÊ£¬Ö¸¶¨µÄFPSÖ¡ËÙÔÚµÍÐÔÄܽâÊÍÆ÷ÖпÉÄܲ»»á´ïµ½£¬ËùÒÔÕⲿ·Ö²»ÊÇ¿ª·¢ÕßÄܹ»¾ö¶¨µÄ£¬¿ª·¢ÕßÄÜ×÷µÄÊǾ¡¿ÉÄÜͨ¹ýÓÅ»¯£¬ÔڵͶËÉ豸»òµÍÐÔÄÜä¯ÀÀÆ÷ÖУ¬ÌáÉýFPSÖ¡ËÙ¡£
LayaAirÒýÇæÔÚÿ֡¶¼»áÖØ»æ£¬ÔÚÐÔÄÜÓÅ»¯Ê±£¬³ýÁ˹Ø×¢Ã¿Ö¡Ö´ÐÐÂß¼´úÂë´øÀ´µÄCPUÏûºÄ£¬»¹ÐèҪעÒâÿ֡µ÷ÓûæÍ¼Ö¸ÁîµÄÊýÁ¿ÒÔ¼°GPUµÄÎÆÀíÌá½»´ÎÊý¡£
µÚ2½Ú£º»ù×¼²âÊÔ
LayaAirÒýÇæÄÚÖõÄÐÔÄÜͳ¼Æ¹¤¾ß¿ÉÓÃÓÚ»ù×¼²âÊÔ£¬ÊµÊ±¼ì²âµ±Ç°ÐÔÄÜ¡£¿ª·¢Õß¿ÉÒÔʹÓÃlaya.utils.StatÀ࣬ͨ¹ýStat.show()
ÏÔʾͳ¼ÆÃæ°å¡£¾ßÌå±àд´úÂëÈçÏÂÀýËùʾ£º
Stat.show(0,0);
//AS3µÄÃæ°åµ÷ÓÃд·¨
Laya.Stat.show(0,0); //TSÓëJSµÄÃæ°åµ÷ÓÃд·¨ |
CanvasäÖȾµÄͳ¼ÆÐÅÏ¢£º

WebGLäÖȾµÄͳ¼ÆÐÅÏ¢£º

ͳ¼Æ²ÎÊýµÄÒâÒ壺
FPS£º
ÿÃë³ÊÏÖµÄÖ¡Êý(Êý×ÖÔ½¸ßÔ½ºÃ)¡£
ʹÓÃcanvasäÖȾʱ£¬ÃèÊö×Ö¶ÎÏÔʾΪFPS(Canvas)£¬Ê¹ÓÃWebGLäÖȾʱ£¬ÃèÊö×Ö¶ÎÏÔʾΪFPS(WebGL)¡£
Sprite£º
äÖȾ½ÚµãÊýÁ¿£¨Êý×ÖÔ½µÍÔ½ºÃ£©¡£
Spriteͳ¼ÆËùÓÐäÖȾ½Úµã£¨°üÀ¨ÈÝÆ÷£©£¬Õâ¸öÊý×ֵĴóС»áÓ°ÏìÒýÇæ½Úµã±éÀú£¬Êý¾Ý×éÖ¯ºÍäÖȾµÄ´ÎÊý¡£
DrawCall£º
DrawCallÔÚcanvasºÍWebGLäÖȾÏ´ú±í²»Í¬µÄÒâÒ壨ԽÉÙÔ½ºÃ£©¡£
Canvasϱíʾÿ֡µÄ»æÖÆ´ÎÊý£¬°üÀ¨Í¼Æ¬¡¢ÎÄ×Ö¡¢Ê¸Á¿Í¼¡£¾¡Á¿ÏÞÖÆÔÚ100֮ϡ£
WebGLϱíʾäÖȾÌá½»Åú´Î£¬Ã¿´Î×¼±¸Êý¾Ý²¢Í¨ÖªGPUäÖȾ»æÖƵĹý³Ì³ÆÎª1´ÎDrawCall£¬ÔÚÿ1´ÎDrawCallÖгýÁËÔÚ֪ͨGPUµÄäÖȾÉϱȽϺÄʱ֮Í⣬Çл»²ÄÖÊÓëshaderÒ²ÊǷdz£ºÄʱµÄ²Ù×÷¡£
DrawCallµÄ´ÎÊýÊǾö¶¨ÐÔÄܵÄÖØÒªÖ¸±ê£¬¾¡Á¿ÏÞÖÆÔÚ100֮ϡ£
Canvas£º
Èý¸öÊýÖµ ¡ª¡ª Ã¿Ö¡ÖØ»æµÄ»²¼ÊýÁ¿ / »º´æÀàÐÍΪ¡°normal¡±ÀàÐ͵ϲ¼ÊýÁ¿ / »º´æÀàÐÍΪ¡°bitmap¡±ÀàÐ͵ϲ¼ÊýÁ¿¡±¡£
CurMem£º½öÏÞWebGLäÖȾ£¬±íʾÄÚ´æÓëÏÔ´æÕ¼Óã¨Ô½µÍÔ½ºÃ£©¡£
Shader£º½öÏÞWebGLäÖȾ£¬±íʾÿ֡ShaderÌá½»´ÎÊý¡£
ÎÞÂÛÊÇCanvasģʽ»¹ÊÇWebGLģʽ£¬ÎÒÃǶ¼ÐèÒªÖØµã¹Ø×¢DrawCall£¬Sprite£¬CanvasÕâÈý¸ö²ÎÊý£¬È»ºóÕë¶ÔÐԵؽøÐÐÓÅ»¯¡££¨²Î¼û¡°Í¼ÐÎäÖȾÐÔÄÜ¡±£©
µÚ3½Ú£ºÄÚ´æÓÅ»¯
¶ÔÏó³Ø
¶ÔÏ󳨣¬Éæ¼°µ½²»¶ÏÖØ¸´Ê¹ÓöÔÏó¡£ÔÚ³õʼ»¯Ó¦ÓóÌÐòÆÚ¼ä´´½¨Ò»¶¨ÊýÁ¿µÄ¶ÔÏó²¢½«Æä´æ´¢ÔÚÒ»¸ö³ØÖС£¶ÔÒ»¸ö¶ÔÏóÍê³É²Ù×÷ºó£¬½«¸Ã¶ÔÏó·Å»Øµ½³ØÖУ¬ÔÚÐèҪжÔÏóʱ¿ÉÒÔ¶ÔÆä½øÐмìË÷¡£
ÓÉÓÚʵÀý»¯¶ÔÏó³É±¾ºÜ¸ß£¬Ê¹ÓöÔÏó³ØÖØÓöÔÏó¿É¼õÉÙʵÀý»¯¶ÔÏóµÄÐèÇó¡£»¹¿ÉÒÔ¼õÉÙÀ¬»ø»ØÊÕÆ÷ÔËÐеĻú»á£¬´Ó¶øÌá¸ß³ÌÐòµÄÔËÐÐËÙ¶È¡£
ÒÔÏ´úÂëÑÝʾʹÓÃ
Laya.utils.Pool£º
ar SPRITE_SIGN = 'spriteSign';
var sprites = [];
function initialize()
{
for (var i = 0; i < 1000; i++)
{
var sp = Pool.getItemByClass(SPRITE_SIGN, Sprite)
sprites.push(sp);
Laya.stage.addChild(sp);
}
}
initialize(); |
ÔÚinitializeÖд´½¨´óСΪ1000µÄ¶ÔÏ󳨡£
ÒÔÏ´úÂëÔÚµ±µ¥»÷Êó±êʱ£¬½«É¾³ýÏÔʾÁбíÖеÄËùÓÐÏÔʾ¶ÔÏ󣬲¢ÔÚÒÔºóµÄÆäËûÈÎÎñÖÐÖØ¸´Ê¹ÓÃÕâЩ¶ÔÏó£º
Laya.stage.on("click",
this, function()
{
var sp;
for(var i = 0, len = sprites.length; i < len;
i++)
{
sp = sprites.pop();
Pool.recover(SPRITE_SIGN, sp);
Laya.stage.removeChild(sp);
}
}); |
µ÷ÓÃPool.recoverºó£¬Ö¸¶¨µÄ¶ÔÏó»á±»»ØÊÕÖÁ³ØÄÚ¡£
ʹÓÃHandler.create
ÔÚ¿ª·¢¹ý³ÌÖУ¬»á¾³£Ê¹ÓÃHandlerÀ´Íê³ÉÒì²½»Øµ÷¡£Handler.createʹÓÃÁËÄÚÖöÔÏ󳨹ÜÀí£¬Òò´ËÔÚʹÓÃHandler¶ÔÏóʱӦʹÓÃHandler.createÀ´´´½¨»Øµ÷´¦ÀíÆ÷¡£ÒÔÏ´úÂëʹÓÃHandler.create´´½¨¼ÓÔØµÄ»Øµ÷´¦ÀíÆ÷£º
Laya.loader.load(urls,
Handler.create(this, onAssetLoaded)); |
ÔÚÉÏÃæµÄ´úÂëÖУ¬»Øµ÷±»Ö´ÐкóHandler½«»á±»¶ÔÏó³ØÊջء£´Ëʱ£¬¿¼ÂÇÈçÏ´úÂë»á·¢ÉúʲôÊ£º
Laya.loader.load(urls,
Handler.create(this, onAssetLoaded), Handler.create(this,
onLoading)); |
ÔÚÉÏÃæµÄ´úÂëÖУ¬Ê¹ÓÃHandler.create·µ»ØµÄ´¦ÀíÆ÷´¦Àíprogressʼþ¡£´ËʱµÄ»Øµ÷Ö´ÐÐÒ»´ÎÖ®ºó¾Í±»¶ÔÏ󳨻ØÊÕ£¬ÓÚÊÇprogressʼþÖ»´¥·¢ÁËÒ»´Î£¬´ËʱÐèÒª½«ËĸöÃûΪonceµÄ²ÎÊýÉèÖÃΪfalse£º
Laya.loader.load(urls,
Handler.create(this, onAssetLoaded), Handler.create(this,
onLoading, null, false)); |
ÊÍ·ÅÄÚ´æ
JavaScriptÔËÐÐʱÎÞ·¨Æô¶¯À¬»ø»ØÊÕÆ÷¡£ÒªÈ·±£Ò»¸ö¶ÔÏóÄܹ»±»»ØÊÕ£¬Çëɾ³ý¶Ô¸Ã¶ÔÏóµÄËùÓÐÒýÓá£SpriteÌṩµÄdestory»á°ïÖúÉèÖÃÄÚ²¿ÒýÓÃΪnull¡£
ÀýÈ磬ÒÔÏ´úÂëÈ·±£¶ÔÏóÄܹ»±»×÷ΪÀ¬»ø»ØÊÕ£º
var sp = new
Sprite();
sp.destroy(); |
µ±¶ÔÏóÉèÖÃΪnull£¬²»»áÁ¢¼´½«Æä´ÓÄÚ´æÖÐɾ³ý¡£Ö»ÓÐϵͳÈÏΪÄÚ´æ×ã¹»µÍʱ£¬À¬»ø»ØÊÕÆ÷²Å»áÔËÐС£ÄÚ´æ·ÖÅ䣨¶ø²»ÊǶÔÏóɾ³ý£©»á´¥·¢À¬»ø»ØÊÕ¡£
À¬»ø»ØÊÕÆÚ¼ä¿ÉÄÜÕ¼ÓôóÁ¿CPU²¢Ó°ÏìÐÔÄÜ¡£Í¨¹ýÖØÓöÔÏ󣬳¢ÊÔÏÞÖÆÊ¹ÓÃÀ¬»ø»ØÊÕ¡£´ËÍ⣬¾¡¿ÉÄܽ«ÒýÓÃÉèÖÃΪnull£¬ÒÔ±ãÀ¬»ø»ØÊÕÆ÷ÓýÏÉÙʱ¼äÀ´²éÕÒ¶ÔÏó¡£ÓÐʱ£¨±ÈÈçÁ½¸ö¶ÔÏóÏ໥ÒýÓã©£¬ÎÞ·¨Í¬Ê±ÉèÖÃÁ½¸öÒýÓÃΪnull£¬À¬»ø»ØÊÕÆ÷½«É¨ÃèÎÞ·¨±»·ÃÎʵ½µÄ¶ÔÏ󣬲¢½«ÆäÇå³ý£¬Õâ»á±ÈÒýÓüÆÊý¸üÏûºÄÐÔÄÜ¡£
×ÊÔ´Ð¶ÔØ
ÓÎÏ·ÔËÐÐʱ×Ü»á¼ÓÔØÐí¶à×ÊÔ´£¬ÕâЩ×ÊÔ´ÔÚʹÓÃÍê³ÉºóÓ¦¼°Ê±Ð¶ÔØ£¬·ñÔòÒ»Ö±²ÐÁôÔÚÄÚ´æÖС£
ÏÂÀýÑÝʾ¼ÓÔØ×ÊÔ´ºó¶Ô±È×ÊÔ´Ð¶ÔØÇ°ºÍÐ¶ÔØºóµÄ×ÊԴ״̬£º
var assets =
[];
assets.push("res/apes/monkey0.png");
assets.push("res/apes/monkey1.png");
assets.push("res/apes/monkey2.png");
assets.push("res/apes/monkey3.png");
Laya.loader.load(assets, Handler.create(this,
onAssetsLoaded));
function onAssetsLoaded()
{
for(var i = 0, len = assets.length; i < len;
++i)
{
var asset = assets[i];
console.log(Laya.loader.getRes(asset));
Laya.loader.clearRes(asset);
console.log(Laya.loader.getRes(asset));
}
} |
¹ØÓÚÂ˾µ¡¢ÕÚÕÖ
³¢ÊÔ¾¡Á¿¼õÉÙʹÓÃÂ˾µÐ§¹û¡£½«Â˾µ£¨BlurFilterºÍGlowFilter£©Ó¦ÓÃÓÚÏÔʾ¶ÔÏóʱ£¬ÔËÐÐʱ½«ÔÚÄÚ´æÖд´½¨Á½ÕÅλͼ¡£ÆäÖÐÿ¸öλͼµÄ´óСÓëÏÔʾ¶ÔÏóÏàͬ¡£½«µÚÒ»¸öλͼ´´½¨ÎªÏÔʾ¶ÔÏóµÄÕ¤¸ñ»¯°æ±¾£¬È»ºóÓÃÓÚÉú³ÉÓ¦ÓÃÂ˾µµÄÁíÒ»¸öλͼ£º

Ó¦ÓÃÂ˾µÊ±ÄÚ´æÖеÄÁ½¸öλͼ
µ±ÐÞ¸ÄÂ˾µµÄij¸öÊôÐÔ»òÕßÏÔʾ¶ÔÏóʱ£¬ÄÚ´æÖеÄÁ½¸öλͼ¶¼½«¸üÐÂÒÔ´´½¨Éú³ÉµÄλͼ£¬ÕâÁ½¸öλͼ¿ÉÄÜ»áÕ¼ÓôóÁ¿ÄÚ´æ¡£´ËÍ⣬´Ë¹ý³ÌÉæ¼°CPU¼ÆË㣬¶¯Ì¬¸üÐÂʱ½«»á½µµÍÐÔÄÜ£¨²Î¼û¡°Í¼ÐÎäÖȾÐÔÄÜ
¨C ¹ØÓÚcacheAs£©¡£
ColorFiterÔÚCanvasäÖȾÏÂÐèÒª¼ÆËãÿ¸öÏñËØµã£¬¶øÔÚWebGLϵÄGPUÏûºÄ¿ÉÒÔºöÂÔ²»¼Æ¡£
×î¼ÑµÄ×ö·¨ÊÇ£¬¾¡¿ÉÄÜʹÓÃͼÏñ´´×÷¹¤¾ß´´½¨µÄλͼÀ´Ä£ÄâÂ˾µ¡£±ÜÃâÔÚÔËÐÐʱÖд´½¨¶¯Ì¬Î»Í¼£¬¿ÉÒÔ°ïÖú¼õÉÙCPU»òGPU¸ºÔØ¡£ÌرðÊÇÒ»ÕÅÓ¦ÓÃÁËÂ˾µ²¢ÇÒ²»»áÔÚÐ޸ĵÄͼÏñ¡£
µÚ4½Ú£ºÍ¼ÐÎäÖȾÐÔÄÜ
ÓÅ»¯Sprite
1.¾¡Á¿¼õÉÙ²»±ØÒªµÄ²ã´ÎǶÌ×£¬¼õÉÙSpriteÊýÁ¿¡£
2.·Ç¿É¼ûÇøÓòµÄ¶ÔÏó¾¡Á¿´ÓÏÔʾÁбíÒÆ³ý»òÕßÉèÖÃvisible=false¡£
3.¶ÔÓÚÈÝÆ÷ÄÚÓдóÁ¿¾²Ì¬ÄÚÈÝ»òÕß²»¾³£±ä»¯µÄÄÚÈÝ£¨±ÈÈç°´Å¥£©£¬¿ÉÒÔ¶ÔÕû¸öÈÝÆ÷ÉèÖÃcacheAsÊôÐÔ£¬ÄÜ´óÁ¿¼õÉÙSpriteµÄÊýÁ¿£¬ÏÔÖøÌá¸ßÐÔÄÜ¡£Èç¹ûÓж¯Ì¬ÄÚÈÝ£¬×îºÃºÍ¾²Ì¬ÄÚÈÝ·Ö¿ª£¬ÒÔ±ãÖ»»º´æ¾²Ì¬ÄÚÈÝ¡£
4.PanelÄÚ£¬»áÕë¶ÔpanelÇøÓòÍâµÄÖ±½Ó×Ó¶ÔÏó£¨×Ó¶ÔÏóµÄ×Ó¶ÔÏóÅжϲ»ÁË£©½øÐв»äÖȾ´¦Àí£¬³¬³öpanelÇøÓòµÄ×Ó¶ÔÏóÊDz»²úÉúÏûºÄµÄ¡£
ÓÅ»¯DrawCall
1.¶Ô¸´ÔÓ¾²Ì¬ÄÚÈÝÉèÖÃcacheAs£¬ÄÜ´óÁ¿¼õÉÙDrawCall£¬Ê¹ÓúÃcacheAsÊÇÓÎÏ·ÓÅ»¯µÄ¹Ø¼ü¡£
2.¾¡Á¿±£Ö¤Í¬Í¼¼¯µÄͼƬäÖȾ˳ÐòÊǰ¤×ŵģ¬Èç¹û²»Í¬Í¼¼¯½»²æäÖȾ£¬»áÔö¼ÓDrawCallÊýÁ¿¡£
3.¾¡Á¿±£Ö¤Í¬Ò»¸öÃæ°åÖеÄËùÓÐ×ÊÔ´ÓÃÒ»¸öͼ¼¯£¬ÕâÑùÄܼõÉÙÌá½»Åú´Î¡£
ÓÅ»¯Canvas
ÔÚ¶ÔCanvasÓÅ»¯Ê±£¬ÎÒÃÇÐèҪעÒ⣬ÔÚÒÔϳ¡ºÏ²»ÒªÊ¹ÓÃcacheAs£º
1.¶ÔÏó·Ç³£¼òµ¥£¬±ÈÈçÒ»¸ö×Ö»òÕßÒ»¸öͼƬ£¬ÉèÖÃcacheAs=bitmap²»µ«²»Ìá¸ßÐÔÄÜ£¬·´¶ø»áËðʧÐÔÄÜ¡£
2.ÈÝÆ÷ÄÚÓо³£±ä»¯µÄÄÚÈÝ£¬±ÈÈçÈÝÆ÷ÄÚÓÐÒ»¸ö¶¯»»òÕßµ¹¼ÆÊ±£¬Èç¹ûÔÙ¶ÔÕâ¸öÈÝÆ÷ÉèÖÃcacheAs=bitmap£¬»áËðʧÐÔÄÜ¡£
¿ÉÒÔͨ¹ý²é¿´Canvasͳ¼ÆÐÅÏ¢µÄµÚÒ»¸öÖµ£¬ÅжÏÊÇ·ñÒ»Ö±ÔÚË¢ÐÂCanvas»º´æ¡£
¹ØÓÚcacheAs
ÉèÖÃcacheAs¿É½«ÏÔʾ¶ÔÏ󻺴æÎª¾²Ì¬Í¼Ïñ£¬µ±cacheAsʱ£¬×Ó¶ÔÏó·¢Éú±ä»¯£¬»á×Ô¶¯ÖØÐ»º´æ£¬Í¬Ê±Ò²¿ÉÒÔÊÖ¶¯µ÷ÓÃreCache·½·¨¸üлº´æ¡£
½¨Òé°Ñ²»¾³£±ä»¯µÄ¸´ÔÓÄÚÈÝ£¬»º´æÎª¾²Ì¬Í¼Ïñ£¬Äܼ«´óÌá¸ßäÖȾÐÔÄÜ£¬cacheAsÓС±none¡±£¬¡±normal¡±ºÍ¡±bitmap¡±Èý¸öÖµ¿ÉÑ¡¡£
ĬÈÏΪ¡±none¡±£¬²»×öÈκλº´æ¡£
2.µ±ÖµÎª¡±normal¡±Ê±£¬canvasϽøÐл²¼»º´æ£¬webglģʽϽøÐÐÃüÁ´æ¡£
3.µ±ÖµÎª¡±bitmap¡±Ê±£¬canvasϽøÐÐÒÀÈ»ÊÇ»²¼»º´æ£¬webGLģʽÏÂʹÓÃrenderTarget»º´æ¡£ÕâÀïÐèҪעÒâµÄÊÇ£¬webGLÏÂrenderTarget»º´æÄ£Ê½ÓÐ2048´óСÏÞÖÆ£¬³¬³ö2048»á¶îÍâÔö¼ÓÄڴ濪Ïú¡£ÁíÍ⣬²»¶ÏÖØ»æÊ±¿ªÏúÒ²±È½Ï´ó£¬µ«ÊÇ»á¼õÉÙdrawcall£¬äÖȾÐÔÄÜ×î¸ß¡£
webGLÏÂÃüÁ´æÄ£Ê½Ö»»á¼õÉÙ½Úµã±éÀú¼°ÃüÁî×éÖ¯£¬²»»á¼õÉÙdrawcall£¬ÐÔÄÜÖеȡ£
ÉèÖÃcacheAsºó£¬»¹¿ÉÒÔÉèÖÃstaticCache=trueÒÔ×èÖ¹×Ô¶¯¸üлº´æ£¬Í¬Ê±¿ÉÒÔÊÖ¶¯µ÷ÓÃreCache·½·¨¸üлº´æ¡£
cacheAsÖ÷Ҫͨ¹ýÁ½·½ÃæÌáÉýÐÔÄÜ¡£Ò»ÊǼõÉÙ½Úµã±éÀúºÍ¶¥µã¼ÆË㣻¶þÊǼõÉÙdrawCall¡£ÉÆÓÃcacheAs½«ÊÇÒýÇæÓÅ»¯ÐÔÄܵÄÀûÆ÷¡£
ÏÂÀý»æÖÆ10000¸öÎı¾£º
Laya.init(550,
400, Laya.WebGL);
Laya.Stat.show();
var textBox = new Laya.Sprite();
var text;
for (var i = 0; i < 10000; i++)
{
text = new Laya.Text();
text.text = (Math.random() * 100).toFixed(0);
text.color = "#CCCCCC";
text.x = Math.random() * 550;
text.y = Math.random() * 400;
textBox.addChild(text);
}
Laya.stage.addChild(textBox); |
ÏÂÃæÊDZÊÕßµçÄÔÉϵÄÔËÐÐʱ½ØÍ¼£¬FPSÎȶ¨ÓÚ52ÉÏÏ¡£

µ±ÎÒÃǶÔÎÄ×ÖËùÔÚµÄÈÝÆ÷ÉèÖÃΪcacheAsÖ®ºó£¬ÈçÏÂÃæµÄÀý×ÓËùʾ£¬ÐÔÄÜ»ñµÃ½Ï´óµÄÌáÉý£¬FPS´ïµ½µ½ÁË60Ö¡¡£
// ¡Ê¡ÂÔÆäËû´úÂë¡ var
textBox = new Laya.Sprite();
textBox.cacheAs = "bitmap"; // ¡Ê¡ÂÔÆäËû´úÂë¡ |

ÎÄ×ÖÃè±ß
ÔÚÔËÐÐʱ£¬ÉèÖÃÁËÃè±ßµÄÎı¾±ÈûÓÐÃè±ßµÄÎı¾¶àµ÷ÓÃÒ»´Î»æÍ¼Ö¸Áî¡£´Ëʱ£¬Îı¾¶ÔCPUµÄʹÓÃÁ¿ºÍÎı¾µÄÊýÁ¿³ÉÕý±È¡£Òò´Ë£¬¾¡Á¿Ê¹ÓÃÌæ´ú·½°¸À´Íê³ÉͬÑùµÄÐèÇó¡£
¶ÔÓÚ¼¸ºõ²»±ä¶¯µÄÎı¾ÄÚÈÝ£¬¿ÉÒÔʹÓÃcacheAs½µµÍÐÔÄÜÏûºÄ£¬²Î¼û¡°Í¼ÐÎäÖȾÐÔÄÜ ¨C ¹ØÓÚcacheAs¡±¡£
¶ÔÓÚÄÚÈݾ³£±ä¶¯£¬µ«ÊÇʹÓõÄ×Ö·ûÊýÁ¿½ÏÉÙµÄÎı¾Óò£¬¿ÉÒÔÑ¡ÔñʹÓÃλͼ×ÖÌå¡£
Ìø¹ýÎı¾ÅŰ棬ֱ½ÓäÖȾ
´ó¶àÊýÇé¿öÏ£¬ºÜ¶àÎı¾¶¼²»ÐèÒª¸´ÔÓµÄÅŰ棬½ö½ö¼òµ¥µØÏÔʾһÐÐ×Ö¡£ÎªÁËÓºÏÕâÒ»ÐèÇó£¬TextÌṩµÄÃûΪchangeTextµÄ·½·¨¿ÉÒÔÖ±½ÓÌø¹ýÅŰ档
var text = new
Text();
text.text = "text";
Laya.stage.addChild(text);
//ºóÃæÖ»ÊǸüÐÂÎÄ×ÖÄÚÈÝ£¬Ê¹ÓÃchangeTextÄÜÌá¸ßÐÔÄÜ
text.changeText("text changed."); |
Text.changeText»áÖ±½ÓÐ޸ĻæÍ¼Ö¸ÁîÖиÃÎı¾»æÖƵÄ×îºóÒ»ÌõÖ¸ÁÕâÖÖÇ°ÃæµÄ»æÍ¼Ö¸ÁîÒÀ¾É´æÔÚµÄÐÐΪ»áµ¼ÖÂchangeTextֻʹÓÃÓÚÒÔÏÂÇé¿ö£º
Îı¾Ê¼ÖÕÖ»ÓÐÒ»ÐС£
Îı¾µÄÑùʽʼÖÕ²»±ä£¨ÑÕÉ«¡¢´Öϸ¡¢Ð±Ìå¡¢¶ÔÆëµÈµÈ£©¡£
¼´Ê¹Èç´Ë£¬Êµ¼Ê±à³ÌÖÐÒÀ¾É»á¾³£Ê¹Óõ½ÕâÑùµÄÐèÒª¡£
µÚ5½Ú£º¼õÉÙCPUʹÓÃÁ¿
¼õÉÙ¶¯Ì¬ÊôÐÔ²éÕÒ
JavaScriptÖÐÈκζÔÏó¶¼ÊǶ¯Ì¬µÄ£¬Äã¿ÉÒÔÈÎÒâµØÌí¼ÓÊôÐÔ¡£È»¶ø£¬ÔÚ´óÁ¿µÄÊôÐÔÀï²éÕÒijÊôÐÔ¿ÉÄܺܺÄʱ¡£Èç¹ûÐèҪƵ·±Ê¹ÓÃij¸öÊôÐÔÖµ£¬¿ÉÒÔʹÓþֲ¿±äÁ¿À´±£´æËü£º
function foo()
{
var prop = target.prop;
// ʹÓÃprop
process1(prop);
process2(prop);
process3(prop);
} |
¼ÆÊ±Æ÷
LayaAirÌṩÁ½ÖÖ¼ÆÊ±Æ÷Ñ»·À´Ö´ÐдúÂë¿é¡£
Laya.timer.frameLoopÖ´ÐÐÆµÂÊÒÀÀµÓÚ֡ƵÂÊ£¬¿Éͨ¹ýStat.FPS²é¿´µ±Ç°Ö¡Æµ¡£
Laya.timer.loopÖ´ÐÐÆµÂÊÒÀÀµÓÚ²ÎÊýÖ¸¶¨Ê±¼ä¡£
µ±Ò»¸ö¶ÔÏóµÄÉúÃüÖÜÆÚ½áÊøÊ±£¬¼ÇµÃÇå³ýÆäÄÚ²¿µÄTimer£º
Laya.timer.frameLoop(1,
this, animateFrameRateBased);
Laya.stage.on("click", this, dispose);
function dispose()
{
Laya.timer.clear(this, animateFrameRateBased);
} |
»ñÈ¡ÏÔʾ¶ÔÏó±ß½çµÄ×ö·¨
ÔÚÏà¶Ô²¼¾ÖÖУ¬ºÜ¾³£ÐèÒªÕýÈ·µØ»ñÈ¡ÏÔʾ¶ÔÏóµÄ±ß½ç¡£»ñÈ¡ÏÔʾ¶ÔÏóµÄ±ß½çÒ²ÓжàÖÖ×ö·¨£¬¶øÆä¼ä²îÒìºÜÓбØÒªÖªµÀ¡£
1.ʹÓÃgetBounds/ getGraphicBounds¡£¡¢
var sp = new
Sprite();
sp.graphics.drawRect(0, 0, 100, 100, "#FF0000");
var bounds = sp.getGraphicBounds();
Laya.stage.addChild(sp); |
getBounds¿ÉÒÔÂú×ã¶àÊý¶àÊýÐèÇ󣬵«ÓÉÓÚÆäÐèÒª¼ÆËã±ß½ç£¬²»ÊÊºÏÆµ·±µ÷Óá£
2.ÉèÖÃÈÝÆ÷µÄautoSizeΪtrue¡£
var sp = new
Sprite();
sp.autoSize = true;
sp.graphics.drawRect(0, 0, 100, 100, "#FF0000");
Laya.stage.addChild(sp); |
ÉÏÊö´úÂë¿ÉÒÔÔÚÔËÐÐʱÕýÈ·»ñÈ¡¿í¸ß¡£autoSizeÔÚ»ñÈ¡¿í¸ß²¢ÇÒÏÔʾÁбíµÄ״̬·¢Éú¸Ä±äʱ»áÖØÐ¼ÆË㣨autoSizeͨ¹ýgetBoudns¼ÆËã¿í¸ß£©¡£ËùÒÔ¶ÔÓµÓдóÁ¿×Ó¶ÔÏóµÄÈÝÆ÷Ó¦ÓÃautoSizeÊDz»¿ÉÈ¡µÄ¡£Èç¹ûÉèÖÃÁËsize£¬autoSize½«²»ÆðЧ¡£
ʹÓÃloadImageºó»ñÈ¡¿í¸ß£º
var sp = new
Sprite();
sp.loadImage("res/apes/monkey2.png",
0, 0, 0, 0, Handler.create(this, function()
{
console.log(sp.width, sp.height);
}));
Laya.stage.addChild(sp); |
loadImageÔÚ¼ÓÔØÍê³ÉµÄ»Øµ÷º¯Êý´¥·¢Ö®ºó²Å¿ÉÒÔÕýÈ·»ñÈ¡¿í¸ß¡£
3.Ö±½Óµ÷ÓÃsizeÉèÖãº
Laya.loader.load("res/apes/monkey2.png",
Handler.create(this, function()
{
var texture = Laya.loader.getRes("res/apes/monkey2.png");
var sp = new Sprite();
sp.graphics.drawTexture(texture, 0, 0);
sp.size(texture.width, texture.height);
Laya.stage.addChild(sp);
})); |
ʹÓÃGraphics.drawTexture²¢²»»á×Ô¶¯ÉèÖÃÈÝÆ÷µÄ¿í¸ß£¬µ«ÊÇ¿ÉÒÔʹÓÃTextureµÄ¿í¸ß¸³ÓèÈÝÆ÷¡£ÎãÓ¹ÖÃÒÉ£¬ÕâÊÇ×î¸ßЧµÄ·½Ê½¡£
×¢£ºgetGraphicsBoundsÓÃÓÚ»ñȡʸÁ¿»æÍ¼¿í¸ß¡£
¸ù¾Ý»î¶¯×´Ì¬¸Ä±ä֡Ƶ
֡ƵÓÐÈýÖÖģʽ£¬Stage.FRAME_SLOWά³ÖFPSÔÚ30£»Stage.FRAME_FASTά³ÖFPSÔÚ60£»Stage.FRAME_MOUSEÔòÑ¡ÔñÐÔά³ÖFPSÔÚ30»ò60Ö¡¡£
ÓÐʱ²¢²»ÐèÒªÈÃÓÎÏ·ÒÔ60FPSµÄËÙÂÊÖ´ÐУ¬ÒòΪ30FPSÒѾÄܹ»Âú×ã¶àÊýÇé¿öÏÂÈËÀàÊÓ¾õµÄÏìÓ¦£¬µ«ÊÇÊó±ê½»»¥Ê±£¬30FPS¿ÉÄÜ»áÔì³É»ÃæµÄ²»Á¬¹á£¬ÓÚÊÇStage.FRAME_MOUSEÓ¦Ô˶øÉú¡£
ÏÂÀýչʾÒÔStage.FRAME_SLOWµÄÖ¡ÂÊ£¬ÔÚ»²¼ÉÏÒÆ¶¯Êó±ê£¬Ê¹Ô²Çò¸úËæÊó±êÒÆ¶¯£º
Laya.init(Browser.width,
Browser.height);
Stat.show();
Laya.stage.frameRate = Stage.FRAME_SLOW;
var sp = new Sprite();
sp.graphics.drawCircle(0, 0, 20, "#990000");
Laya.stage.addChild(sp);
Laya.stage.on(Event.MOUSE_MOVE, this, function()
{
sp.pos(Laya.stage.mouseX, Laya.stage.mouseY);
}); |

´ËʱFPSÏÔʾ30£¬²¢ÇÒÔÚÊó±êÒÆ¶¯Ê±£¬¿ÉÒԸоõµ½Ô²ÇòλÖõĸüв»Á¬¹á¡£ÉèÖÃStage.frameRateΪStage.FRAME_MOUSE£º
Laya.stage.frameRate
= Stage.FRAME_MOUSE; |

´ËʱÔÚÊó±êÒÆ¶¯ºóFPS»áÏÔʾ60£¬²¢ÇÒ»ÃæÁ÷³©¶ÈÌáÉý¡£ÔÚÊó±ê¾²Ö¹2Ãë²»¶¯ºó£¬FPSÓÖ»á»Ö¸´µ½30Ö¡¡£
ʹÓÃcallLater
callLaterʹ´úÂë¿éÑÓ³ÙÖÁ±¾Ö¡äÖȾǰִÐС£Èç¹ûµ±Ç°µÄ²Ù×÷Ƶ·±¸Ä±äij¶ÔÏóµÄ״̬£¬´Ëʱ¿ÉÒÔ¿¼ÂÇʹÓÃcallLater£¬ÒÔ¼õÉÙÖØ¸´¼ÆËã¡£
¿¼ÂÇÒ»¸öͼÐΣ¬¶ÔËüÉèÖÃÈκθıäÍâ¹ÛµÄÊôÐÔ¶¼½«µ¼ÖÂͼÐÎÖØ»æ£º
var rotation
= 0,
scale = 1,
position = 0;
function setRotation(value)
{
this.rotation = value;
update();
}
function setScale(value)
{
this.scale = value;
update();
}
function setPosition(value)
{
this.position = value;
update();
}
function update()
{
console.log('rotation: ' + this.rotation + '\tscale:
' + this.scale + '\tposition: ' + position);
} |
µ÷ÓÃÒÔÏ´úÂë¸ü¸Ä״̬£º
setRotation(90);
setScale(2); setPosition(30); |
¿ØÖÆÌ¨µÄ´òÓ¡½á¹ûÊÇ
rotation: 90 scale: 1 position: 0
rotation: 90 scale: 2 position: 0
rotation: 90 scale: 2 position: 30
update±»µ÷ÓÃÁËÈý´Î£¬²¢ÇÒ×îºóµÄ½á¹ûÊÇÕýÈ·µÄ£¬µ«ÊÇÇ°ÃæÁ½´Îµ÷Óö¼ÊDz»ÐèÒªµÄ¡£
³¢ÊÔ½«Èý´¦update¸ÄΪ£º
Laya.timer.callLater(this,
update); |
´Ëʱ£¬updateÖ»»áµ÷ÓÃÒ»´Î£¬²¢ÇÒÊÇÎÒÃÇÏëÒªµÄ½á¹û¡£
ͼƬ/ͼ¼¯¼ÓÔØ
ÔÚÍê³ÉͼƬ/ͼ¼¯µÄ¼ÓÔØÖ®ºó£¬ÒýÇæ¾Í»á¿ªÊ¼´¦ÀíͼƬ×ÊÔ´¡£Èç¹û¼ÓÔØµÄÊÇÒ»ÕÅͼ¼¯£¬»á´¦ÀíÿÕÅ×ÓͼƬ¡£Èç¹ûÒ»´ÎÐÔ´¦Àí´óÁ¿µÄͼƬ£¬Õâ¸ö¹ý³Ì¿ÉÄÜ»áÔì³É³¤Ê±¼äµÄ¿¨¶Ù¡£
ÔÚÓÎÏ·µÄ×ÊÔ´¼ÓÔØÖУ¬¿ÉÒÔ½«×ÊÔ´°´Õչؿ¨¡¢³¡¾°µÈ·ÖÀà¼ÓÔØ¡£ÔÚͬһʱ¼ä´¦ÀíµÄͼƬԽÉÙ£¬µ±Ê±µÄÓÎÏ·ÏìÓ¦ËÙ¶ÈÒ²»á¸ü¿ì¡£ÔÚ×ÊԴʹÓÃÍê³Éºó£¬Ò²¿ÉÒÔÓèÒÔÐ¶ÔØ£¬ÊÍ·ÅÄÚ´æ¡£
µÚ6½Ú£ºÆäËûÓÅ»¯²ßÂÔ
1.¼õÉÙÁ£×ÓʹÓÃÊýÁ¿£¬ÔÚÒÆ¶¯Æ½Ì¨CanvasģʽÏ£¬¾¡Á¿²»ÓÃÁ£×Ó£»
2.ÔÚCanvasģʽÏ£¬¾¡Á¿¼õÉÙÐýת£¬Ëõ·Å£¬alphaµÈÊôÐÔµÄʹÓã¬ÕâЩÊôÐÔ»á¶ÔÐÔÄܲúÉúÏûºÄ¡££¨ÔÚWebGLģʽ¿ÉÒÔʹÓã©£»
3.²»ÒªÔÚtimeloopÀïÃæ´´½¨¶ÔÏó¼°¸´ÔÓ¼ÆË㣻
4.¾¡Á¿¼õÉÙ¶ÔÈÝÆ÷µÄautoSizeµÄʹÓ㬼õÉÙgetBounds()µÄʹÓã¬ÒòΪÕâЩµ÷Óûá²úÉú½Ï¶à¼ÆË㣻
5.¾¡Á¿ÉÙÓÃtry catchµÄʹÓ㬱»try catchµÄº¯ÊýÖ´Ðлá±äµÃ·Ç³£Âý£»
|