不做死就不会死

    尽管花儿很漂亮,但只不过是朵漂亮的花——仅此而已。并无任何非凡之处。而你只是个会编程的人。或许你很优秀,但没有什么与众不同。你与我、或者这个星球上其他所有人都是同类。
    你不仅要吃喝拉撒。当然,还要睡。(最好)在很久以后,你会驾鹤西游,你所创造的一切也将随之消失。甚至是象征不朽的金字塔很久以后也会消失。你知道那些建造金字塔的人的名字么?即便你真的知道,难道你知道了就那么重要么?并非如此。金字塔依然耸立在那里,或是随风而逝。平淡无奇。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

    上个月我写了一篇关于网页游戏图片预加载技术的文章,叫《很山寨的网页游戏图片预加载技术》。这个方案用到项目上后,发现了一些问题,经过大家的努力,这些问题基本得到解决,最终形成了一个产品级的预加载方案。目前,使用该方案的游戏项目已经顺利过了单元测试与整体测试,即将内测。

   

    主要思路就是利用浏览器的缓存功能,尽可能简单的实现加载过程。因此该方案生效的前提是浏览器一定要开启缓存功能(IE、Firefox等默认都是开启的)

   

    1.首先,你需要把所有需要预加载的图片放到电脑上的一个文件夹下面。我的系统是ArchLinux的,所以我写了一个bash脚本来扫描图片文件夹下面所有的图片,并生成一段HTML代码,脚本代码如下

#!/bin/bash

for name in $(find .|grep '\.jpg$')

do

  echo "<img src=\"$name\">"

done

for name in $(find .|grep '\.png$')

do

  echo "<img src=\"$name\">"

done

保存为bat.sh,然后设置其为可执行权限并放到图片目录下

接着,打开一个新的tyy窗口,运行.\bat.sh >> 1.txt。就可以得到一份所有图片文件的HTML代码了,代码存储在1.txt里面。

2.在游戏主页面前加入一个loading页面,代码如下

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" style="overflow-x:hidden; overflow-y:hidden;">

<head>



<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>XX网页游戏</title>



<style type="text/css">

#loading-black{  background-color:#000000; z-index:3000; width:100%; height:10000;}

#loading{width:100%; height:100%; padding-top:212px; text-align:center; margin:0 auto; z-index:3000;}

</style>



<script language="javascript">

var iframe = document.createElement("iframe");



function HideLoading()

{

	

	document.getElementById("loading-black").style.display = "none";

	//iframe.style.display = "none";

	

	//iframe.style.display = "block";

}



function GameLoop()

{

	iframe.src = "index.php?ac=5game";



	if (iframe.attachEvent){    

		iframe.attachEvent("onload", function(){        

			;//alert("Local iframe is now loaded.");    

		});

	} else {

		iframe.onload = function(){

			;//alert("Local iframe is now loaded.");

		};

	}

	iframe.setAttribute('width', '100%');

	iframe.setAttribute('height', '632');

	iframe.setAttribute('frameborder', '0', 0);

	iframe.setAttribute('marginheight', '0');

	iframe.setAttribute('marginwidth', '0');

	iframe.setAttribute('style', 'overflow-x:hidden; overflow-y:hidden; position:absolute; margin-left:0px; margin-top:0px;');

	

	document.body.appendChild(iframe);

	setTimeout ("HideLoading()",5000 )

}



	function closeWindow() {

		

		//关闭游戏标示

		jQuery.ajax({

			type: 	"POST",

			url: 	"index.php?ac=login&sac=log_out",

			async: false, //ajax同步

			data:    "action=del_check",

			success: function(msg){

						//alert('ddddddddddd'+msg);

						if(msg == 'succ'){

							

							location.href = 'index.php';

						}

						return;

					}

		});

	}



	//禁止用F5键、否则关闭页面

	function document.onkeydown()      

	{      

		if(event.keyCode==116)      

		{  

			event.keyCode   =   0;

			event.cancelBubble   =   true;   

			//closeWindow();

			return false;      

		}

	}



	//浏览器关闭事件

	function  window.onunload(){

		

		closeWindow();

	}

	//浏览器关闭事件

	function  window.onbeforeunload(){ 

		   

		closeWindow();

	}



</script>



</head>

<!--<body bgcolor="#000" onload="window.location.href='index.php?ac=5game';">-->

<body bgcolor="#000" onload="GameLoop()" style="margin:0 0 0 0px; margin-left:auto; margin-right:auto; text-align:center; overflow-x: hidden; overflow-y: hidden;" >

<div id="loading-black" style="display:block">

	<div id="loading">

		<img src="2008825893756277805.gif" />

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

		<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

	</div>

</div>

<div style="overflow-x:hidden; overflow-y:hidden; width:0px; height:0px;">

	这里粘贴1.txt的内容
</div>

</body>

</html>

这里要说明的几点,整个页面的原理是在下面div图片加载完成后,通过js动态加上一个iframe,这个iframe就是游戏主页面,这样做主要是为了避免跳转网页后,图片闪烁加载的问题,但是这个iframe加载的时候,仍然存在闪烁的问题,所以先将其置于用户可视范围之外,待加载完成后,再调整iframe的位置。这里隐藏了页面上的横竖滚动条,这样,用户就看不到iframe的加载了,取而代之的是一个loading的div层。

    这个方案在上次方案的基础上,除了力求简单外,还解决了加载图片闪烁、禁止刷新的问题,在IE7、IE8及Firefox下测试通过。

posted on 2011-03-01 09:48  张家瑞  阅读(2011)  评论(6编辑  收藏  举报