我从2年前开始在浏览器中构建策略游戏。它已经被一小群人积极地玩了,所以它是一个有效的游戏。 我们的问题是资源匮乏。基本上你想要歌剧或铬。 IE9或多或少无法播放,并且在某些地图上firefox可能会非常慢。
该游戏是一款基于平铺的自上而下游戏,使用64x64pixel DIV作为地图。
我们目前处于最后阶段,我们专注于优化。吃资源的一件事就是我们的动画水。我们有32块不同的水砖,每块水分成15帧。因此,一个.gif文件中的480 64x64图像为1.1 MB。
以下是水的链接:http://www.warbarons.com/beta5/terrain/water/water2.gif
我们的游戏使用Fog of War隐藏敌人单位和城堡,就像任何RTS游戏一样。因此,在.gif之上通常会有一个带有透明PNG的图层。
这个解决方案似乎对浏览器要求很高。当我滚动地图以显示FireFox中的水时CPU上升到25%,而在没有水的情况下它大约为4-5%。
我一直在谷歌上搜索几天,试图了解更好的技术。我发现了另外两种方法,可以使用canvas标签迭代电子表格,也可以使用CSS循环遍历电子表格。
我看到这两个选项的问题是所有水砖必须保持同步。如果一个人开始在另一个人之前播放,那么波浪将不会同步,这将打破无缝的外观。
我想知道是否有人有想法解决这个问题?我知道有多个gif动画会导致不同步问题。
是否有一些切割方式使用画布来做到这一点?甚至可以将画布与div混合,还是需要我们更改整个地图引擎?
非常感谢任何帮助。
答案 0 :(得分:0)
一个新手的工作和一个远景,但是: 为了准备,制作一张包含所有不同类型水砖的精灵表,左边第一帧,每种类型都有一个新行,下降。
<div>
<div>
s作为水砖并调整其“边距”属性以匹配地图的位置<style>
元素中,制作一个类规则'.water'<style>
元素,其中包含所有帧的背景位置<style>
元素的内容设置为其“background-position-x”的新CSS规则
咩。我知道,有点多,但比循环数组和吞噬系统资源更好,单独更改每个元素(至少我假设如此)。这是一个简化的代码示例:
<script type="text/javascript">
var pos = 0; // background-position-x variable
function loop() {
document.getElementById('changeMe').innerHTML = ".water{background-position-x:" + pos + "px;}"; //changes the contents of the <style> with the id 'changeMe'
//changes the <style> with id 'Change'
pos -= (pos == 960) ? -960 : 64; //assuming your sprite-sheet is oriented horizontally
setTimeout('loop();', 100);
}
</script>
<style type="text/css">
/* Remains unchanged */
.water {
width: 64px;
height: 64px;
background-image: url('spriteSheet.png');
}
.dockleft{
background-position-y: 420px;
/* If all of your sprites are on one sheet, you can set the
'background-position-y' attribute for each type of water tile and
give the 'water' class one sprite-sheet url for all of the types */
}
</style>
<style id="changeMe" type="text/css">
/* Changed by 'loop()' */
</style>
<body onload="loop();">
<div class="water dockleft"></div>
</body>