3D魔方小游戏(附源码)

简介: 一说到魔方 想必大家都熟悉的不能再熟悉了 自己或者曾今自己的朋友非常喜欢玩的一款游戏 言归正卷 那么实用前端的技术怎么实现3D的魔方制作呢 从以下几个方面就不难发现 前端实现3D魔方都得需要用上这些技术栈

一、案例效果图

效果图是最能表明一个事务的结果性 也能第一时间了解到我们要达成的目的

mofang.gif

二、魔方的思路

1、先将平面上的6个DIV拼接在一起。形成一张类似于3d立方体图形展开的平面图。

a123.png

2、我们需要将每一个面旋转到相应的位置上,每一个面的旋转轴都是不一样的。上下,左右,分别对应的旋转轴,以及旋转角度分别是:bottom(90deg),top(-90deg),right(90deg),left(-90deg)。同时要注意在旋转后面的时候,旋转轴为Z轴,并不是上下,左右边。浏览器上面的坐标系是这样的:Z轴是屏幕里外两个方向(向外为正,向里为负),X轴的水平方向(向右为正,向左为负);
3、接下来还有一个关键的步骤,就是当变换导致元素在 3D 空间中旋转时,指定当元素背面朝向观察者时不可见;

a1234.png

4、接下来我们要做的就是设置一下所处环境,我们要设置成3D的环境,具体的语法形式如下:transform-style: preserve-3d;
5、然后我们为了让立方体旋转起来,以便更好的实现3D效果。首先找到旋转中心,在3D魔方中,旋转中心就是立方体的几何中心。

三、魔方实现目录

a4.png

从上面的目录也不难看出 我们所需要的一些公共的js和css文件还是挺多的 在此我就不一一列举了 需要的可以 前往传送门获取测试 传送门

四、魔方核心代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport"
        content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no" />
    <meta name="description" content="Rubik’s Cube">
    <meta name="keywords" content="Erno Rubik’s Cube">
    <link rel="stylesheet" type="text/css" href="css/cube.css">
    <link rel="stylesheet" type="text/css" href="css/base.css">
    <link rel="icon" type="image/png" href="img/cuber-favicon-0064x0064.png">
    <link rel="apple-touch-icon" href="img/cuber-favicon-0144x0144.png">

    <title>Cuber</title>

    <script charset="utf-8" src="js/tween.min.js"></script>

    <!--  Three.js  -->
    <script charset="utf-8" src="js/Three.js"></script>
    <script charset="utf-8" src="js/EventDispatcher.js"></script>
    <script charset="utf-8" src="js/Math.js"></script>
    <script charset="utf-8" src="js/Quaternion.js"></script>
    <script charset="utf-8" src="js/Vector2.js"></script>
    <script charset="utf-8" src="js/Vector3.js"></script>
    <script charset="utf-8" src="js/Box3.js"></script>
    <script charset="utf-8" src="js/Sphere.js"></script>
    <script charset="utf-8" src="js/Euler.js"></script>
    <script charset="utf-8" src="js/Matrix3.js"></script>
    <script charset="utf-8" src="js/Matrix4.js"></script>
    <script charset="utf-8" src="js/Object3D.js"></script>
    <script charset="utf-8" src="js/Camera.js"></script>
    <script charset="utf-8" src="js/PerspectiveCamera.js"></script>
    <script charset="utf-8" src="js/Ray.js"></script>
    <script charset="utf-8" src="js/Plane.js"></script>


    <!--  Here are the Cube guts. Enjoy.  -->
    <script charset="utf-8" src="js/ERNO.js"></script>
    <script charset="utf-8" src="js/CSS3DRenderer.js"></script>
    <script charset="utf-8" src="js/utils.js"></script>
    <script charset="utf-8" src="js/Number.js"></script>
    <script charset="utf-8" src="js/String.js"></script>
    <script charset="utf-8" src="js/Array.js"></script>
    <script charset="utf-8" src="js/colors.js"></script>
    <script charset="utf-8" src="js/directions.js"></script>
    <script charset="utf-8" src="js/queues.js"></script>
    <script charset="utf-8" src="js/twists.js"></script>
    <script charset="utf-8" src="js/cubelets.js"></script>
    <script charset="utf-8" src="js/groups.js"></script>
    <script charset="utf-8" src="js/slices.js"></script>
    <script charset="utf-8" src="js/folds.js"></script>
    <script charset="utf-8" src="js/projector.js"></script>
    <script charset="utf-8" src="js/interaction.js"></script>
    <script charset="utf-8" src="js/controls.js"></script>
    <script charset="utf-8" src="js/cubes.js"></script>
    <script charset="utf-8" src="js/solvers.js"></script>
    <script charset="utf-8" src="js/renderer.js"></script>

    <script charset="utf-8" src="js/jquery.js"></script>
    <script charset="utf-8" src="js/iecss3d.js"></script>
    <script charset="utf-8" src="js/ierenderer.js"></script>
    <script charset="utf-8" src="js/locked.js"></script>
    <script charset="utf-8" src="js/deviceMotion.js"></script>
    <script charset="utf-8" src="js/main.js"></script>

