我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何用JavaScript制作大转盘游戏

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何用JavaScript制作大转盘游戏

今天小编给大家分享一下如何用JavaScript制作大转盘游戏的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、开始前的准备

首先就是确定产品需求,仔细一看,emmm,就是正常的一个大转盘该有的东西,也没啥特殊要求,唯一需要注意的是大转盘的转盘个数需要动态变化,即用户设置多少奖品我就需要显示多少块区域。

既然要做大转盘,不外乎三个步骤:

  • 画出大转盘

  • 把奖励放上去

  • 让大转盘滚起来

二、画出大转盘

画出大转盘底图部分就不必多说了,最难的部分在于把一个圆动态平均分成N份,并让其在底图上正常显示。

我采用的方法是:用户选择了多少奖品(除2个奖品以外)我就在底图上生成多少个宽高为底图50%的div,目的是使每个div的右下角正好与底图的中心点重合(这里有个坑,看下去就知道了),接着计算出对应的圆心角 angle = 360 / n ,然后将其形变后以右下角为圆心旋转对应的角度拼成一个圆形。其中,形变和旋转分别采用skew与rotate进行实现。

注:

  • skew形变的角度为(90 - angle)deg

  • 如果要给每一块加上渐变色的话,由于使用了skew形变,所以要显示从左到右的渐变的效果,就需要从原先正方形的底边变到右边,即:background: linear-gradient('45deg', color1, color2)

// 以下为N为8时,用纯JS写的一个测试democonst n = 8; // 奖品数量const circle = document.getElementById('circle');for(let i = 0; i < n ; i++) {    let item = document.createElement('div');    item.className = `circle-item  circle-item-${n}`;  // n为2时,旋转原点不在右下角改为底部中点,不需要skew形变,并且宽度不是50%而是100%    if(n !== 2) {      item.style=        `transform: rotate(${i * angle}deg) skew(${90 - angle}deg);         transform-origin: bottom right;         background-color: ${colorList[i % colorList.length]}; //设置了每个格子的背景色,可以不设置        `    } else {      item.style=        `transform: rotate(${i * angle}deg);         transform-origin: bottom;         background-color: ${colorList[i % colorList.length]};        `    }    circle.appendChild(item);  }

如何用JavaScript制作大转盘游戏

本以为算解决了一个难题,直到我开始测试时,发现 n == 3时出现了奇怪的现象:

如何用JavaScript制作大转盘游戏

好嘛,当 n == 3时,只设置50%的宽高显然并不能填充满整个背景图。于是更改了当 n != 2时的样式,改为宽高的60%,并设置其初始位置往左和上各平移10%。

.circle-item {    border: 1px solid;    height: 60%;    width: 60%;    position: absolute;    left: -10%;    top: -10%;}

如何用JavaScript制作大转盘游戏

这样乍一看是实现了平均分的问题,但仔细一想还有一个问题,那便是如果加上指针,指针永远是向上的,这样看起来就怪怪的了,所以还需要将整个图像进行一个旋转,使初始指针默认指向第一块的中心位置。

旋转角度为: (180 - angle) / 2

如何用JavaScript制作大转盘游戏

三、把奖励放上去

把奖励放上去我想到两种方法:

给每个奖励生成一个与底部背景图宽高一样的正方形,然后将其对着中心点旋转对应的角度,将其一层层的放在底部背景图上,即可完成。如下图1所示,每一个正方形的大小都是与底部的背景图的宽高是一样的,只是将其进行一个旋转即可。(当时以为不好显示用户抽中的扇形的部分,就没采用这种方法,现在总结了才发现只需要将颜色填充在每个扇形中即可,不用填充在奖励背景上,如下图2所示,应该也是能实现的)

如何用JavaScript制作大转盘游戏

图1 每一层奖励的范围

如何用JavaScript制作大转盘游戏

图2 总结时想到的实现方法

将奖励直接放在每一个扇形区域里面,这样我就直接修改每个扇形的背景色即可。看上去很简单,但实际开始操作了就发现了两个问题:

  • 由于每一块方格是skew形变出来的,奖励直接放上去也会产生形变,需要将形变消除;

  • 奖励居中显示很麻烦,到现在我也没有找到可以套用的公式;

第一点解决起来较为简单,只需要将奖励进行一个反向的skew变形,旋转角度为:-(90 &ndash; (angle / 2))deg。 第二点我到现在也没有找到可以套用的公式,是每一种给他写了一个样式居中的。(还好产品只要求2-6的奖励数量,不然可能就没有这篇文章了,如果大家有好的方法也可以教教我)

两种方法各有优点: 方法一的优点是不需要将奖励进行反向形变,怎么放上去就是怎么显示; 方法二的优点是奖励与扇形不分离,我不需要额外的添加太多的div来实现奖励正确显示。

四、让大转盘滚起来

大转盘到现在已经完成了七七八八了,现在就差最后一步,让其滚起来,点击一次后滚动到对应的位置然后停下。

