亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript仿微信打飛機(jī)游戲

 更新時(shí)間:2020年07月05日 09:23:07   作者:畫一生情入顏容  
這篇文章主要為大家詳細(xì)介紹了JavaScript仿微信打飛機(jī)游戲的相關(guān)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了js微信打飛機(jī)游戲的具體代碼,供大家參考,具體內(nèi)容如下

首先實(shí)現(xiàn)微信打飛機(jī)游戲,首先會(huì)有自己和敵機(jī),采用canvas繪圖來(lái)生成自己和敵人。

1、生成自己,且可以通過左右鍵來(lái)進(jìn)行左右移動(dòng)。

//生成自己,且可以左右移動(dòng)
//控制飛機(jī)向右移動(dòng)的函數(shù)
 function moveRight(event){

 context.clearRect(aligh,100,47,47);

 //防止飛機(jī)移除背景外
 if(aligh < 260){
 var img = new Image();
 img.src = "../images/self.png";
 img.onload = function(){
 context.drawImage(img, aligh,100);
 }
 aligh += 10 ;
 }

//當(dāng)飛機(jī)即將移出背景外時(shí),讓它停在最右端
 if (aligh == 260){
 var img = new Image();
 img.src = "../images/self.png";
 img.onload = function(){
 context.drawImage(img, 260,100);
 }
 }
 }

 //控制飛機(jī)向左移動(dòng)的函數(shù)
 function moveLeft(event){
 context.clearRect(aligh,100,47,47);

//防止飛機(jī)移出最左邊的邊界
 if(aligh > 0){
 var img = new Image();
 img.src = "../images/self.png";
 img.onload = function(){
 context.drawImage(img, aligh,100);
 }
 aligh -= 10 ;
 }

//使其控制在最左側(cè)
 if (aligh == 0){
 var img = new Image();
 img.src = "../images/self.png";
 img.onload = function(){
 context.drawImage(img, 0,100);
 }
 }

}
//判斷按下的是哪個(gè)鍵,然后控制飛機(jī)左右移動(dòng)
 document.onkeydown = function(event){
 if(event.keyCode == 37){
 moveLeft();
 }
 if(event.keyCode == 39){
 moveRight(); 
 }
 }

2、生成敵機(jī)。敵機(jī)就是在背景上隨機(jī)生成圖片。每隔一秒使其從上面下落。

var createId = setInterval(function(){
 var top = 0+'px'; 
 var enemy = document.createElement("img");
 enemy.src = "../images/enemy.png";

 //生成隨機(jī)的位置
 var randomleft = Math.floor(Math.random() * 300) ;
 //如果生成的位置出現(xiàn)在背景外,則就取260
left = randomleft > 260 ? 260 + 'px': randomleft + 'px';

 leftArr.push(left); //保存每個(gè)敵機(jī)的距左邊的距離,方便碰撞檢測(cè)的計(jì)算
 arrPic.push(enemy); //將每個(gè)敵機(jī)的圖片保存在數(shù)組中,方便碰撞檢測(cè)后移除

 main.appendChild(enemy);
 enemy.style.paddingLeft = left ;
 enemy.style.paddingTop = top;
 var spandom = $("#main>img:last-child");//這兒利用jquery找到最后一個(gè)img

//讓最后一個(gè)img動(dòng)起來(lái)。則就相當(dāng)于為每一個(gè)img都綁定了動(dòng)畫
spandom.animate({"paddingTop":420},6000,function(){
 //當(dāng)下落到底部時(shí)移除元素
 this.remove();
 arrPic.splice(0,1); //從數(shù)組中移除圖片
 leftArr.splice(0,1); //從數(shù)組中移除距離
 fallCount ++; //檢測(cè)下落了多少個(gè)飛機(jī),超過十個(gè)沒被打中,游戲就結(jié)束
 });

 //如果落下的飛機(jī)數(shù)超過十個(gè)沒有被打中,則游戲結(jié)束
 if(fallCount > 10){
 clearInterval(createId);
 clearInterval(crashId);
 alert("當(dāng)前得分 :"+count+" , 很遺憾,游戲結(jié)束!")
 }
 },1000);

3、現(xiàn)在主要是碰撞檢測(cè)。每隔2.2秒進(jìn)行一次檢測(cè),因?yàn)闄z測(cè)臺(tái)頻繁的話,直接長(zhǎng)按向左向右鍵,都可以直接消除。就沒有意義了

