html5/javascript游戏在ie8中运行缓慢
我们用html/javascript制作了一个游戏。不幸的是,这个项目有很多秘密,所以我不能透露太多的代码 然而,其本质是它在所有浏览器上都运行得非常好,除了ie,通过使用html5/javascript游戏在ie8中运行缓慢,javascript,html,internet-explorer,Javascript,Html,Internet Explorer,我们用html/javascript制作了一个游戏。不幸的是,这个项目有很多秘密,所以我不能透露太多的代码 然而,其本质是它在所有浏览器上都运行得非常好,除了ie,通过使用标记;现在唯一的问题是ie8,游戏需要与之兼容。我知道它很少与html5集成,但是这个游戏实际上可以运行,只是速度非常慢 请记住,ie9和ie10在使用标签之前也是非常慢的。这个游戏在某种意义上是先进的或其他的。所以我想知道是否有人知道什么会导致这样的问题 我将尝试在此处添加一些模糊代码,但请记住,这不是整个代码,只是主循环:
标记;现在唯一的问题是ie8,游戏需要与之兼容。我知道它很少与html5集成,但是这个游戏实际上可以运行,只是速度非常慢
请记住,ie9和ie10在使用标签之前也是非常慢的。这个游戏在某种意义上是先进的或其他的。所以我想知道是否有人知道什么会导致这样的问题
我将尝试在此处添加一些模糊代码,但请记住,这不是整个代码,只是主循环:
// Global constants:
var PLAYGROUND_WIDTH = 1000;
var PLAYGROUND_HEIGHT = 1000;
var REFRESH_RATE = 30;
//Constants for the gameplay
var smallStarSpeed = 1; //pixels per frame
var mediumStarSpeed = 3; //pixels per frame
var bigStarSpeed = 5; //pixels per frame
var percent = 1;
// --------------------------------------------------------------------
// -- the main declaration: --
// --------------------------------------------------------------------
$(function(){
//Calculate playground width and height:
PLAYGROUND_WIDTH = $(window).width() - 20;
PLAYGROUND_HEIGHT = $(window).height() - 20;
//Calculate Layour for responsive Design.
//Calculate Area:
// Animations declaration:
// The background:
var DM = new DeckManager;
var IM = new ImageManager;
IM.Create("Image1");
//DEBUG: Loading images for demo, this should be done using the image manager in the actual game.
var background1 = new $.gameQuery.Animation({
imageURL: "http://gamequeryjs.com/demos/3/background1.png"});
var background2 = new $.gameQuery.Animation({
imageURL: "http://gamequeryjs.com/demos/3/background2.png"});
var background3 = new $.gameQuery.Animation({
imageURL: "http://gamequeryjs.com/demos/3/background3.png"});
var background4 = new $.gameQuery.Animation({
imageURL: "http://gamequeryjs.com/demos/3/background4.png"});
var background5 = new $.gameQuery.Animation({
imageURL: "http://gamequeryjs.com/demos/3/background5.png"});
var background6 = new $.gameQuery.Animation({
imageURL: "http://gamequeryjs.com/demos/3/background6.png"});
var Face = new Array();
IM.Load("image2");
IM.Load("image3");
IM.Load("image4");
IM.Load("image5");
var resizeTimer;
//Event to handle resizing
//This event should fire under any circimstance, except when safari is NOT maximized, and windows resolution is changed (WTF?)
$(window).resize(function ()
{
clearTimeout(resizeTimer);
resizeTimer = setTimeout(Resized, 100);
});
//Actual Resizing Event
function Resized()
{
//Your function goes here
//Calculate playground width and height:
PLAYGROUND_WIDTH = $(window).width() - 20;
PLAYGROUND_HEIGHT = $(window).height() - 20;
//Calculate Layout for responsive Design.
};
// Initialize the game:
$("#playground").playground({
height: PLAYGROUND_HEIGHT,
width: PLAYGROUND_WIDTH,
keyTracker: true,
mouseTracker: true});
// Initialize the background
$.playground()
.addGroup("background", {width: PLAYGROUND_WIDTH,
height: PLAYGROUND_HEIGHT})
.addSprite("background1", {animation: background1,
width: PLAYGROUND_WIDTH,
height: PLAYGROUND_HEIGHT})
.addSprite("background2", {animation: background2,
width: PLAYGROUND_WIDTH,
height: PLAYGROUND_HEIGHT,
posx: PLAYGROUND_WIDTH})
.addSprite("background3", {animation: background3,
width: PLAYGROUND_WIDTH,
height: PLAYGROUND_HEIGHT})
.addSprite("background4", {animation: background4,
width: PLAYGROUND_WIDTH,
height: PLAYGROUND_HEIGHT,
posx: PLAYGROUND_WIDTH})
.addSprite("background5", {animation: background5,
width: PLAYGROUND_WIDTH,
height: PLAYGROUND_HEIGHT})
.addSprite("background6", {animation: background6,
width: PLAYGROUND_WIDTH,
height: PLAYGROUND_HEIGHT,
posx: PLAYGROUND_WIDTH})
$("#background").addSound(bgmusic);
//Setup obects so they can be reached randomly
var Vals = new Array();
var Vals2 = new Array();
var Turned = 0;
var TurnedMax = 2;
//This will ensure that two cards of each are added to the deck
//This function will be handled by the imagemanager at later stages.
for (var i = 0; i < NumberOfCards; ++i)
{
Vals[i] = Math.floor(i/2);
}
Vals2[0]=3;
DM.Create(Vals, Vals2, NumberOfCards, 1);
//Generate the actual object
$.playground()
.addGroup("object", {width: PLAYGROUND_WIDTH,
height: PLAYGROUND_HEIGHT})
for (var i = 0; i < NumberOfCards+1; ++i)
{
//Generate unique ID for the card
var name = "object"+i;
val = DM.Pushobject();
//Add the actual card to the playground, we spawn them in a responsive awy based on the resolution of the game.
$("#object").addSprite(name, {animation: IM.GetBack(), width: 208, height: 303, posx: (i%(Math.ceil(noc*Ratio))) *SpaceX + SpaceX - 104 + LastYOff * ( i>= (NumberOfCards + NumberOfCardsBonus) - ((NumberOfCards + NumberOfCardsBonus)%(Math.ceil(noc*Ratio))) ) , posy: Math.floor( i / (Math.ceil(noc*Ratio)) ) * SpaceY + SpaceY - 152 });//
//Add a class to the object, this, does nothing except make us able to search for objects with the same class later in the code.
$("#"+name).addClass("object");
//Create the actual class for the object, this will add logic to the object.
$("#"+name)[0].Cards = new Cards($("#"+name));
$("#"+name)[0].Cards.Create(val, IM.GetImage(val), IM.GetImage(3), IM.GetBack(), DM.LastBonus(), Scale);
//Add a mousedown event for the card, this mousedown will be run in the main
//environment rather than the class environment to make sure that we have access
//to all the data we need access to.
$("#"+name).mousedown(function(e)
{
var Ready = 0;
$(".object").each(function()
{
if (this.object.visible && (this.object.Turning==true || this.object.FlippedV==true))
{
Ready++;
}
});
//Find all the objects with the tag/class card.
$(".object").each(function()
{
//Check if the mouse clicked the object, if it's still part of the game, and if it has not been flipped.
if (e.clickedobject
&& Ready<TurnedMax)
{
//Run the clicked event for the card, this will start events etc.
this.object.Clicked();
//Increase the turned counter, if we have turned the correct amount of objectto be compared
//then compare them.
if (this.Cards.Bonus == false)
{
Turned++;
if (Turned==TurnedMax)
{
//We have turned the amount of object needed
//Find out which value the first object has, and use this as a base to compare if cards match.
//Also instantiate a counter for the amount of cards actually matching.
//It's done this way if you want a variable number of object needed for a match.
var Correct = this.object.value;
var CorrectAmount = 0;
$(".object").each(function()
{
//For each card, if they are flipped, are not going into hiding/deletion, and has the
//Correct value, increase the counter for the number of objects matching.
if (this.object.Flipped == true && this.object.Hiding==0 && this.object.value == Correct)
CorrectAmount++;
});
//If we have a correct match
if (CorrectAmount==TurnedMax)
{
$(".object").each(function()
{
//Foreach object that is flipped and not in hiding, delete them (aka. yay, you got a match).
if (this.object.Flipped==true && this.object.Hiding==0)
this.object.SetVisible(false);
});
}
$(".object").each(function()
{
//Foreach objectthat was not in hiding and was not part of the match, unflip them again.
if (this.object.Flipped==true && this.object.Hiding==0)
this.object.Hide();
});
Turned=0;
}
}
}
});
});
}
// this sets the id of the loading bar (NOT USED YET):
$.loadCallback(function(percent){
$("#loadingBar").width(400*percent);
});
//initialize the start button
$("#startbutton").click(function(){
$.playground().startGame(function(){
$("#welcomeScreen").remove();
});
})
//This is for the background animation (DEBUG)
$("#playground").registerCallback(function(){
$("#background1").x(($("#background1").x() + smallStarSpeed +PLAYGROUND_WIDTH) % (2 * PLAYGROUND_WIDTH) - PLAYGROUND_WIDTH);
$("#background2").x(($("#background2").x() + smallStarSpeed +PLAYGROUND_WIDTH) % (2 * PLAYGROUND_WIDTH) - PLAYGROUND_WIDTH);
$("#background3").x(($("#background3").x() + mediumStarSpeed +PLAYGROUND_WIDTH) % (2 * PLAYGROUND_WIDTH) - PLAYGROUND_WIDTH);
$("#background4").x(($("#background4").x() + mediumStarSpeed +PLAYGROUND_WIDTH) % (2 * PLAYGROUND_WIDTH) - PLAYGROUND_WIDTH);
$("#background5").x(($("#background5").x() + bigStarSpeed +PLAYGROUND_WIDTH) % (2 * PLAYGROUND_WIDTH) - PLAYGROUND_WIDTH);
$("#background6").x(($("#background6").x() + bigStarSpeed +PLAYGROUND_WIDTH) % (2 * PLAYGROUND_WIDTH) - PLAYGROUND_WIDTH);
//Basic Game Engine!!
$(".object").each(function()
{
//For each card, perform their step event.
this.object.Step();
});
}, REFRESH_RATE);
});
//全局常量:
var\u宽度=1000;
var\u高度=1000;
var刷新率=30;
//游戏中的常数
var smallStarSpeed=1//每帧像素数
var-mediumStarSpeed=3//每帧像素数
var-bigStarSpeed=5//每帧像素数
风险值百分比=1;
// --------------------------------------------------------------------
//--主要宣言:--
// --------------------------------------------------------------------
$(函数(){
//计算操场宽度和高度:
操场宽度=$(窗口).WIDTH()-20;
操场高度=$(窗户)。高度()-20;
//计算响应性设计的布局。
//计算面积:
//声明:
//背景:
var DM=新的DeckManager;
var IM=新的ImageManager;
IM.创建(“图像1”);
//调试:为演示加载图像,这应该在实际游戏中使用图像管理器来完成。
var background1=new$.gameQuery.Animation({
图像URL:“http://gamequeryjs.com/demos/3/background1.png"});
var background2=new$.gameQuery.Animation({
图像URL:“http://gamequeryjs.com/demos/3/background2.png"});
var background3=new$.gameQuery.Animation({
图像URL:“http://gamequeryjs.com/demos/3/background3.png"});
var background4=新$.gameQuery.Animation({
图像URL:“http://gamequeryjs.com/demos/3/background4.png"});
var background5=新$.gameQuery.Animation({
图像URL:“http://gamequeryjs.com/demos/3/background5.png"});
var background6=new$.gameQuery.Animation({
图像URL:“http://gamequeryjs.com/demos/3/background6.png"});
var Face=新数组();
IM.Load(“图像2”);
即时加载(“图像3”);
即时加载(“图像4”);
IM.Load(“图像5”);
var树脂定时器;
//事件来处理大小调整
//此事件应在任何情况下触发,safari未最大化且windows分辨率已更改(WTF?)时除外
$(窗口)。调整大小(函数()
{
clearTimeout(resizeTimer);
resizeTimer=setTimeout(已调整大小,100);
});
//实际调整大小事件
函数大小调整()
{
//你的功能在这里
//计算操场宽度和高度:
操场宽度=$(窗口).WIDTH()-20;
操场高度=$(窗户)。高度()-20;
//计算响应性设计的布局。
};
//初始化游戏:
$(“#游乐场”)。游乐场({
高度:操场高度,
宽度:操场宽度,
键盘跟踪器:没错,
捕鼠器:true});
//初始化背景
$游乐场()
.addGroup(“背景”{宽度:操场\宽度,
高度:操场(高度})
.addSprite(“背景1”,{动画:背景1,
宽度:操场宽度,
高度:操场(高度})
.addSprite(“背景2”,{动画:背景2,
宽度:操场宽度,
高度:操场高度,
posx:操场(宽度})
.addSprite(“背景3”,{动画:背景3,
宽度:操场宽度,
高度:操场(高度})
.addSprite(“background4”,{动画:background4,
宽度:操场宽度,
高度:操场高度,
posx:操场(宽度})
.addSprite(“背景5”,{动画:背景5,
宽度:操场宽度,
高度:操场(高度})
.addSprite(“背景6”,{动画:背景6,
宽度:操场宽度,
高度:操场高度,
posx:操场(宽度})
$(“#背景”).addSound(bgmusic);
//设置对象,以便可以随机访问它们
var Vals=新数组();
var Vals2=新数组();
var=0;
var-TurnedMax=2;
//这将确保向牌组中分别添加两张牌
//此功能将在稍后阶段由imagemanager处理。
对于(变量i=0;i=(NumberOfCards+NumberOfCardsBonus)-(NumberOfCards+NumberOfCardsBonus)%(Math.ceil(noc*Ratio))),posy:Math.floor(i/(Math.ceil(noc*Ratio)))SpaceY+SpaceY-152})//
//在对象中添加一个类,除了使我们能够在代码的后面搜索具有相同类的对象之外,它什么都不做。
$(“#”+name).addClass(“对象”);
//创建t
$("#background1").x(($("#background1").x() + smallStarSpeed +PLAYGROUND_WIDTH) % (2 * PLAYGROUND_WIDTH) - PLAYGROUND_WIDTH);
var $bg1 = $("#background1");
$bg1.x(($bg1.x() + smallStarSpeed +PLAYGROUND_WIDTH) % (2 * PLAYGROUND_WIDTH) - PLAYGROUND_WIDTH);