采用的方法是给大转盘添加一个旋转的动画,突然想起来 transform 中有 ease-in-out 这个过渡方法,即慢-快-慢的过渡效果,正好满足我抽奖所需,于是直接采用了这种方法。

这里有个小细节,由于大转盘上本来就设置了transform的动画效果,如果不想现在的旋转动画覆盖掉之前的动画,就需要单独给动画加上一层div,放在大转盘底图的外边一层。

const circle = 8; // 旋转圈数let circleAdd = 0; // 抽奖次数,每次抽完自增let rotateAngle = 0; // 旋转角度let getPrizeIndex = 0; // 抽到的奖品的index

在定义完上面的内容之后计算需要旋转的角度: rotateAngle = circle * 360 * circleAdd - angle * getPrizeIndex,将这个rotateAngle放入需要旋转的style中即可完成旋转。

这里走了两次弯路,一次是没有加上circleAdd,然后就发现第一次大转盘会正常旋转,第二次开始就不动或者只往前滚不到360&deg;甚至往回滚!原因是因为每一次给style赋新值的时候,由于已经有旋转的角度了,他会在你设置新的旋转角度的时候从上一个旋转角度开始执行动画。

第二次是我在写计算公式的时候,想当然的把上面的“-”写成了“+”,想的是我先旋转了circle * circleAdd圈,然后还要滚 getPrizeIndex 个奖励就是我需要显示的奖励,然后发现指针指向的奖励与我需要选择的 getPrizeIndex 并不相符。仔细检查了才发现虽然大转盘旋转是顺时针方向的,但是奖励的读取方向应该是逆向的,所以应该是“-”而不是“+”。

以上就是“如何用JavaScript制作大转盘游戏”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何用JavaScript制作大转盘游戏

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何用JavaScript制作大转盘游戏

今天小编给大家分享一下如何用JavaScript制作大转盘游戏的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、开始前的准备
2023-07-05

一文教你用JavaScript制作个简单的大转盘游戏

日常生活中,我们经常会见到形形色色的抽奖活动,例如九宫格、大转盘等等……本文就来教大家如何利用JavaScript制作个简单的大转盘游戏,感兴趣的可以了解一下
2023-02-01

如何使用Java制作飞机大战游戏

这篇文章给大家分享的是有关如何使用Java制作飞机大战游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、代码实现创建窗口首先创建一个游戏窗体类GameFrame,继承至JFrame,用来显示在屏幕上(wind
2023-06-15

如何使用Matlab制作大富翁小游戏

这篇文章主要介绍“如何使用Matlab制作大富翁小游戏”,在日常操作中,相信很多人在如何使用Matlab制作大富翁小游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Matlab制作大富翁小游戏”的疑
2023-06-29

如何用javascript写小游戏

在当下,JavaScript已经成为前端开发中必不可少的一项技能,它不仅可以开发网页交互效果,还能实现简单的小游戏。本文将介绍如何用JavaScript来编写小游戏。一、准备工作在本地电脑上创建一个新的文件夹,取一个合适的名字。在文件夹中新建一个 HTML 文件,在文件头部添加以下代码:```html
2023-05-15

游戏开发中特效制作与集成技术(游戏特效如何制作并完美融入游戏?)

游戏特效制作与集成技术对于提升游戏视觉效果和沉浸感至关重要。本文阐述了特效制作流程,包括概念设计、建模和动画、材质和着色、粒子模拟和特效引擎集成。还探讨了特效集成技术,如特效管理系统、层次化特效系统、粒子池、物理引擎集成和游戏代码交互。通过理解这些技术,开发者可以创建出色的特效,增强游戏体验并提升玩家投入度。
游戏开发中特效制作与集成技术(游戏特效如何制作并完美融入游戏?)
2024-04-02

Java如何实现年兽大作战游戏

这期内容当中小编将会给大家带来有关Java如何实现年兽大作战游戏,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言春节要到了,看惯了前端各种小游戏,确实做得很好,很精致。但是我也要为后端程序员稍微做一点贡
2023-06-26

如何使用Game API函数制作二维动作游戏

小编给大家分享一下如何使用Game API函数制作二维动作游戏,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MIDP 2.0里面包括一个用来简化编写二维游戏的AP
2023-06-03

如何用Pygame制作简单的贪吃蛇游戏

这篇文章主要讲解了“如何用Pygame制作简单的贪吃蛇游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用Pygame制作简单的贪吃蛇游戏”吧!安装与导入使用pip install py
2023-07-02

使用Java怎么制作一个坦克大战游戏

这篇文章给大家介绍使用Java怎么制作一个坦克大战游戏,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。package tankwar;import java.awt.Color;import java.awt.Font;
2023-05-30

如何在Ubuntu中利用Pygame制作模拟经营游戏

在Ubuntu中利用Pygame制作模拟经营游戏需要一些步骤。以下是一个基本的指南,帮助你开始这个项目。1. 安装Pygame首先,确保你的Ubuntu系统已经安装了Python。然后,使用pip安装Pygame模块:pip inst
如何在Ubuntu中利用Pygame制作模拟经营游戏
2024-10-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录