JS实现FlyBird

article/2025/9/29 17:32:38

放假等毕业还是挺无聊的,正好闲着没事做就学了学JS,也算是重拾吧,照着视频写了一个,然后。。。视频源找不到了

1.环境和工具

windows10

WebStrom2018.1.4

测试直接用的webstrom里面的

2.运行截图


类似于这样,然后分辨率有点小问题,我在这里面直接写死的,不知道为什么用chrom调成iphone7的视图,上面写的分辨率是

但是我在html里面写成这个值的时候在屏幕上显示的只是上面这张图的四分之一左右,而且画面还不完整,不知道为什么,猜测可能是和屏幕的相互对应关系有关系吧。

3.目录树和主要实现思路

先把目录树放上来哈

FlyBird:
│  game.js
│  game.json
│  index.html
│  project.config.json
│  

├─.idea     这个文件里面放的是webstrom里面的配置文件之类的

│  │  misc.xml
│  │  modules.xml
│  │  webStromWorkSpace.iml
│  │  workspace.xml
│  │  
│  └─inspectionProfiles
├─js
│  │  Director.js
│  │  Main.js
│  │  
│  ├─base
│  │      DataStore.js
│  │      Resource.js
│  │      ResourceLoader.js
│  │      Sprite.js
│  │      
│  ├─player
│  │      Birds.js
│  │      Score.js
│  │      StartButton.js
│  │      
│  └─runtime
│          BackGround.js
│          DownPencil.js
│          Land.js
│          Pencil.js
│          UpPencil.js
│          
└─res   这个里面放的是各种资源文件
        background.png
        bgm.mp3
        birds.png
        land.png
        pie_down.png
        pie_up.png

        start_button.png

DataStore类里面有一个map,将需要在其他地方使用的Object都放置在这个map中,有利于统一管理。里面放了各种图片资源(image类型),甚至new了一个class放进去(像Land,BackGround之类的),方便在其他地方直接从DataStore里面取出来一样的对象。

因为是彷的微信开发,所以在根目录还有一个game.js文件,其实没有什么用,只有一个作用,就是new一个Main出来。

运行流程是index.html里面写了一个<script src='game.js'>然后game.js new 一个Main,运行Main里面的代码。

Main里面在构造函数中调用ResourceLoader类中的onLoader方法进行资源的预加载,加载完成后会回调Main函数中的onResourceFirstloaded方法,此方法将开始整个游戏的初始化。

init()方法注册鼠标点击事件,并且将铅笔所在的位置提前初始化出来,这时只是数值,还没有转化成真正的铅笔。然后调用Direct类里面的run方法,进行整个游戏图像的绘制过程。

Direct类里面的run方法就是进行各种图像的绘制,像Land,Bird等等

requestAnimationFrame(()=>this.run());

这个方法可以根据浏览器的要求自动进行帧率的设置,也就是自动调节run()方法回调的频率。

所有的需要画出来的对象,像Land,Bird之类的都是继承了一个Sprite基类,这个基类里面有一个draw函数,负责将图像画到屏幕上,通过调用drawImage方式实现,这个方法有很多参数,说一下


这个是webstrom带的自动提示,我懒的找这个函数的api了。。。

好,第1,2个参数是将原始图片从哪开始截取,图片的原点在图像的左上角,右侧和下侧为正。第3,4个参数是截取多少。

第5,6个参数是放在屏幕的那个位置,最后两个参数是屏幕上防止这个图片的位置的大小。如果和这个图片截取的大小不一致的话会对图像进行拉伸处理。

然后以Birds.js为例介绍,其他的都是大同小异。

Birds继承Sprite,其实每一个具体的精灵类的功能只有一个,那就是计算这个精灵的图像要放在哪,然后调用父类的draw方法将图片绘制到屏幕上。Birds的图片其实有三张,就是为了三张图片来回切换时能让其看起来是一个在扇翅膀的小鸟。然后再其中计算了重力加速度,就是对y值的处理,然后通过不停调用draw方法(每次y值不一样),来实现小鸟的上升下降效果。