function checkCrash(){

 crashId = setInterval(function(){

 //由于每次自由落下的飛機(jī)在上面函數(shù)中都被移除了。所以leftArr數(shù)組中保存的就是當(dāng)前頁(yè)面存在的飛機(jī)的左距離數(shù)組。
 for(var i = 0; i < leftArr.length; i++)
 {

 //首先將兩種都轉(zhuǎn)換成int型進(jìn)行比較
 var tempL = parseInt(leftArr[i]);
 var tempA = parseInt(aligh); //表示自己距左側(cè)的位置

 //當(dāng)自己的中心距離處于敵機(jī)的左右兩側(cè)范圍內(nèi),則表示被擊中
 if(tempL <= (tempA + 20) && (tempA + 20) <= (tempL + 40)){
 arrPic[i].remove(); //碰撞檢測(cè),移除敵機(jī)的圖片
 arrPic.splice(i,1); //從圖片數(shù)組中移除圖片
 leftArr.splice(i,1); //從記錄敵機(jī)左側(cè)距離數(shù)組中移除該敵機(jī)的距離
 count++;
 score.innerHTML = "當(dāng)前得分 "+count; 
 break; //檢測(cè)到之后直接跳出循環(huán),進(jìn)行下一個(gè)2.2秒的碰撞檢測(cè)
 } 
 } 
 },2200);

 }
 checkCrash();

這個(gè)游戲還不太完整,沒有生成子彈。大部分功能都已經(jīng)實(shí)現(xiàn)了。

4、效果圖如下:

最后附上源代碼:

html&css

<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8"/ >
 <title></title>
 <script type="text/javascript" src = "./fightFlight.js"></script>
 <script src = "../jQuery/jquery-3.2.0.min.js"></script>
 <style type="text/css">
 *{
 margin: 0px;
 padding: 0px;
 }
 #main{
 width: 300px;
 height: 500px;
 border:1px solid red;
 margin: 0 auto;
 }
 #my{

 position: absolute;
 z-index: 2;
 top:350px;
 }
 #background{
 position: absolute;
 z-index: 1;
 width: 300px;
 height:500px;
 border: 1px solid green;
 background-image: url(../images/background.jpg);
 }
 img{
 position: absolute;
 z-index: 2;
 }
 #enmey{
 width: 50px;
 height: 50px;
 }

 #score{
 position: absolute;
 margin-left: 50%;
 left: 150px;
 top:100px;
 width: 160px;
 font-size: 20px;
 font-family: "微軟雅黑";
 font-weight: bold;
 line-height: 70px;
 text-align: center;
 }
 </style>
</head>

<body>
<div id = "main">
<canvas id = "background"></canvas>
<canvas id = "my"></canvas>
<div id = "score">當(dāng)前得分:0</div>
</div>

</body>
</html>

JavaScript

 var main = document.getElementById('main');
 var my = document.getElementById('my');
 var score = document.getElementById("score");
 var context = my.getContext('2d');
 var crashId;
 var fallCount = 0; //記錄沒被打中的飛機(jī)數(shù),如果超過10,游戲結(jié)束
 var aligh = 0 ;
 var count = 0; //記錄打中的飛機(jī)數(shù),即當(dāng)前得分
 var leftArr = [];
 var arrPic = [];
 var left;
 var img = new Image();
 img.src = "../images/self.png";
 img.onload = function(){
 context.drawImage(img,aligh,100);
 }

 //生成自己,且可以左右移動(dòng)
 function move(event){

 event = EventUtil.getEvent(event);
 context.clearRect(aligh,100,47,47);

 if(event.keyCode == 39 && aligh < 260 ){

 var img = new Image();
 img.src = "../images/self.png";
 img.onload = function(){
 context.drawImage(img, aligh,100);
 }
 aligh += 10 ;
 }

 if (aligh == 260){
 var img = new Image();
 img.src = "../images/self.png";
 img.onload = function(){
 context.drawImage(img, 260,100);
 }
 }

 }
 document.onkeypress = move;


 //隨機(jī)生成敵機(jī)

 (function(){
 var createId = setInterval(function(){
 var top = 0+'px'; 
 var enemy = document.createElement("img");
 enemy.src = "../images/enemy.png";
 var randomleft = Math.floor(Math.random() * 300) ;
 left = randomleft > 260 ? 260 + 'px': randomleft + 'px';

 leftArr.push(left); //保存每個(gè)敵機(jī)的距左邊的距離,方便碰撞檢測(cè)的計(jì)算
 arrPic.push(enemy); //將每個(gè)敵機(jī)的圖片保存在數(shù)組中,方便碰撞檢測(cè)后移除

 main.appendChild(enemy);
 enemy.style.paddingLeft = left ;
 enemy.style.paddingTop = top;
 var spandom = $("#main>img:last-child");//找到最后一個(gè)span
 spandom.animate({"paddingTop":420},6000,function(){
 //移除元素
 this.remove();
 arrPic.splice(0,1); //移除圖片
 leftArr.splice(0,1); //從數(shù)組中移除距離
 fallCount ++;
 });

 //如果落下的飛機(jī)數(shù)超過十個(gè)沒有被打中,則游戲結(jié)束
 if(fallCount >= 10){
 clearInterval(createId);
 clearInterval(crashId);
 alert("當(dāng)前得分 :"+count+" , 很遺憾,游戲結(jié)束!")
 }

 },1000);
 })();


 //碰撞檢測(cè)
 function checkCrash(){

 crashId = setInterval(function(){

 for(var i = 0; i < leftArr.length; i++)
 {
 var tempL = parseInt(leftArr[i]);
 var tempA = parseInt(aligh);
 if(tempL <= (tempA + 20) && (tempA + 20) <= (tempL + 40)){

 arrPic[i].remove(); //碰撞檢測(cè),移除敵機(jī)的圖片
 count++;
 score.innerHTML = "當(dāng)前得分 "+count;
 continue;
 }

 }
 console.log(count);

 },2200);

 }
 checkCrash();

} 

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

