我建议大家先学会些基础的JS,再学jquery,这样会更好接受些新的东西.今天我们要试着做个js经典游戏,打乒乓球的游戏,这款游戏大概是我做得最多次的了,我有用过xna、flash、js都做过同一款。先上张截图,不然大伙还不知道是什么东西.
它的演示地址是:http://www.lovewebgames.com/demo/gamepingbang/
采用的技术是jquery+gamequery, jquery大家都知道是什么了,本文重点介绍下gamequery,gamequery是一款jquery插件,它的官方网址是:
http://gamequery.onaluf.org/ ,它的作用是为了更容易的开发JS小游戏,大家可以去它网站上看下,有很多案例了,包括JS版的拳皇。
语言组织能力有点差,就不多说了,上代码吧!
<script> <BR>var game=function(){ <BR>var private={}; <BR>private.PLAYGROUND_WIDTH=300; <BR>private.PLAYGROUND_HEIGHT=400; <BR>private.status=-1; <BR>private.speed=30; <BR>var get=function(key){ <BR>return private[key]; <BR>} <BR>var set=function(key,val){ <BR>private[key]=val; <BR>} <BR>var playground; <BR>return{ <BR>init:function(){ <BR>$("#gradeinfo").remove(); <BR>playground=$("#playground").playground({height:get("PLAYGROUND_HEIGHT"),width:get("PLAYGROUND_WIDTH"),RefreshRate:get("speed") }); <BR>$('#playground').css('width', get('PLAYGROUND_WIDTH')); <BR>$('#playground').css('height', get('PLAYGROUND_HEIGHT')); <BR>$('#playground').css('position', 'relative'); <BR>$('#playground').css('border', '1px solid #ccc'); <BR>this.initBall(); <BR>this.initPlayer(); <BR>$("#sceengraph").css("visibility","visible"); <BR>$('#player').get(0).gameQuery.score = 0; <BR>var classObj = this; <BR>$().playground().registerCallback(function(){ <BR>var status = get('status'); <BR>if (status > 0) { <BR>classObj.renderBall(); <BR>} <BR>},get("speed")); <BR>}, <BR>initBall:function(){ <BR>$("#ball").remove(); <BR>playground.addSprite('ball', { animation:$.gameQuery.Animation( { imageURL:"./blank.gif" } ), width:10, height:10 }); <BR>$('#ball').get(0).gameQuery.velX = 4; <BR>$('#ball').get(0).gameQuery.velY = 4; <BR>$("#ball").css("top", get('PLAYGROUND_HEIGHT')-20) <BR>$("#ball").css("left", (get('PLAYGROUND_WIDTH')-10)/2) <BR>}, <BR>initPlayer:function(){ <BR>$("#player").remove(); <BR>playground.addSprite("player",{ animation:$.gameQuery.Animation( { imageURL:"./blank.gif" } ),width:50, height:8,posx:(get('PLAYGROUND_WIDTH')-50)/2,posy:get('PLAYGROUND_HEIGHT')-10}); <BR>$("#player").addClass("player"); <BR>}, <BR>renderBall:function(){ <BR>var ballPosition = $('#ball').position(); <BR>var PLAYGROUND_WIDTH = get('PLAYGROUND_WIDTH'); <BR>var PLAYGROUND_HEIGHT = get('PLAYGROUND_HEIGHT'); <BR>ballPosition.top-=$('#ball').get(0).gameQuery.velY; <BR>ballPosition.left+=$('#ball').get(0).gameQuery.velX; <BR>$('#ball').css('top', ballPosition.top); <BR>$('#ball').css('left', ballPosition.left); <BR>if (ballPosition.top <= 0) { <BR>$('#ball').get(0).gameQuery.velY = -$('#ball').get(0).gameQuery.velY; <BR>} <BR>if(ballPosition.left<=0 || ballPosition.left+$('#ball').width()>=PLAYGROUND_WIDTH){ <BR>$('#ball').get(0).gameQuery.velX = -$('#ball').get(0).gameQuery.velX; <BR>} <BR>$("#ball").collision("#player").each(function(){ <BR>$('#ball').get(0).gameQuery.velY = -$('#ball').get(0).gameQuery.velY; <BR>$('#player').get(0).gameQuery.score++; <BR>}); <BR>if(ballPosition.top+$('#ball').height() >= PLAYGROUND_HEIGHT){ <BR>playground.addSprite("gradeinfo",{width:100,height:80,posx:100,posy:100}); <BR>$("#gradeinfo").html("游戏结束!<br/>得分:"+$('#player').get(0).gameQuery.score); <BR>set('status', -1); <BR>} <BR>}, <BR>pause:function(){ <BR>if(get('status')==0){ <BR>set('status',1); <BR>}else{ <BR>set('status',0); <BR>} <BR>}, <BR>keyDownHandler: function(evt) { <BR>// console.log(evt); <BR>var thisObj = this; <BR>switch(evt.keyCode) { <BR>case 13: <BR>if (get('status') == -1) { <BR>this.start(); <BR>} else { <BR>this.pause(); <BR>} <BR>break; <BR>case 37: <BR>if (! this.moveStaus) { <BR>this.moveStaus = window.setInterval( function() { thisObj.movePlayer('#player', -4); }, 20); <BR>} <BR>break; <BR>case 39: <BR>if (! this.moveStaus) { <BR>this.moveStaus = window.setInterval( function() { thisObj.movePlayer('#player', 4); }, 20); <BR>} <BR>break; <BR>} <BR>}, <BR>keyUpHandler:function(evt){ <BR>window.clearInterval(this.moveStaus); <BR>this.moveStaus=null; <BR>}, <BR>movePlayer:function(player, dir){ <BR>if (get('status') == 1) { <BR>var pos = $(player).position(); <BR>var newPos = pos.left+dir; <BR>if (newPos > 0 && newPos+$(player).width() < get('PLAYGROUND_WIDTH')) { <BR>$(player).css('left', newPos); <BR>} <BR>} <BR>}, <BR>start:function(){ <BR>if (get('status') == -1) { <BR>set('status', 1); <BR>$().playground().startGame(function(){ <BR>$("#welcome").remove(); <BR>}); <BR>} <BR>} <BR>} <BR>}() <BR>$(function(){ <BR>game.init(); <BR>$(document).keydown(function(evt){ <BR>game.keyDownHandler(evt); <BR>}); <BR>$(document).keyup(function(evt){ <BR>game.keyUpHandler(evt); <BR>}); <BR>}); <BR></script>
然后我们来开始讲解:
首先是playground,此函数定义要用于显示游戏 div,这里定义的是300*400,第三个参数是刷新率,默认是30.
playground.addSprite就是在游戏场景里添加精灵,这款游戏主要是一个小球,一个板。就这样,游戏算是完成一半了,然后给精灵加上速度,jquery对象的gameQuery.obj就可以了,这里写的是$().gameQuery.velX,再然后是调用renderBall进行球运动,再监视按键控制板的运动,最后就是检测碰撞。
球与板的碰撞,球与墙面的碰撞, gamequery提供有一个方法来检测,collision(filter),如:
$("#ball").collision("#player").each(function(){
$('#ball').get(0).gameQuery.velY = -$('#ball').get(0).gameQuery.velY;
$('#player').get(0).gameQuery.score++;
});
这里碰撞后就改变了Y轴的方向.
http://gamequery.onaluf.org/api.php
在这里,可以看到它的API,基本上游戏该有的它都有了,看下例子就明白了,是不是很简单?由于这东西是几年前做的,我也讲不清楚了,有兴趣的可以研究下。这里还有教程:http://gamequery.onaluf.org/tutorials/1/

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

將矩陣電影特效帶入你的網頁!這是一個基於著名電影《黑客帝國》的酷炫jQuery插件。該插件模擬了電影中經典的綠色字符特效,只需選擇一張圖片,插件就會將其轉換為充滿數字字符的矩陣風格畫面。快來試試吧,非常有趣! 工作原理 插件將圖片加載到畫布上,讀取像素和顏色值: data = ctx.getImageData(x, y, settings.grainSize, settings.grainSize).data 插件巧妙地讀取圖片的矩形區域,並利用jQuery計算每個區域的平均顏色。然後,使用

本文討論了使用瀏覽器開發人員工具的有效JavaScript調試,專注於設置斷點,使用控制台和分析性能。

本文將引導您使用jQuery庫創建一個簡單的圖片輪播。我們將使用bxSlider庫,它基於jQuery構建,並提供許多配置選項來設置輪播。 如今,圖片輪播已成為網站必備功能——一圖胜千言! 決定使用圖片輪播後,下一個問題是如何創建它。首先,您需要收集高質量、高分辨率的圖片。 接下來,您需要使用HTML和一些JavaScript代碼來創建圖片輪播。網絡上有很多庫可以幫助您以不同的方式創建輪播。我們將使用開源的bxSlider庫。 bxSlider庫支持響應式設計,因此使用此庫構建的輪播可以適應任何

數據集對於構建API模型和各種業務流程至關重要。這就是為什麼導入和導出CSV是經常需要的功能。在本教程中,您將學習如何在Angular中下載和導入CSV文件


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版
視覺化網頁開發工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Linux新版
SublimeText3 Linux最新版