当前位置: 首页 > news >正文

前段-用面向对象的方式开发一个水管小鸟的游戏

首先准备好各类空文件 index.js css html 和图片
在这里插入图片描述
图片是下面这些,如果没有的可在这里下载
在这里插入图片描述

2 开发开始

好了,基础准备工作完毕,开发开始,
首先,先把天空,大地,小鸟的盒子准备好,并为其添加样式
在这里插入图片描述
需要注意的是,天空和大地,都是宽度200%,这是因为我们使用绝对定位,让图片往左移来模拟移动,所以不能设置100%

效果如下
在这里插入图片描述

3.给小鸟设置飞行状态

给小鸟添加飞行状态的css,并给小鸟设置初始飞行状态和初始位置

在这里插入图片描述

4. 添加水管

之后就是添加水管了,注意下面的水管应该加上地面的高度也就是112px,这样才能正常的显示,不然就穿出地表了

在这里插入图片描述

以上,使用css 和html静态页面布局就完成了,接下来是使用js来控制行为了

创建js对象

因为标题说的是使用面向对象的方式来写这个游戏,
为了不做标题单,所以我先开始创建对象
,根据上面写的那些可以很轻易地得出

这个游戏拥有的对象为

天空
大地
水管

然后再仔细观察,该如何来判断小鸟是不是装上了水管呢?,小游戏,自然是把他们看做是一个个的矩形(这也是为什么我一直留着边框)
只需要js判断矩形重合了,那就是撞到了
在这里插入图片描述

所以在这里可以抽象出他们的共同父类,矩形,
所以这里新建一个class.js用来做对象

在这里插入图片描述

然后就需要想一想,这个类需要有什么成员

  1. 小鸟,水管,大地,天空,都是要移动的,所以这个类要有移动这个成员
  2. 宽度,高度,这是基本的
  3. 小鸟水管在地图的坐标
  4. 既然他们都能移动,那就有速度,速度,这是2d的那就得分为,横向速度,纵向速度

于是就有了下面这个基类

class Rectangle {constructor(width, height, left, top, xSpeed, ySpeed, dom) {this.width = width;this.height = height;this.left = left;this.top = top;this.xSpeed = xSpeed;this.ySpeed = ySpeed;this.dom = dom;}render() {this.dom.style.width = this.width + "px";this.dom.style.height = this.height + "px";this.dom.style.left = this.left + "px";this.dom.style.top = this.top + "px";}move(duration) {const xDis = this.xSpeed * duration;const yDis = this.ySpeed * duration;const newList = this.left + xDisconst newTop = this.top + yDis;this.render()}
}

不好意思,朋友要噶了,我先去处理下,明天续写

相关文章:

  • Postman实现接口的文件上传
  • iOS学习 --- Xcode 15 下载iOS_17.0.1_Simulator失败解决方法
  • ts视频文件转为mp4(FFmpeg)
  • react中设置activeClassName的笔记
  • Hacker 资讯|11 月中下旬区块链黑客松活动汇总
  • 跟李沐学AI-深度学习课程05线性代数
  • KT148A语音芯片使用串口uart本控制的完整说明_包含硬件和指令举例
  • Linux CentOS 8(MariaDB的数据类型)
  • Pytorch自动混合精度的计算:torch.cuda.amp.autocast
  • 第77题. 组合
  • 服务注册发现 springcloud netflix eureka
  • 基于Pytorch的从零开始的目标检测
  • Java编程中,异步操作流程中,最终一致性以及重试补偿的设计与实现
  • Vue3-ref、reactive函数的watch
  • 2024年山东省职业院校技能大赛中职组“网络安全”赛项竞赛试题-A
  • 【node学习】协程
  • 【技术性】Search知识
  • 2017 前端面试准备 - 收藏集 - 掘金
  • CSS实用技巧
  • If…else
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • MQ框架的比较
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 包装类对象
  • 服务器从安装到部署全过程(二)
  • 简单基于spring的redis配置(单机和集群模式)
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 通信类
  • 无服务器化是企业 IT 架构的未来吗?
  • 再次简单明了总结flex布局,一看就懂...
  • ​TypeScript都不会用,也敢说会前端?
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #stm32整理(一)flash读写
  • (7)STL算法之交换赋值
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (二)c52学习之旅-简单了解单片机
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)平衡树
  • (转载)hibernate缓存
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net6Api后台+uniapp导出Excel
  • .Net多线程总结
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @Autowired自动装配
  • @我的前任是个极品 微博分析
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [AR Foundation] 人脸检测的流程
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析