前端像素鳥小游戲

来源:https://www.cnblogs.com/mochenxiya/archive/2022/09/15/16697113.html
-Advertisement-
Play Games

前端像素鳥小游戲 點擊打開視頻講解更加詳細 一、案例效果 二、實現思路 創建游戲背景板和小鳥,並分別設置相對定位與絕對定位; 初始化背景圖的位置; 初始化小鳥的位置; 設置游戲狀態,游戲開始時背景和管道全部向左運動,游戲結束全部停止運動; 使小鳥飛行,其實就是背景圖在 X 軸方向的位置不斷減小,實現 ...


前端像素鳥小游戲

點擊打開視頻講解更加詳細

一、案例效果

在這裡插入圖片描述

二、實現思路

創建游戲背景板和小鳥,並分別設置相對定位與絕對定位;
初始化背景圖的位置;
初始化小鳥的位置;
設置游戲狀態,游戲開始時背景和管道全部向左運動,游戲結束全部停止運動;
使小鳥飛行,其實就是背景圖在 X 軸方向的位置不斷減小,實現小鳥向右飛行效果;
設置點擊事件,每點擊一次小鳥在Y軸的位置減小,實現向上飛的效果;
創建管道,X 方向上管道和下管道位置相同,Y 方向上上管道和下管道高度隨機,但中間要空出200px;
實現管道向左運動,與背景圖向左操作類似,也是在 X 軸方向的位置不斷減小;
管道向左運動移出游戲面板最左側時再回到原位重新執行,實現迴圈效果;
定義上下管道的臨界值,也就是上下管道自身區域;
小鳥位置與上下管道位置重合(相碰撞)時游戲結束;
多次調用管道創建函數,產生多組管道。

三、完整代碼+詳細註釋

<!DOCTYPE html>
<html>
 
<head>
  <meta charset="UTF-8">
  <title>小游戲:像素鳥</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
 
    #game {
      width: 800px;
      height: 600px;
      background: url('./img/sky.png');
      position: relative;
      margin: auto;
      overflow: hidden;
    }
 
    #bird {
      width: 34px;
      height: 25px;
      background: url(./img/birds.png) -10px -8px no-repeat;
      position: absolute;
      top: 100px;
      left: 100px;
    }
  </style>
</head>
 
<body>
  <!-- 游戲背景 -->
  <div id="game">
    <!-- 小鳥 -->
    <div id="bird"></div>
  </div>
</body>
 
<script>
  //獲取游戲背景和小鳥
  var game = document.getElementById('game');
  var birdEle = document.getElementById('bird');
 
  //初始化背景圖
  var sky = {
    x: 0 //背景圖初始位置為0
  }
 
  //初始化小鳥
  var bird = {
    speedX: 5, //小鳥在X軸的速度
    SpeedY: 0, //小鳥在Y軸的速度
    //小鳥坐標
    x: birdEle.offsetLeft, //小鳥初始位置在絕對定位的位置
    y: birdEle.offsetTop,
  }
 
  var runing = true; //游戲狀態
 
  setInterval(function () {
    if (runing) {
      //小鳥飛行(其實是背景在動)
      sky.x -= 5; //背景每次-5px,以實現向左運動的效果
      game.style.backgroundPositionX = sky.x + 'px';
      //小鳥上下運動
      bird.SpeedY += 1; //每一次點擊小鳥向上10px後開始自增也就是再自動向下
      bird.y += bird.SpeedY; //小鳥自動不斷向下運動
      //判斷游戲狀態
      if (bird.y < 0) { //超出游戲背景頂部時游戲結束
        runing = false;
        bird.y = 0;
      }
      if (bird.y + birdEle.offsetHeight > 600) { //超出游戲背景底部時游戲結束
        runing = false;
        bird.y = 600 - birdEle.offsetHeight;
      }
      birdEle.style.top = bird.y + 'px';
    }
  }, 30);
 
  //點擊時小鳥向上運動
  document.onclick = function () {
    bird.SpeedY = -10; //點擊一次向上運動10px
  }
 
  //創建管道
  function creatPipe(position) {
    var pipe = {};
    pipe.x = position;
    pipe.upHeight = 200 + parseInt(Math.random() * 100); //上管道高度為200 - 300px
    pipe.doHeight = 600 - pipe.upHeight - 200; //下管道高度
    pipe.doTop = pipe.upHeight + 200; //上下兩管道之間200px
 
    //創建上管道
    var upPipe = document.createElement('div'); //新建div
    upPipe.style.width = '52px';
    upPipe.style.height = pipe.upHeight + 'px';
    upPipe.style.background = 'url(./img/pipe2.png) no-repeat center bottom';
    upPipe.style.position = 'absolute';
    upPipe.style.top = '0px';
    upPipe.style.left = pipe.x + 'px';
    game.appendChild(upPipe); //將上管道追加到游戲頁面中
 
    //創建下管道
    var doPipe = document.createElement('div'); //新建div
    doPipe.style.width = '52px';
    doPipe.style.height = pipe.doHeight + 'px';
    doPipe.style.background = 'url(./img/pipe1.png) no-repeat center top';
    doPipe.style.position = 'absolute';
    doPipe.style.top = pipe.doTop + 'px';
    doPipe.style.left = pipe.x + 'px';
    game.appendChild(doPipe); //將下管道追加到游戲頁面中
 
    //管道進行運動
    setInterval(function () {
      if (runing) { //游戲處於運行狀態時管道再運動
        pipe.x -= 2; //x方向不斷-2px,以實現管道向左運動的效果
        upPipe.style.left = pipe.x + 'px';
        doPipe.style.left = pipe.x + 'px';
        if (pipe.x < -52) { //管道移出最左側時回到原位,實現不間斷效果
          pipe.x = 800;
        }
        //上下管道臨界值
        var uCheck = bird.x + 34 > pipe.x && bird.x < pipe.x + 52 && bird.y < pipe.upHeight;
        var dCheck = bird.x + 34 > pipe.x && bird.x < pipe.x + 52 && bird.y > pipe.upHeight + 200;
        if (uCheck || dCheck) { //碰到上管道或下管道臨界值則游戲終止
          runing = false;
        }
      }
    }, 30)
  }
  creatPipe(400); //產生四組管道
  creatPipe(600);
  creatPipe(800);
  creatPipe(1000);
