我正在玩新的HTML5标准,以了解它可以提供什么以及学习东西......但我不明白为什么我的游戏在firefox中如此缓慢。
有几种方法可以选择“画”玩家和背景。 这可以在右下角选择。
我在 firefox中测试了游戏:
总而言之,所有超级慢的结果都是如此。 使用Html它完全滞后 用帆布看起来好一点但仍然完全落后......Google Chrome结果:
Google似乎运行的代码相当不错......它真的很糟糕。
Internet Explorer测试
所以这是有趣的部分。 Internet Explorer 9运行得非常好......它在我的计算机上几乎太快了。
所以我的问题是。 firefox不喜欢我的显卡吗?或哪里出错?也许我的代码太慢了?但是我已经完成了测试,只需要aprox 1 ms来运行重绘图片的时间间隔(正如计时器在右上角指示的那样名为intervalTimer。
而且我非常希望听到你得到的结果以及它是否只是firefox讨厌我的显卡。 : - (
此外,如果您可以看到我可以在哪里做一些改进,以使其在firefox中更好地工作。
以下是我的一些代码:
interval.js 文件运行setInterval并重新绘制播放器。
function interval() {
var startdate = +new Date(); // log start timestamp
if (general_slowmo > 9)
general_slowmo = 0;
else
general_slowmo++;
collisions();
if (drawmethod == "canvas") {
canvas.clearRect(0, 0, general_winwidth, general_winheight);
drawplayercanvas(p0x, p0y, 0);
}
else if (drawmethod == "html") {
drawplayerhtml(p0x, p0y, 0);
}
else {
drawImageWebGl(p0, p0x, (general_winheight - p0y) - general_playerheight);
}
var enddate = +new Date(); // log end timestamp
var diff = enddate - startdate;
$("#intervalTimer").html("intervalTimer: " + diff + "ms");
}
但是我在intervalTimer div上得到的只有0或1毫秒的时间。但我不知道是否计算了吸引玩家所需的时间?
在间隔内部碰撞运行:
function collisions() {
var spritex = p0x;
var spritey = p0y;
var jump = jumpp0;
var keyX = keyXp0;
var keyY = keyYp0;
var onground = ongroundp0;
if (keyX == -1) { //left movement
if (blockexists(spritex - 1, spritey) === false && blockexists(spritex - 1, spritey + general_blocksize) === false) {
spritex--;
}
}
if (keyX == 1) { //right movement
if (blockexists(spritex + general_playerwidth, spritey) === false && blockexists(spritex + general_playerwidth, spritey + general_blocksize) === false) {
spritex++;
}
}
if (jump != 0) {
var aboveone = blockexists(spritex, spritey + (general_playerheight - 1));
var abovetwo = blockexists((spritex + general_playerwidth - 1), spritey + (general_playerheight - 1));
if (aboveone === true || abovetwo === true) {
jump = 0;
if (toblock(spritex, spritey + (general_playerheight - 1)) == 2) {
removeblockarray(spritex, spritey + (general_playerheight - 1));
if (mapdrawmethod == "canvas")
removeblockcanvas(spritex, spritey + (general_playerheight - 1));
else
removeblockhtml(spritex, spritey + (general_playerheight - 1));
}
if (toblock((spritex + general_playerwidth - 1), spritey + (general_playerheight - 1)) == 2) {
removeblockarray((spritex + general_playerwidth - 1), spritey + (general_playerheight - 1));
if (mapdrawmethod == "canvas")
removeblockcanvas((spritex + general_playerwidth - 1), spritey + (general_playerheight - 1));
else
removeblockhtml((spritex + general_playerwidth - 1), spritey + (general_playerheight - 1));
}
spritey--;
}
else {
jump++;
spritey++;
if (jump > maxjump) {
jump = 0;
}
}
}
if (keyX != 0 || onground == false) {
if (blockexists(spritex, spritey - 1) === true || (blockexists(spritex + general_playerwidth - 1, spritey - 1) === true)) {
if (jump == 0)
onground = true;
}
else if (jump == 0) {
spritey--;
onground = false;
}
}
if (blockexists(spritex, spritey, "item") === true || blockexists(spritex + general_playerwidth - 1, spritey, "item") === true || blockexists(spritex, spritey + general_playerheight, "item") === true || blockexists(spritex + general_playerwidth - 1, spritey + general_playerheight, "item") === true) {
if (toblock(spritex, spritey) == 11) {
$("#diamcount").html(++general_numdiamonds);
}
else if (toblock(spritex + general_playerwidth - 1, spritey) == 11) {
$("#diamcount").html(++general_numdiamonds);
}
if (toblock(spritex, spritey + general_playerheight) == 11) {
$("#diamcount").html(++general_numdiamonds);
}
else if (toblock(spritex + general_playerwidth - 1, spritey + general_playerheight) == 11) {
$("#diamcount").html(++general_numdiamonds);
}
if (toblock(spritex, spritey) == 10 || toblock(spritex + general_playerwidth - 1, spritey) == 10 || toblock(spritex, spritey + general_playerheight) == 10 || toblock(spritex + general_playerwidth - 1, spritey + general_playerheight) == 10) {
if (keyY == 1) {
if (general_slowmo > 5) {
spritey++;
}
onground = true;
jump = 0;
}
if (keyY == -1) {
if (general_slowmo > 5) {
spritey--;
}
onground = true;
jump = 0;
}
}
}
p0x = spritex;
p0y = spritey;
jumpp0 = jump;
keyXp0 = keyX;
keyYp0 = keyY;
ongroundp0 = onground;
}
无论如何,我想说的是我想听听它为什么这么慢。如果你得到与我相同的结果。
也许是因为我把div放在画布上?
答案 0 :(得分:1)
如果您使用的是Firebug
插件,可能就是原因。
我的画布在Chrome上运行非常流畅,但在Firefox上非常慢且滞后。禁用firebug
后,它在Firefox上运行得更快,速度更快,适用于Chrome。
希望这会有所帮助。
答案 1 :(得分:0)
我在运行Firefox 18.0.2的Mac OS X 10.8.2上 - 它实际上比我的Chrome 25.0.1364.99运行游戏更快更流畅。只是偶然,我的Firefox刚刚更新到19.0,它看起来仍然很好而且流畅。
确保您没有运行任何可能与游戏中的JS /库冲突的扩展程序。禁用Firefox上的所有扩展程序并再试一次 - complete reinstall也可以帮助您消除可能导致缓慢的原因。