原生JS实现躲避粒子小游戏

本文介绍了如何使用原生JavaScript实现一个躲避粒子的小游戏,包括页面结构搭建、样式修饰和动态行为的JavaScript实现。游戏中小绿球在容器顶部随机生成,非水平非垂直方向运动,碰撞容器内壁后弹性反弹,红球可以被拖动并有边界判断,同时实现了红球与绿球的碰撞检测以及“坚持n秒”计时器功能。
摘要由CSDN通过智能技术生成
	小项目的实战操作可以帮助我们更好的掌握javascript
	
	躲避例子游戏规则:拖拽红球躲避绿球碰撞,拖拽过程不能触碰容器内壁,以赢得游戏持久度

页面效果:
页面效果

实现过程

不积小流,无以成江海。
将页面效果的实现细分成小步实现:页面结构的构建,样式修饰,js中小绿球在容器顶部随机位置生成、小绿球非水平非垂直方向的运动、小绿球碰撞容器内壁后弹性运动、生成多个小绿球、拖拽红球、红球的边界判断、红球与绿球的碰撞检测、“坚持n秒”的定时器实现、清除定时器

结构搭建

创建文本、容器和红球,在此项目下小绿球是动态创建生成的;
在这里插入图片描述

样式修饰

为创建的结构设置样式修饰
在这里插入图片描述

动态行为Javascript

采用面向对象的编程思维

1.小绿球在容器顶部随机位置生成

用random函数生成 [0,1)内的随机小数再乘以小绿球在水平方向的运动范围,最后floor求整并将整数作为初始时小绿球与容器左壁的距离

2.小绿球非水平非垂直方向的运动

设置X方向的速度值和Y方向的速度值,与(1)相同,采用random函数乘以初始化XY方向的速度值就可以得到随机方向
创建定时器获取并更新小绿球与容器的左壁和上壁的距离以实现小球运动

3.小绿球碰撞容器内壁后弹性运动

小绿球的边界判断,碰撞左壁和右壁时X方向的速度 * -1;碰撞上壁和下壁时Y方向的速度 * -1

4.生成多个小绿球

通过定时器不断调用构造函数生成多个小绿球,并置于一个数组中

5.拖拽红球

为红球添加点击、拖动、松开事件。记住红球上一页面停留位置,与现在页面停留位置做差得到红球在XY方向的移动距离,分别加上上一停留位置红球与容器左壁和上壁的距离得到现在红球与容器左壁和上壁的距离,不断循环更新上次停留位置和现在停留位置即可

6.红球的边界判断

红球和绿球的移动范围都是容器的宽度高度减去自身球面的宽度和高度。触碰边界则重载页面,为了避免页面重载时出现持续触碰边界的情况加了锁

7.红球与绿球的碰撞检测

判断两圆心之间的距离是否小于两圆半径之和

8.“坚持n秒”的定时器实现

定时器计时并修改span标签的innerHTML

9.清除定时器

游戏结束时清除定时器

下面展示代码:

/*  
    1.随机生成小绿球在顶部 位置随机
    3.小绿球自己运动
    4.弹性运动
    2.生成多个

    5.红球拖拽
    6.红球边界判断
    7.红球和绿球碰撞检测

    8.定时器清除
    9.坚持了多久
    (但对象编程)
*/

var game = {
   
    name:'游戏开始',
    redBall:document.getElementsByClassName('red')[0],
    RunTime:document.getElementsByTagName('span')[0],
    num:0,
    greenArr:[],
    flag:true,
    movePlus:{
   
        outer:document.getElementsByClassName('outer')[0],
        iWidth:document.getElementsByClassName('outer')[0].offsetWidth,
        iHeight:document.getElementsByClassName('outer')[0].offsetHeight,
        ispeedY:10,//小绿球的速度
        ispeedX:10
    },

    init:function(){
   
        console.log(this.name);
        // console.log(this.movePlus.iHeight);
        this.createBall(this.movePlus);
        this.dragRedBall(this.movePlus);
        this.runTime();
    },
    runTime:function(){
   
        var self = this;
        this.Timer = setInterval(function(){
   
            self.num++;
            self.RunTime.innerHTML = '坚持了' + self.num + '秒';
        },1000);
    },
    createBall:function(obj){
   
        var</
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值