</script>
 
</html>

若對您有幫助,請點擊打開視頻講解更加詳細


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 用戶觸達:可以簡單理解為通過某種方式將消息傳遞給用戶的行為;觸達的特定消息從功能上可分展示、引導落地兩層。用戶觸達作為一種產品運營方式,已經融入我們日常生產活動的方方面面。在移動互聯網的世界里,我們的產品離不開觸達,用戶活動也離不開觸達。 ...
  • IOS開發工具官網地址 http://www.applicationloader.net/ 最新版本已經優化了沒支付688給apple的賬號登錄流程,無需再安裝其他軟體。 立即下載最新版本 在appuploader官網首頁下載,如果您是windows電腦,則選擇點擊 windows版,如果是mac ...
  • 最近,“你這背景太假了”席卷全網。由於身後風景太優美,被網友質疑背景太假,某主播為了自證,直接把手裡的桶扔進了背後的水裡。短短幾天時間播放量幾十億,引發了全網P圖狂潮,網友在短視頻App里將其人像摳出來,替換了不同的背景,各類創意視頻很快衝上熱搜。 現如今,視頻人像摳圖有著廣泛應用。在直播App里可 ...
  • 自適應佈局和響應式佈局的區別? 1.響應式的概念覆蓋了自適應,但響應式包含的東西更多,響應式的佈局可以根據屏幕的大小自動調整頁面的展示方式 2.自適應有一個致命缺點:如果屏幕尺寸太小,即使網頁能夠根據屏幕大小進行適配,也會感覺在小屏幕上查看,內容過於擁擠 3.響應式解決了自適應佈局的問題,響應式能自 ...
  • 一、this指向 點擊打開視頻講解更加詳細 this隨處可見,一般誰調用,this就指向誰。this在不同環境下,不同作用下,表現的也不同。 以下幾種情況,this都是指向window 1、全局作用下,this指向的是window console.log(window); console.log(t ...
  • SSO介紹 背景 隨著企業的發展,一個大型系統里可能包含 n 多子系統, 用戶在操作不同的系統時,需要多次登錄,很麻煩,我們需要一種全新的登錄方式來實現多系統應用群的登錄,這就是單點登錄。 web 系統 由單系統發展成多系統組成的應用群,複雜性應該由系統內部承擔,而不是用戶。無論 web 系統內部多 ...
  • 隨著項目的日漸迭代,項目整體的代碼量也會越來越多,從而導致項目體積越來越大;在Webpack時代,很多人會對歷史項目(巨型項目)感到頭疼,因為往往巨型項目在本地開發調試的時候會因為本地代碼的修改觸發HMR熱更新重載頁面,然而這一過程在Webpack的運行機制中顯得很慢,並且是隨著項目越大,熱更新的速 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 最近每天學習的時候,發現了一道很有趣的面試題 1.const [a, b] = { a: 100, b: 200 } 2.console.log(a) 3.console.log(b) 如何在不改變1的情況下,讓代碼不報錯 這個時候,我突 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...