C++經(jīng)典小游戲匯總

python經(jīng)典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經(jīng)典游戲 玩不停

java經(jīng)典小游戲匯總

javascript經(jīng)典小游戲匯總

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JS拉起或下載app的實(shí)現(xiàn)代碼

    JS拉起或下載app的實(shí)現(xiàn)代碼

    最近做項(xiàng)目遇到這樣的需求,通過手機(jī)網(wǎng)頁(yè)判斷是否安裝了自己公司app,如果安裝了則拉起app,沒有安裝則跳轉(zhuǎn)到下載頁(yè)。怎么實(shí)現(xiàn)呢?下面小編給大家分享js拉起或下載app的實(shí)現(xiàn)代碼,需要的朋友參考下
    2017-02-02
  • 一個(gè)JS的日期格式化算法示例

    一個(gè)JS的日期格式化算法示例

    本文為大家介紹下一個(gè)JS的日期格式化算法,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下,希望對(duì)大家有所幫助
    2013-07-07
  • 深入淺析JS的數(shù)組遍歷方法(推薦)

    深入淺析JS的數(shù)組遍歷方法(推薦)

    這篇文章主要介紹了深入淺析JS的數(shù)組遍歷方法(推薦)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • echarts地圖設(shè)置背景圖片及海岸線實(shí)例代碼

    echarts地圖設(shè)置背景圖片及海岸線實(shí)例代碼

    公司的業(yè)務(wù)涉及到統(tǒng)計(jì)圖的有很多,最近一直echarts里面踩各種坑,下面這篇文章主要給大家介紹了關(guān)于echarts地圖設(shè)置背景圖片及海岸線的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • JavaScript實(shí)現(xiàn)文字與圖片拖拽效果的方法

    JavaScript實(shí)現(xiàn)文字與圖片拖拽效果的方法

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)文字與圖片拖拽效果的方法,涉及javascript操作文字與圖片的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Javascript中的相等與不等運(yùn)算

    Javascript中的相等與不等運(yùn)算

    在 javascript 中,可以使用 == 來(lái)比較兩個(gè)數(shù)據(jù)是否相等,如果兩個(gè)數(shù)據(jù)的類型不同,那么,將在進(jìn)行轉(zhuǎn)換后進(jìn)行比較
    2010-04-04
  • js每隔5分鐘執(zhí)行一次ajax請(qǐng)求的實(shí)現(xiàn)方法

    js每隔5分鐘執(zhí)行一次ajax請(qǐng)求的實(shí)現(xiàn)方法

    每隔5分鐘執(zhí)行一次ajax請(qǐng)求,如何實(shí)現(xiàn)?下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以參考下
    2013-11-11
  • Vue項(xiàng)目中關(guān)于全局css的處理

    Vue項(xiàng)目中關(guān)于全局css的處理

    我們?cè)趯慍SS的時(shí)候,會(huì)遇到大量相同的屬性(比如:margin-top:10px)這種屬性幾乎每個(gè)vue頁(yè)面都有。這個(gè)時(shí)候,我們可以把css掛載到全局上,供所有vue頁(yè)面使用,同時(shí)也方便修改。感興趣的同學(xué)可以參考一下
    2023-04-04
  • JavaScript實(shí)現(xiàn)私有屬性的幾種方式小結(jié)

    JavaScript實(shí)現(xiàn)私有屬性的幾種方式小結(jié)

    在JavaScript中,私有屬性是指只能在對(duì)象內(nèi)部訪問的屬性,外部無(wú)法直接訪問,JavaScript并沒有提供官方的私有屬性的支持,但可以通過一些技巧來(lái)模擬實(shí)現(xiàn)私有屬性,所以本文給大家總結(jié)了JavaScript實(shí)現(xiàn)私有屬性的幾種方式,需要的朋友可以參考下
    2024-04-04
  • javaScript矢量圖表庫(kù)-gRaphael幾行代碼實(shí)現(xiàn)精美的條形圖/餅圖/點(diǎn)圖/曲線圖

    javaScript矢量圖表庫(kù)-gRaphael幾行代碼實(shí)現(xiàn)精美的條形圖/餅圖/點(diǎn)圖/曲線圖

    gRaphael是一個(gè)致力于幫助開發(fā)人員在網(wǎng)頁(yè)中繪制各種精美圖表的 Javascript庫(kù),你只需要編寫幾行簡(jiǎn)單的代碼就能創(chuàng)建出精美的條形圖、餅圖、點(diǎn)圖和曲線圖,感興趣的朋友可以了解下
    2013-01-01

最新評(píng)論