`
sanshizi
  • 浏览: 86347 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Javascript 游戏时钟小试

阅读更多
读了一篇<<如何实现游戏主循环(Game Loop)的详细解析>> 的文章, 用javascript实现一下,目前仍没有完全参透其中含义, 出来的效果不能另人满意


<html>
	<head>
		<meta http-equiv=Content-Type content="text/html;charset=utf-8">
		<title>Javascript 游戏时钟小试</title>
		<script type="text/javascript" src="jquery-1.6.4.js"></script>
		<style type="text/css">
			body{font-size: 14px;}
			.wrap{border:solid 1px #f60; width:500px; height:300px; position:relative;}
			.item{border:solid 1px #660; line-height:30px; height:30px;}
			.red{color:red;}
			.block{width:10px;height:10px;background-color:#aaa;position:absolute;z-index:10000;line-height:0;font-size:0;}
			.ss{width:1px;height:14px;background-color:#eee;color:#ff0;line-height:0;font-size:10px;line-height: 14px;margin-top: 1px;}
			#debug{position:fixed; border:solid 1px #f60; width:600px;height:100%;right:0;top: 0;overflow: scroll;}
		</style>
	</head>
	<body>
		<a href="javascript:start()">start</a> |
		<a href="javascript:pause()">pause</a> |
		addBlock<a href="javascript:addBlock()">[1]</a><a href="javascript:addBlock2()">[10]</a>(<span id="blocks">0</span>) |
		Frame: <span id='Frame'>0</span> |
		SkipedFrame: <span id='skipFrame'>0</span> |
		<a href="javascript:big()">复杂计算</a> |
		<a href="javascript:$('#debug')">ClearDebug</a>
		<div class="wrap" id="msg">
			<div id="block-x" class="block" style="top:20px;left:0;background-color:#f60;"></div>
		</div>
		<div class="wrap">
			<div class='ss' id='s_0'></div>
			<div class='ss' id='s_1'></div>
			<div class='ss' id='s_2'></div>
			<div class='ss' id='s_3'></div>
			<div class='ss' id='s_4'></div>
			<div class='ss' id='s_5'></div>
			<div class='ss' id='s_6'></div>
			<div class='ss' id='s_7'></div>
			<div class='ss' id='s_8'></div>
			<div class='ss' id='s_9'></div>
			<div class='ss' id='s_10'></div>
			<div class='ss' id='s_11'></div>
			<div class='ss' id='s_12'></div>
			<div class='ss' id='s_13'></div>
			<div class='ss' id='s_14'></div>
			<div class='ss' id='s_15'></div>
			<div class='ss' id='s_16'></div>
			<div class='ss' id='s_17'></div>
			<div class='ss' id='s_18'></div>
			<div class='ss' id='s_19'></div>
		</div>
		<div id="debug"></div>

		<script type="text/javascript">
			//模拟复杂计算
			function big(){
				//b = (new Date()).getTime();
				var i=0;
				while(i++ <500000){
					(new Date()).getTime();
				}
				//alert((new Date()).getTime() - b);
			}
	
			function GetTickCount(){return (new Date()).getTime();}
	
			var fps = 25;
			var SKIP_TICKS = 1000 / fps;
			var MAX_FRAMESKIP = 5;
			var next_game_tick = GetTickCount();
			var game_is_running = false;
			var interpolation = 0, loop = 0;
			var nowFrame = 0;
			var skipFrame = 0;
			var speed = 50;// px/s
			var timer;
			var time_interval = 10;
			var x = 0;
			var $bbbox=$('#block-x');
	
			function start(){
				if(game_is_running === true) return;
				game_is_running = true;
				next_game_tick = GetTickCount();
				timer = setInterval(function(){
					loops = 0;
					while( GetTickCount() > next_game_tick && loops < MAX_FRAMESKIP) {
						update_game();
						next_game_tick += SKIP_TICKS;
						loops++;
						skipFrame += loops > 1 ? 1 : 0;
						//debug(x)
						//$bbbox.width(x + 10);
					}
					
					interpolation = ( GetTickCount() + SKIP_TICKS  - next_game_tick ) / SKIP_TICKS;
					display_game( interpolation );
			
				},time_interval);
			}
	
			function pause(){
				clearInterval(timer);
				game_is_running = false;
			}
	
			function update_game(){
				nowFrame++;
				var i,l;
				for(i=0,l=arr1.length;i<l;i++){
					next(arr2[i]);
				}
			}

			function debug(){
				var x='';
				for(var j=0,len=arguments.length;j<len;j++){
					x+=' | ' + arguments[j];
				}
				$('#debug').prepend(x + '<br >')
				x = null;
			}

			var arr_c = [];
			function c(interpolation){
				arr_c.push(interpolation);
				while(arr_c.length>20) arr_c = arr_c.slice(1);
				var i;
				for(i=0,len=arr_c.length;i<len;i++){
					$('#s_'+i).css({width : arr_c[i] * 100 + 50});//.html(arr_c[i])
				}
			}

			//0,1,2,3,4,5
			function next(arr){
				arr[0] += arr[2] * arr[4] * SKIP_TICKS ;
				if(arr[0]<0){
					arr[0] = 0;
					arr[2] *= -1;
				}else if(arr[0]>=490){
					arr[0] = 490;
					arr[2] *= -1;
				}
				
				arr[1] += arr[3] * arr[5] * SKIP_TICKS;
				if(arr[1]<0){
					arr[1] = 0;
					arr[3] *= -1;
				}else if(arr[1]>290){
					arr[1] = 290;
					arr[3] *= -1;
				}
			}
	
			var arr1 = [];
			var arr2 = [];//[x,y,1,1,speed_x,speed_y]
			function display_game(interpolation){
				$('#Frame').html(nowFrame);
				$('#skipFrame').html(skipFrame);
				var i,l;
				for(i=0,l=arr1.length;i<l;i++){
					//debug(arr2[i][0], arr2[i][1]* interpolation)
					$(arr1[i]).css({left : arr2[i][0] , top : arr2[i][1]});
				}

				c(interpolation);
				
				//模拟很卡
				//if(Math.random()>0.99) big();
			}

			
			function addBlock(){
				var block = $('<div class="block" id="b'+ arr1.length +'"></div>');
				$('#msg').append(block);
				var a = Math.random() * speed / 1.1 + 2;
				var b = Math.sqrt(speed * speed - a * a);
				arr2.push([0,0,1,1,a/1000,b/1000]);
				arr1.push(block);
				block = null;
				$('#blocks').html(arr1.length);
			}

			function addBlock2(){
				var _i=0;
				while(_i++ <10) addBlock();
			}
	

		</script>


	</body>
</html>

分享到:
评论

相关推荐

    JavaScript 数字时钟代码

    JavaScript 数字时钟代码 function Time(){ if (!document.layers&&!document.all) return var Timer=new Date() var hours=Timer.getHours() var minutes=Timer.getMinutes() var seconds=Timer.getSeconds()...

    javascript实现动态时钟

    在JavaScript编程中,动态时钟是一种常见的练习,用于学习时间的获取、处理和显示。这个项目的核心在于利用JavaScript的Date对象来实时获取当前时间,并通过CSS3来展示一个具有动态效果的时钟界面。 首先,...

    javascript背景时钟实现方法.docx

    JavaScript 背景时钟实现方法是一种使用 JavaScript 实现时钟背景效果的方法,该方法主要介绍了 JavaScript 背景时钟实现方法,涉及 JavaScript 时间及页面元素样式的相关操作技巧。 时钟显示位置 在该方法中,...

    倒影时钟 javascript 倒影 时钟 源码 html IE

    "倒影时钟 javascript" 这个标题提到了两个主要概念:倒影时钟和JavaScript。倒影时钟是一种显示时间的视觉效果,它在设计上模拟了物体在水面或其他平面上产生的倒影,为网页增添了动态和美感。而JavaScript是一种...

    原生JavaScript数字时钟-内含29种样式

    在本文中,我们将深入探讨如何使用原生JavaScript创建一个数字时钟,并且涵盖29种不同的样式。这个项目不仅展示了JavaScript的基本概念,还涉及到CSS和HTML的交互,以及动态更新页面内容的技术。让我们一起深入了解...

    javascript时钟

    JavaScript 12小时制时钟是一种常见的编程任务,它用于在网页上显示当前时间,以12小时格式(AM/PM)表示。在JavaScript中,我们可以利用内置的Date对象和一些基本的字符串处理来实现这一功能。下面我们将深入探讨...

    javascript+html实现的时钟

    这里的`&lt;style&gt;`标签定义了时钟显示的样式,而`&lt;script&gt;`标签则链接了一个名为`script.js`的外部JavaScript文件,这个文件将包含实现时钟功能的代码。 接下来,我们讨论JavaScript部分。`script.js`文件会包含一个...

    JavaScript动态时钟.zip

    在本项目"JavaScript动态时钟.zip"中,我们将会探讨如何利用JavaScript来实现一个实时更新、显示系统当前时间的动态时钟,以及可能存在的两种不同实现方式。 首先,动态时钟的基本原理是通过JavaScript的`Date`对象...

    JavaScript开发一个时钟

    &lt;title&gt;JavaScript时钟 &lt;div id="clock"&gt;&lt;/div&gt; &lt;script src="clock.js"&gt;&lt;/script&gt; ``` 接下来,我们使用CSS(层叠样式表)来设计时钟的样式。在`clock.css`文件中,我们可以设置时钟的背景、边框、字体等...

    Javascript数字时钟代码

    ### JavaScript数字时钟代码解析与实现 #### 一、引言 在现代Web开发中,动态显示时间的应用非常广泛,从简单的网站时钟到复杂的实时数据更新,都离不开对当前时间的准确把握。本文将深入解析一个基于JavaScript的...

    JavaScript Canvas绘制时钟

    在这个场景中,我们将深入探讨如何使用JavaScript和Canvas API来创建一个实时更新的时钟。 首先,我们需要在HTML中创建一个`&lt;canvas&gt;`元素,它是JavaScript画布的基础: ```html &lt;!DOCTYPE html&gt; &lt;title&gt;...

    javascript数字时钟

    JavaScript数字时钟是一种常见的网页交互元素,它能够实时显示当前时间,给用户带来动态的视觉体验。本项目利用JavaScript语言创建了一个数字时钟,并且结合了背景图片,使其可以作为桌面壁纸使用,增加了视觉吸引力...

    javascript实现炫酷的网页版时钟

    这款炫酷的网页时钟是通过JavaScript技术实现的,为网页增添了一抹时尚和创意的色彩。时钟界面设计简洁美观,融合了令人惊艳的动态效果,为用户提供了一种全新的时间感知体验。 通过巧妙运用JavaScript编写的时钟...

    javascript flip 时钟

    JavaScript Flip时钟是一种独特的时间显示方式,它模拟了传统翻页钟的工作原理,通过翻转数字卡片来展示当前时间。这种设计风格在网页和应用程序中常用于增添视觉吸引力和交互体验。下面将详细介绍JavaScript Flip...

    javascript 旋转时钟 使用rotate属性 transform 兼容版本

    在JavaScript和CSS3的世界里,实现一个旋转时钟是一个典型的动画效果应用。本文将深入探讨如何使用`rotate`属性和`transform`函数在JavaScript中创建一个兼容多种浏览器的旋转时钟。 首先,让我们理解`transform`这...

    JavaScript动态时钟模版

    JavaScript写的一个动态时钟模版,可以嵌在任何HTML页面中

    javascript写出的时钟

    【JavaScript实现的时钟】 在Web开发中,JavaScript是一种不可或缺的脚本语言,它能够为网页增添交互性和实时性。本示例中的“JavaScript写出的时钟”就是一个很好的实例,展示了如何利用JavaScript、HTML和CSS这三...

    javascript倒计时时钟

    本文件为语言实现通讯录的管理系统,采用三层架构,希望大家共同学习

    js 特效 html 特效 纯JavaScript时钟

    js 特效 html 特效 纯JavaScript时钟 js 特效 html 特效 纯JavaScript时钟

    JavaScript 小霸王坦克游戏源码

    JavaScript 小霸王坦克游戏源码JavaScript 小霸王坦克游戏源码JavaScript 小霸王坦克游戏源码JavaScript 小霸王坦克游戏源码JavaScript 小霸王坦克游戏源码JavaScript 小霸王坦克游戏源码JavaScript 小霸王坦克游戏...

Global site tag (gtag.js) - Google Analytics