测试设备:小米1
测试方法:
在同屏跑500个动画,每个动画有10帧(每帧为不同的独立图片),图片大小为(100*100),场景中随机切换图片,每帧移动位置,整体滚屏;
测试结果:(下面有实拍视频)
引擎 帧数
Laya.player 44-52
Unity3d 9-18
注:本次还针对其它APP引擎进行了测试,同样未进行性能优化的情况下Laya.player完胜其它APP引擎产品;
测试点评:经过1200个日夜,Layabox的加速器(Laya.player)支持下的产品性能已超越APP的性能,尤其是同样未作性能优化的情况下,Laya.player对产品性能的优化程度绝对是无懈可击的完胜。除了小米1,Laya.player在512M系统内存(实际可用系统内存为300M)的早期智能机下,仍然可流畅运行重度H5游戏(例如:猎魂之刃);
H5前景:
Laya.playe在未来会支持所有H5产品(不受引擎限制)的加速。H5游戏替代APP游戏已经不止是可能,而是趋势!
视频实拍:
H5测试代码:
conch.config.setFpsParam( 400,300,80,"#ffffff" );
conch.config.showFps( true );
//Laya加速器性能测试程序
var pCanvas = window.document.createElement( "canvas" );
var pContext = pCanvas.getContext("2d");
var _width=1024;
var _height=768;
var _url="http://127.0.0.1:8899";
var pRootNode = conch.createNode();
pRootNode.pos(0,0);
pRootNode.size( _width,_height );
pRootNode.bgcolor( "#888888" );
conch.setRootNode( pRootNode );
var pTopNode=conch.createNode();
pTopNode.pos(0,0);
pTopNode.size( _width,_height );
pTopNode.bgcolor( "#123456" );
pRootNode.insert( pTopNode,0,0 );
var childs=[];
function createChilds()
{
for(var i=0;i<500;i++)
{
var node = conch.createNode();
childs.push(node);
node._left=Math.random()*(_width-100);
node._top=Math.random()*(_height-100);
node._stepX=i%2==0?-1:1;
node._stepY=i%4==0?-1:1;
node.pos(node._left,node._top);
node.size(_imgs[0].width,_imgs[0].height);
node.imageId = i%_imgs.length;
node.image( _imgs[node.imageId] );
pTopNode.insert( node,0,0 );
}
}
var _imgs=[],_loadedCount=0;
for(var i=0;i<12;i++)
{
var pImg = new image();
_imgs.push(pImg);
pImg.οnlοad=function()
{
_loadedCount++;
if(_loadedCount==_imgs.length) createChilds();
}
var si = parseInt(Math.random()*100000) % 12;
pImg.src=_url+"/" + si + ".png";
}
var updateCount = 0;
function onDrawFrame()
{
updateCount++;
var k=(updateCount%10)*(updateCount%20==0?-1:1);
for(var i=0,sz=childs.length;i<sz;i++)
{
var c=childs[i];
c.pos(c._left+k*c._stepX,c._top+k*c._stepY);
(updateCount%10 == 0) && c.image( _imgs[ ( c.imageId + updateCount )% 12 ] );
}
pTopNode.pos(updateCount%200,0);
}
setInterval(onDrawFrame, 15);
Unity3D测试代码:
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour {
private Sprite[] sps;
private Texture2D[] tex;
private GameObject[] objList;
public GameObject obj;
public GameObject container;
public int objLength = 500;
private float time = 0;
private int rate = 0;
private TextMesh txtMesh ;
void Start () {
tex = new Texture2D[12];
for (int i = 0; i < 12; i++) {
tex[i] = (Texture2D)Resources.Load (i+"");
}
sps = new Sprite[12];
txtMesh = ((GameObject)GameObject.Find("FPSText")).GetComponent<TextMesh> ();
for (int i = 0; i<12; i++) {
sps [i] = Sprite.Create(tex[i],new Rect(0,0,88,92),new Vector2(0,0));
}
objList = new GameObject[objLength];
for (int i = 0; i < objLength; i++) {
objList[i] = (GameObject)GameObject.Instantiate(obj);
objList[i].transform.parent = container.transform;
objList[i].transform.position = new Vector3(Random.Range(-800,800)/100f,Random.Range(-500,500)/100f,-10);
objList[i].GetComponent<SpriteRenderer>().sprite = sps[Random.Range(0,100000)%12];
}
}
private int updateCount = 0;
void Update () {
time += Time.deltaTime;
rate ++;
if (time > 1.0f) {
txtMesh.text = rate + "";
time = rate = 0;
}
updateCount++;
int k = (updateCount % 10) * (updateCount % 20 == 0 ? -1 : 1);
Vector3 vec3Container = container.transform.position;
vec3Container.x += 0.03f;
container.transform.position = vec3Container;
if(updateCount % 200 == 0)
container.transform.position = new Vector3(0,0,0);
for(int i = 0,sz = objList.Length; i < sz; i++)
{
GameObject obj = objList[i];
if(updateCount % 5 == 0)
objList[i].GetComponent<SpriteRenderer>().sprite = sps[Random.Range(0,100000)%12];
Vector3 vec3 = obj.transform.localPosition;
vec3.x += (vec3.x>8? -16 : (Random.Range(0,10) / 300f));
vec3.y += (vec3.y>5? -10 : (Random.Range(0,10) / 300f));
obj.transform.localPosition = vec3;
}
}
}