`
sanshizi
  • 浏览: 85494 次
  • 性别: 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>
		[url=javascript:start()]start[/url] |
		[url=javascript:pause()]pause[/url] |
		addBlock[url=javascript:addBlock()][1][/url][url=javascript:addBlock2()][10][/url](<span id="blocks">0</span>) |
		Frame: <span id='Frame'>0</span> |
		SkipedFrame: <span id='skipFrame'>0</span> |
		[url=javascript:big()]复杂计算[/url] |
		[url=javascript:$('#debug')]ClearDebug[/url]
		<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>

0
0
分享到:
评论

相关推荐

    基于JavaScript的数字时钟

    在这个场景中,我们讨论的是一个用JavaScript实现的数字时钟,它旨在实时显示当前时间,并且针对不同的浏览器(如Internet Explorer和Firefox)进行了兼容性优化。 首先,让我们深入了解一下JavaScript数字时钟的...

    基于javascript实现动态时钟效果

    本篇内容主要围绕如何使用JavaScript编程语言制作一个动态时钟效果,包括显示当前日期和时间,并且每秒更新一次,这种动态时钟在网页设计中能够提供实时的用户体验。 首先,需要了解JavaScript是一种高级的、解释型...

    javascript动态时钟

    JavaScript动态时钟是一种常见的网页交互元素,用于实时显示当前时间,增强用户界面的活力与互动性。本主题将深入探讨如何使用JavaScript实现一个动态更新的时钟,包括基础概念、核心代码以及相关知识点。 首先,...

    简单的javascript时钟

    我个人编写的简单的javascript时钟 供初学朋友学习使用

    Javascript数字时钟代码

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

    javascript经典特效---纯JavaScript时钟.rar

    在本主题中,我们将深入探讨“纯JavaScript时钟”这一经典特效,它展示了JavaScript如何实时更新页面上的时间显示,无需依赖任何外部库,如jQuery。 在纯JavaScript时钟中,我们首先需要理解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时钟常用于创建动态用户体验,例如显示实时倒计时、日程提醒...

    JavaScript·时钟.html

    简单的 JavaScript 实现小时钟

    javascript数字时钟

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

    javascript实现炫酷的网页版时钟

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

    JavaScript实时时钟代码(东)

    ### JavaScript实时时钟代码解析与应用 #### 一、引言 在Web开发中,实时时钟是一个常用的功能,它可以用于显示当前的时间日期等信息。本文将深入分析一个基于JavaScript的实时时钟代码示例,并对其进行详细的解释...

    一个javascript做的时钟

    在这个场景中,我们讨论的是一个用JavaScript实现的时钟。时钟是计算机编程中一个基础但实用的例子,它展示了如何利用JavaScript的Date对象以及DOM操作来实时更新页面上的时间显示。 首先,我们要理解JavaScript的...

    javascript时钟.zip

    在这个"javascript时钟.zip"压缩包中,我们很显然关注的是如何使用JavaScript来实现一个实时更新的时钟功能。这个功能对于网页开发者来说非常重要,因为它能够帮助用户了解当前时间,增强用户体验。 在JavaScript中...

    javascript倒计时时钟

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

    javascript时钟

    JavaScript时钟是一种利用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