Direct类像是Main类的分流吧,帮助Main类计算各种碰撞,方便程序的观看。

4.bug

1.铅笔整个都在屏幕内侧,应该尾部在屏幕之外的

2.然后碰撞函数没写完,也就是说小鸟没办法和铅笔碰撞

3.没有分数统计


完整代码在我的github 

https://github.com/xixihahag/FlyBird


http://chatgpt.dhexx.cn/article/9fSX00Ph.shtml

相关文章

纯C语言编程-游戏之Fly Bird

基于纯C的小游戏&#xff0c;基本思想就是使用system("cls")和printf()函数不断刷新界面&#xff0c;捕获键盘事件&#xff0c;然后修改显示数组&#xff0c;并刷新界面。 之前有一款特别火爆的小游戏FlyBird&#xff0c;我们可以使用纯C语言实现&#xff0c;希望对…

飞翔的小鸟(FlyBird)游戏C语言编程(含撞柱子)

// 飞翔的小鸟.cpp #include "stdafx.h" #include <graphics.h> //图形库头文件 #include <stdlib.h> //Sleep #include <conio.h> //_getch()按键盘 #include <stdio.h> //C语言头文件 #include <time.h> //随机函数使…

【Unity】Fly Bird(游戏实战)(1)

对于Fly Bird 相信各位肯定不会陌生。&#xff08;在安卓5.0-7.0版本的系统中多次点击Android Version 就会出现这个游戏&#xff0c;快去试试吧~~ 7.0及以后就没有了~~就做不了示范了 ~~ 刚开始Unity&#xff0c;也是写的第一个游戏就是做一个Fly Bird. 先把用到的音频&…

Scratch(三十五):FlyBird

哈喽&#xff0c;大家好&#xff01;今天给大家展示的Scratch是FlyBird。接下来&#xff0c;我们一起看一下效果吧。 1、素材获取 2、bird的设置 当点击完小绿旗之后&#xff0c;bird就会有个上下浮动的控制&#xff0c;也就是变量“重力”的设置&#xff0c;接着就是开始位置…

Html5在线小游戏 在线玩压扁小鸟(flyBird)游戏源码

这个源码无需后台上传服务器&#xff0c;直接在线即可使用。 该游戏源码是基于HTML5和JavaScript开发的&#xff0c;运行在浏览器中&#xff0c;使得用户能够方便地进行游戏&#xff0c;而且不需要进行任何安装和下载操作。想要玩游戏的用户只需要访问指定链接即可开始游戏&am…

cocos游戏FlyBird

cocos creator游戏开发FlyBird 菜单界面Menu 首先建立一个场景&#xff08;scence&#xff09; 将你的背景图片添加入canvas并调整canvas的大小来适应你背景图片的大小&#xff0c;最好不要去图片大小&#xff0c;这样会使你的图片变得很丑 添加一个按钮控件 并给这个场景添…

java fly bird小游戏_JavaScript实现Fly Bird小游戏

3.1 小鸟 首先&#xff0c;创建小鸟的对象&#xff0c; bird.js 文件。 div:document.createElement("div"),showBird:function(parentObj) { this.div.style.width "40px"; this.div.style.height "28px"; this.div.style.backgroundImage &…

FLY BIRD

这是作品需要的角色…… 注:水管要多弄几个造型例如: (作者用的背景是blue sky(scratch素材库里面的)) 一下是水管的程序: 小鸟的也很简单:

Java之编写FlyBird小游戏

Java小游戏编写&#xff08;飞翔的小鸟&#x1f426;&#xff09; 概述&#xff1a;主要使用面向对象&#xff0c;线程&#xff0c;继承、ImageIO流等完成的一个小游戏 主要文件&#xff1a; &#x1f405;&#x1f389;&#x1f405;&#x1f389;&#x1f405;&#x1f389;…

介绍一款2023年新出的mysql管理工具: FlyBird Database Manager

FlyBird Database Manager 介绍 FlyBird Database Manager 是一款mysql 界面化管理工具&#xff0c; 使用go语言编写&#xff0c;天然支持Windows, MacOS, Linux等主流平台。 提供无需安装的命令行版本&#xff0c; 命令行中启动服务&#xff0c;以html支持UI界面,在浏览器中…

