我正在用 Html5 创建一个短游戏。我正在尝试找出进行英雄选择的最佳方法。
基本上有113个英雄。我创建了一个 1320x1320 的 spritesheet,每个英雄 img 为 120x120。第一张图片实际上只是一个框,里面写着“点击选择英雄”。我的第一个问题是,因为它在开始加载我的精灵表以加载第一张图像,稍后当它加载其余英雄时,它不必重新加载图像对吗?因为设置 'heroPics[i].style.backgroundImage = "url(Heroes.jpg)";' 每次都让我感到不安。
对我来说第二个也是重要的问题。回到我为手机开发游戏的时候,我发现如果你加载一个 570 的图像,它会使用 1024x1024 的资源,最好将图像重新制作为 512 并放大它,从而节省大量资源。这里也一样吗?我的图像是 1320 会使用资源作为 2048 吗?还是因为我正在加载 120x120 的图像,所以它只使用 128 的资源?
现在回到真正的问题。当此人单击“单击以选择英雄”时,我希望所有英雄图像都出现。当他们选择一个英雄时,我想把所有变量和我刚刚创建的 div 都扔掉,因为他们不会经常选择新英雄,所以最好把它扔掉,对吧?或者由于 spritesheet 已经加载,是否值得只隐藏包含图像的 div?它仍然会加载所有这些变量吗?无论如何,这是我的主要问题之一。
第二个是,如何在 div 中动态创建滚动条?我相信如果我手动设置所有属性,但我想创建标签和搜索英雄,我相信我可以做到这一点,所以滚动条必须调整到当前正在搜索的活动,非常感谢任何关于这个的建议。
最后,有没有办法从一开始就创建一半大小的图像?我尝试了 .style.width = "50%" 和 height auto 但它不起作用,因为它是一个 spritesheet =(。所以我使用 webkit 来缩小 div 但如果可能的话我更喜欢另一个选项。
感谢您阅读本文并对所有问题感到抱歉,这是我到目前为止所做的:
function selectHero() {
var gg = 1;
var bg = 0;
for (var i = 1; i < 114; i++) {
heroPics[i] = new Image();
heroPics[i].style.backgroundImage = "url(newHeroes.jpg)";
heroPics[i].style.width = "120px";
heroPics[i].style.height = "120px";
heroPics[i].style.backgroundPosition = (-(120 * i)) + "px" + " " + (-((Math.floor(i / 11)) * 120)) + "px";
heroPics[i].style.position = "absolute";
heroPics[i].style.left = -90 + (75 * gg) + "px";
heroPics[i].style.top = -30 + (75 * bg) + "px";
heroPics[i].style.webkitTransform = 'scale(0.6, 0.6)';
heroPics[i].draggable = false;
someDiv.appendChild(heroPics[i]);
//heroPics[i].addEventListener( "click", heroChosen, false );
gg ++;
if(gg > 17) {
gg = 1;
bg ++;
}
}
}
我听说 math.floor 使用了太多资源,我是否应该找到一个不同的解决方案,即使它更丑陋,因为现在它调用 math.floor 113 次?再次感谢
编辑:
找到了我关于调整图像大小的最后一个问题的解决方案:
background-size = 792px 792px;
只需在 css 类中将 1320x1320 缩小 60%,然后将 imgae 大小从 120 更改为 72,它就可以工作了。
还要感谢创建一个包含大部分属性的类并仅在需要时使用 JS 的有用提示。仍然需要滚动条和其他一些帮助!