</head>

<body class="graydient">
    <div id="container"></div>
    <div id="fail">
        <h1>Sorry,</h1>
        <h2>Cubers broken</h2>
    </div>
</body>

</html>
相关文章
|
前端开发
Web前端实现3D旋转魔方相册【超详细】
Web前端实现3D旋转魔方相册【超详细】
1269 0
|
移动开发 JavaScript 前端开发
💻揭秘!如何用 Vue 3 实现酷炫的色彩魔方游戏✨
本文分享了开发基于Canvas技术的小游戏"色彩魔方挑战"的完整过程。游戏旨在考验玩家的观察力和耐心,通过随机生成的颜色矩阵和一个变化点,玩家需在两幅画布中找出不同的颜色点。文章详细讲解了游戏的核心功能,包括随机颜色矩阵生成、点的闪烁提示、自定义配色方案等。此外,作者展示了使用Vue 3和TypeScript开发的代码实现,带领读者一步步深入了解游戏的逻辑与细节。
689 69
|
人工智能 Java 关系型数据库
分享66个JavaGame源码总有一个是你想要的
分享66个JavaGame源码总有一个是你想要的
1804 0
|
数据可视化 前端开发 JavaScript
利用Python开发七普数据在线可视化看板
利用Python开发七普数据在线可视化看板
481 3
|
存储 数据可视化 定位技术
如何高效管理远程团队?2024年最佳免费工作协作工具排行榜
随着远程工作日益普遍,选择合适的协作工具成为提升团队效率的关键。本文介绍了7款优秀的免费远程协作工具,包括板栗看板、Wrike、Miro、ClickUp、Zoho Projects、MeisterTask和Quire,它们各自具备独特优势,如项目管理、任务跟踪、文件共享及实时协作等功能,适用于不同规模和需求的团队,帮助实现高效远程工作。
1087 0
如何高效管理远程团队?2024年最佳免费工作协作工具排行榜
|
弹性计算 Kubernetes Serverless
Serverless Kubernetes - 理想,现实与未来
Serverless(无服务器)容器是让用户无需购买和管理服务器直接部署容器应用的产品、技术形态。Serverless容器可以极大提高容器应用部署的敏捷度和弹性能力,降低用户计算成本;让用户聚焦业务应用而非底层基础设施管理,极大地提高应用开发效率,降低运维成本。 本文将分享我们对Serverless Kubernetes领域的深度思考,从架构设计和底层基础设施多个维度深度剖析Serverless Kubernetes。
15056 0
Serverless Kubernetes - 理想,现实与未来
|
3月前
|
人工智能 关系型数据库 MySQL
【第6天】每天一个MySQL知识点,百日打怪升级
本文为DBA老兵总结的索引优化实战指南:聚焦“何时建、何时不建”核心问题。详解索引选择性(唯一值/总行数)、失效场景(低区分度、函数运算、隐式转换)及建索引黄金法则——WHERE/JOIN/ORDER BY/GROUP BY高频字段优先,状态类、低选择性列坚决不建。附EXPLAIN实战分析与AI辅助诊断技巧。(239字)
253 1
|
IDE 开发工具
一文解决Visual Studio 2022运行时系统找不到指定文件的错误(简单易懂 亲测有用)
一文解决Visual Studio 2022运行时系统找不到指定文件的错误(简单易懂 亲测有用)
6249 0
|
9月前
|
JSON API 数据格式
京东平台获取商品券后价API接口详解与实战
本文介绍如何通过京东开放平台API获取商品实时券后价。涵盖接口功能、参数说明、签名生成、Python调用示例及常见问题,助开发者高效实现价格查询与数据分析。
|
存储 算法 数据安全/隐私保护
用Python破解摩斯密码
在电影《无间道》中,刘建明(刘德华饰)作为黑帮的卧底在一次行动中发现了警察的卧底陈永仁(梁朝伟饰)与黄警督(黄秋生饰)通过摩斯电码进行通讯,经过紧急的群发区域短信 "有内鬼,终止交易" 避免了黑帮头目被抓。
1735 0
用Python破解摩斯密码