亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用CSS實現密室逃脫游戲

發布時間:2021-08-31 18:29:25 來源:億速云 閱讀:131 作者:chen 欄目:web開發

這篇文章主要介紹“怎么用CSS實現密室逃脫游戲”,在日常操作中,相信很多人在怎么用CSS實現密室逃脫游戲問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用CSS實現密室逃脫游戲”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

“密室逃脫”這個詞想必大家并不陌生,在以前的flash時代,這是一類很經典的益智游戲之一。玩家常常會被困在一間密室中,而過關的目的就是想法設法逃出這件密室。以下是筆者玩的最早的一個密室逃脫游戲;深紅房間,它也可以說是密室逃脫類游戲的先祖。

怎么用CSS實現密室逃脫游戲

接下來,筆者要用純CSS實現一款類似的密室逃脫類游戲。

是的,你沒聽錯,純CSS,也就意味著完全沒有JS的參與。有人就納悶了:WTF?CSS,一個網頁布局的語言,居然還能寫游戲?可惜的是,CSS還真能寫游戲。接下來隨筆者一起進入這個不思議的國度吧。

攻略

每次筆者玩密室逃脫游戲卡關時,總會去搜搜攻略,看完后就能把游戲玩通。因此當我們做密室逃脫類游戲時,首先要考慮的事情就是攻略。以下是筆者為本文密室逃脫游戲所制定的攻略

  •  左轉,轉動地球儀

  •  右轉,發現一根錘子,點擊撿起,記住墻上的數字

  •  左轉,點擊柜子,用錘子砸開它,獲得一個圓盤

  •  點擊墻上的壁畫,壁畫移開,看到一圓盤印,嵌入圓盤,獲得一個usb

  •  右轉2次,將usb插入電腦,電腦開啟,輸入墻上的密碼,獲得鑰匙

  •  右轉,用鑰匙打開大門,游戲結束

開關

制定完攻略后,就要開始確定該游戲的核心所在——開關。說到開關,大家覺得HTML里的哪個元素最適合用來做開關?答案是單復選框。

說起單復選框,就不得不提這2個CP——label和兄弟選擇符。label負責將該元素與其對應的復選框用for來關聯起來,而兄弟選擇符則負責與:checked偽類配合好,當某元素被勾選時,其相鄰的元素就會受到它的影響。

首先,讓我們來看一看一個簡單的開關例子 

<input type="radio" id="globe" class="globe-trigger" />     <input type="radio" id="hammer" class="hammer-trigger" />     <label for="globe" class="globe">       <img src="https://i.loli.net/2020/10/25/YBnOQ2jVtSTmFkE.png" alt class="w-8" />     </label>    <label for="hammer" class="hammer">       <img src="https://i.loli.net/2020/10/25/KhVp4EaMoYrjlIC.png" alt class="w-6" />     </label>
.hammer {        display: none;      }      .globe-trigger:checked {       & ~ {          .globe {            pointer-events: none;          }          .hammer {            display: inline-block;          }        }      }      .hammer-trigger:checked {        & ~ {          .hammer {            transform: scale(0);            opacity: 0;          }        }      }

怎么用CSS實現密室逃脫游戲

可以看到我們用label元素包裹了對應的圖片,并關聯好了對應的開關。當用戶點擊地球儀globe時,globe-trigger開關就會被觸發,這就是label的關聯性

觸發開關后,開關旁邊對應的元素狀態就發生了變化:globe變得無法被點擊;hammer元素出現,這就是兄弟選擇符的作用

同理,點擊錘子hammer時,與其關聯的hammer-trigger開關被觸發,與此同時旁邊的hammer就會消失,代表被用戶“撿起”這一動作

理解開關的原理后,我們就可以把開關給隱藏起來啦

input[type="checkbox"],    input[type="radio"] {      display: none;    }

場景切換

假設我們游戲地圖分為4塊,且可以用導航箭頭來切換。

游戲的地圖其實是一張長圖,如下圖所示

怎么用CSS實現密室逃脫游戲 

<div class="camera">       <!-- 導航 -->       <input type="radio" id="nav-1" name="nav" class="nav-trigger-1" />       <input type="radio" id="nav-2" name="nav" class="nav-trigger-2" />       <input type="radio" id="nav-3" name="nav" class="nav-trigger-3" />       <input type="radio" id="nav-4" name="nav" class="nav-trigger-4" />       <!-- 長圖 -->       <form class="stage">         <!-- 開關 -->         <input type="checkbox" id="globe" class="globe-trigger" />...         <!-- 場景 -->         <div class="scene scene-1">           <label for="...">...</label>           <nav class="navs">             <label for="nav-4" class="nav-left"></label>             <label for="nav-2" class="nav-right"></label>           </nav>         </div>       </form>     </div>

首先,設定游戲的固定視角,將多余的部分裁掉 

.camera {       --stage-width: 18rem;       --scene-id: 0;       position: relative;       width: var(--stage-width);       height: var(--stage-width);       overflow: hidden;     }

然后,設定導航,根據所選的導航來確定長圖的平移距離 

@for $i from 1 through 4 {       .nav-trigger-#{$i}:checked {         & ~ .stage {           --scene-id: #{$i - 1};         }       }     }     .stage {       transform: translateY(calc(var(--stage-width) * var(--scene-id) * -1));     }     .scene {       position: relative;       width: var(--stage-width);       height: var(--stage-width);     }

比如在場景1,用戶向右走,導航2被觸發,長圖將上平移一個單位,如下圖所示

怎么用CSS實現密室逃脫游戲

這樣就完成了場景切換這一效果

完成項目

此刻,我們已經具備完成密室逃脫游戲所必須的知識了。根據上面的攻略,一步步定制好所有開關,擺放好所有物件,且能確保場景能自由切換,這樣一個純CSS密室逃脫游戲就成功誕生啦

在線游玩地址:https://codepen.io/alphardex/full/GRqWRyB

怎么用CSS實現密室逃脫游戲

到此,關于“怎么用CSS實現密室逃脫游戲”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

css
AI

灵石县| 仙居县| 蓝田县| 和林格尔县| 平遥县| 迭部县| 石棉县| 万载县| 若羌县| 社旗县| 大城县| 淅川县| 阿勒泰市| 当涂县| 大姚县| 梨树县| 沅陵县| 佛教| 铁岭市| 莱芜市| 荣成市| 虞城县| 德州市| 华安县| 邳州市| 秦皇岛市| 突泉县| 中宁县| 腾冲县| 临沭县| 卢龙县| 毕节市| 界首市| 正镶白旗| 澄城县| 娄底市| 清原| 明溪县| 嘉黎县| 九台市| 凤台县|