現在、オンライン ゲームに取り組んでおり、パフォーマンス上の理由から、HTML5 のキャンバスではなく webgl を使用することにしました。私は three.js フレームワークを使用しています。私の意図は、アニメーション化されたスプライトを動かすことです。スプライト自体はスプライトシートに配置され、UVOffset と UVScale を使用して適切なアートを使用し、時間経過中にスプライトのアートを切り替えます。このコードのパフォーマンスを改善する方法があるかどうか疑問に思っていました。現在、フィールド上で同時に約 300 人の「プレーヤー」で速度が低下し始めているためです。
よろしく
以下は、私のコードの最も重要な部分です。
var image = THREE.ImageUtils.loadTexture( "img/idlew.png" );
function addPlayer(){
var mesh = new THREE.Sprite({map:image});//, affectedByDistance: false, useScreenCoordinates: false});
images.push(mesh);
mesh.position.set(Math.floor(Math.random() * 500), Math.floor(Math.random() * 500), 10);
scene.add(mesh);
mesh.uvScale.x = 96/1152;
mesh.scale.x = 0.1;
mesh.scale.y = 0.1;
}
var imgBackground = new THREE.MeshLambertMaterial({
map:THREE.ImageUtils.loadTexture('img/grass.jpg')
});
var background = new THREE.Mesh(new THREE.PlaneGeometry(1000, 1000),imgBackground);
scene.add(background);
scene.add(camera);
camera.rotation.x = -(Math.PI/2);
scene.add(new THREE.AmbientLight(0xFFFFFF));
addPlayer();
renderer.render(scene, camera);
var moveUp = false;
tick();
var ticker = 0;
var usedOne = 0;
function tick(){
ticker++;
if(ticker%10==0){
for (var i = 0; i < images.length; i++) {
images[i].uvOffset.x = usedOne * 0.0835;
};
usedOne++;
if(usedOne == 12) usedOne = 0;
addPlayer();
addPlayer();
addPlayer();
console.log(images.length);
}
requestAnimationFrame( tick );
renderer.render(scene, camera);
}