网络打印机无法连接的解决方法

&#xfeff;&#xfeff; 网络 打印机无法连接的解决方法。 1、首先确定计算机是否可以连接网络打印机&#xff0c;网络打印机都会有一个内网ip地址&#xff0c;可以先ping一下看通不通&#xff0c;如果不通说明计算机与网络打印机之间线路不通&#xff0c;可以用排除法看看是…

win10 系统连接不到网络打印机

查看其它同事的网上邻居里可以看到内容&#xff0c;但 本机空空如也&#xff01; 解决方法&#xff1a;打开控制面板&#xff1a;如下图所示&#xff1a;1&#xff1a;“程序“”->2&#xff1a;“启用或关闭windows功能“->3&#xff1a;勾选"SMB 1.0/CIFS文件共享…

windows10突然连不上打印机问题

问题描述 windows10打印机突然连接不上了&#xff0c;出现了错误&#xff1a; Active Directory 域服务当前不可用。 解决方案 在cmd中输入 services.msc 找到 发现这个服务没有运行&#xff0c;点击运行按钮&#xff0c;出现错误信息&#xff1a; win10错误0x800706b9…

共享网络打印机连接,以及解决无法连接打印机的问题

win10共享网络打印机&#xff0c;及连接打印机 1.共享2.连接补充一点 1.共享 打开WIN的远程连接。&#xff08;一方面是为了能方便使用远程桌面&#xff0c;这个以后会写到&#xff09;——我的电脑—右键—属性—远程设置。把两个都选上。然后搜索栏输入‘打印机’&#xff0…

解决:Win11无法连接网络打印机

&#xff08;一&#xff09;打开本地组策略。 1.1 按winR键盘组合键打开“运行”。在运行框中输入 “gpedit.msc”&#xff0c;回车键。 1.2 “开始”菜单中搜索&#xff1a;组策略&#xff0c;然后出现【编辑组策略】&#xff0c;点击进入。 &#xff08;二&#xff09;管理模…

关于Windows11无法连接打印机

刚买的W11电脑&#xff0c;发现办公室的共享打印机连接不了&#xff0c;显示无法连接。也看了很多解决办法&#xff0c;都没能解决。 然后发现了可能是W11家庭版的问题&#xff0c;微软系统更新后&#xff0c;就是会存在打印机连接不上的问题。这个网址就可以解决以上的问题。…

Win10无法连接打印机怎么办?不能使用打印机的解决方法

在我们平常的办公中&#xff0c;经常会需要使用到打印机打印文件。想要使用打印机是需要先将电脑与打印机连接的&#xff0c;但是有部分Win10用户遇到了无法连接打印机的情况&#xff0c;对于这种情况应该如何解决呢&#xff1f;下面来看看详细的操作方法吧&#xff01; Ghost…

Win11 22H2共享打印机连不上怎么办?

Win11 22H2共享打印机连不上怎么办&#xff1f;有用户使用电脑的时候&#xff0c;需要去进行打印机的连接&#xff0c;但是在连接的过程中&#xff0c;却出现了无法连接的情况。那么遇到这个问题之后怎么去进行解决呢&#xff1f;一起来看看以下的解决方法分享吧。 解决方法&am…

windows无法连接到打印机?三个方法连接打印机(Win10系统)

在日常办公中&#xff0c;我们经常会用到打印机。一般情况下&#xff0c;打印机要与电脑连接才可以使用。有很多用户反馈&#xff0c;windows无法连接到打印机&#xff0c;这是怎么回事呢&#xff1f;请看文章是如何解决打印机无法连接到计算机的问题&#xff01; 操作环境&…

“windows无法连接到打印机”问题的解决

转载请注明出处&#xff1a;http://blog.csdn.net/dongdong9223/article/details/62045759 本文出自【我是干勾鱼的博客】 经常会出现“windows无法连接到打印机”这样的错误&#xff1a; 其实这是因为print spooler 自动关闭导致的&#xff0c;进入&#xff1a; 控制面板 -&…