《uni-app》一个非canvas的飞机对战小游戏-启动页

news/2024/5/19 0:27:52/文章来源:https://blog.csdn.net/zy21131437/article/details/127217681

在这里插入图片描述

这是一个没有套路的前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~接下来的几篇都是uni-app的小实战,有助于我们更好的去学习uni-app~
主页: oliver尹的主页
格言: 跌倒了爬起来就好~
————————————————
飞机对战小游戏
准备篇:https://oliver.blog.csdn.net/article/details/127185461

《uni-app》一个非canvas的飞机对战小游戏-启动页

  • 一. 前言
  • 二. 阅读对象与难度
  • 三. 项目地址
  • 四. 起始界面
    • 4.1 期望效果
    • 4.2 实现思路
    • 4.3 页面布局
    • 4.4 animation中的step与fill-mode
    • 4.5 点击事件
  • 五. 小结

一. 前言

上一篇主要描述了一下我们这个demo大致是有多少功能需要实现,并且介绍了开发这个项目需要使用的IDE以及如何创建项目,安装插件,上一篇那么本文开始我们就正式开始进入demo的实现~
耐心看完,或许你会所有收获~

二. 阅读对象与难度

本文难度属于:初级,难度依旧不大,本文实现的功能界面是游戏的启动页,这是飞机对战小游戏的第一个界面,本文主要的 知识点集中于HTML与CSS,通过文本你可以大致了解到一下内容

  • uni-app中的html布局;
  • CSS3动画属性animation;
  • vue中的click事件;

具体内容可以参考以下的思维导图:
在这里插入图片描述

三. 项目地址

文本代码已上传CSDN上的gitCode,有兴趣的小伙伴可以直接clone,项目地址:https://gitcode.net/zy21131437/planegameuni
如果有小伙伴愿意点个星,点个赞,那就非常感谢了~

四. 起始界面

4.1 期望效果

先看一下启动页,也就是有开始按钮的首页,通过这个页面的“开始游戏”按钮,才可以启动整个游戏,大致效果图如下:
在这里插入图片描述

4.2 实现思路

首先简单分析一下这个界面,界面元素并不复杂,仔细看看其实一共只有 4个元素游戏标题飞机大战一个穿梭的小飞机动画开始游戏的按钮 以及 一个背景图,最复杂的可能也就是哪个穿梭的小飞机动画了,先看张示例图吧
在这里插入图片描述
是不是觉得也并不复杂~游戏标题,背景图穿梭小飞机动画,都使用了CSS background,以及穿梭小飞机多使用了一个animation动画,使用animation动画属性做了个分步动画~唯一实现交互点的地方也就是点击按钮时需要关闭这个起始页面了,so easy;

4.3 页面布局

首先是 背景图,要实现背景图分为两步:

  1. 将背景图存在的View的高度设置为 全局撑满,只有这样才可以完整的显示背景图;
  2. 使用background属性引入背景图片

非常简单,具体代码如下:

<template><view class="content"></view>
</template><style scoped lang="less">
.content {position: absolute;top: 0;right: 0;bottom: 0;left: 0;background-image: url('@/static/images/bg.jpg');background-repeat: no-repeat;background-size: 100%;
}
</style>

这里为了图方便,直接将背景的 position 设置为了 absolute,然后上下左右全部拉满,接着引入了 staticimages 中的背景图并 设定尺寸为100%且不平铺
接着是标题,按钮与穿梭的小飞机,其实
这部分可以算作一个整体
,这样可以方便我们布局,毕竟背景图是公用的,而 这三个组成的部分当游戏开启时需要同步隐藏,示意图大致如下:
在这里插入图片描述
当然,如果可以的话,这三个 可以单独写在一个.vue文件里成为一个组件,作为起始页组件;
标题按钮实现的方式基本一致,并不复杂,简单的说就是在这个组件中的顶部与底部放了一个 imgbutton,代码如下:

<!-- 起始界面 -->
<view class="game-start-container" v-if="!isStart"><img class="logo" src="../../static/images/logo.png" /><view class="btn" @click="startGame">开始游戏</view>
</view>
</view><style scoped lang="less">.game-start-container {width: 20rem;height: 74%;position: fixed;top: 6rem;left: 50%;transform: translateX(-50%);.logo {width: 100%;}.btn {bottom: 1rem;border: 3px solid #3a3939;width: 70%;height: 3rem;line-height: 3rem;left: 50%;transform: translateX(-50%);cursor: pointer;border-radius: 3rem;text-align: center;position: absolute;}}
</style>

最后是 穿梭动画的小飞机,如果你看过之前的 实现点赞效果的那篇文章,那么这个动画其实也并不复杂,先上代码:

<view class="processing"></view>
.processing {width: 200px;height: 40px;margin: 40px auto 0;background: url('@/static/images/loading.png') no-repeat left top;animation: processing_animate 1.2s steps(3) both infinite;-webkit-animation: processing_animate 1.2s steps(3) both infinite;
}
/* 动画 */
@keyframes processing_animate {0% {background-position: 0 0;}100% {background-position: 0 -123px;}
}@-webkit-keyframes processing_animate {0% {background-position: 0 0;}100% {background-position: 0 -123px;}
}

其实就是定义了一个animation,然后定义了一个 动画processing_animate,这个动画实现的效果是改变图片的background-position属性也就是图片的坐标,通过改变图片的坐标使得原本后面被隐藏的尾气部分被展示了出来,从而达到了一个穿梭的效果
animation具体的属性值的含义则是,使用的是一个名为processing_animate的动画,动画持续了1.2s,并且通过step函数将其分割成了3步,动画结束后保留结束状态,以及最后动画进行无限循环~
这里面最复杂的animation属性 是step函数以及both属性,解析来我们仔细看一下:

4.4 animation中的step与fill-mode

首先来说说fill-mode,这个属性完整的属性名是:animation-fill-mode,作用是 设置 CSS 动画在执行之前和之后如何将样式应用于其目标,它共有四个对应的属性,分别是:

属性值作用
none默认值。动画在动画执行之前和之后不会应用任何样式到目标元素。
forwards在动画结束后(由 animation-iteration-count 决定),动画将应用该属性值。
backwards动画将应用在 animation-delay 定义期间启动动画的第一次迭代的关键帧中定义的属性值。这些都是 from 关键帧中的值或 to 关键帧中的值。
both动画遵循 forwards 和 backwards 的规则。也就是说,动画会在两个方向上扩展动画属性。

以这里的both为例,它代表将同时具有 forwardsbackwards 的效果,看个MDN上的演示效果就明白了
在这里插入图片描述
再来看下step函数,简单的说,这是一个 逐帧动画函数,它具有 两个参数,第一个参数是一个 正整数,简单的理解可以认为是这个动画一共要执行几步,第二个参数可选接收 start 或者 end默认是end,代表阶跃的状态;
以本文为例,step(3),也就代表它的逐帧动画会阶跃三次,第二个参数由于没有,那么会使用默认的end,再看我们的动画

/* 动画 */
@keyframes processing_animate {0% {background-position: 0 0;}100% {background-position: 0 -123px;}
}

这个动画一共只有2个状态,0% 和 100% ,这也就代表逐帧动画会在这个0-100之间阶跃三次,因此造成的效果就是3个断点的穿梭小飞机,可能有小伙伴问,如果这里的参数不是3,是4,会发生什么,直接看代码

 animation: processing_animate 1.2s steps(4) both infinite;-webkit-animation: processing_animate 1.2s steps(4) both infinite;

也就是这样,那么我们直接改一下,看效果
在这里插入图片描述
很明显,逐帧动画被改成了4步,但是效果有些奇怪,对吧,为什么,很简单,看到素材图相信你就明白了
在这里插入图片描述

我们的素材图只支持3步,并不支持4步,因此4步的逐帧动画看起来会比较奇怪,等等,你不会动画是以x轴的方向展示的吧,= =,不是的,这是以y轴的方式显示的通过纵向的滚动,将下方的图片展示到上方来,造成动画展示的效果
在这里插入图片描述

4.5 点击事件

点击事件,Vue中的基础能力之一,这是一个不管是在移动端还是web端都非常常用的功能点,它是界面与用户的基础交互能力;
在Vue中,点击事件时原生提供的,通过一个名为“指令”的功能实现,关键词v-on:click 或者简写 @click 具体用法如下:

<button v-on:click="startGame">开始游戏</button><!-- 或者简写 -->
<button @click="startGame">开始游戏</button>

在本文中的这个开始阶段,点击事件的作用仅是隐藏起始界面,也就是如下:

<view class="btn" @click="startGame">开始游戏</view><script>
export default {methods: {startGame() {this.isStart = true;// 其他操作},}
};
</script>

更多的其他操作到对应阶段我们在继续完善;

五. 小结

本文主要概述了我们这个飞机大战小游戏启动界面的实现,其实这个界面非常简单,元素一共只有4个:游戏标题飞机大战一个穿梭的小飞机动画开始游戏的按钮 以及 一个背景图,并且这四个元素最主要的知识点也在于界面的布局与样式,最复杂的部分也就是穿梭小飞机的animation动画,我们在本文中重点学习了小飞机使用到的step与fill-mode,这两个属性实现了穿梭机的分段动画,难度其实也不大,相信仔细看一下即可;
已经看到这里了,请点个赞吧,谢谢~~~ 下一篇我们将来实现 敌机模型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_20505.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于微信小程序的校园失物招领寻物启事系统 java uniapp 小程序

随着信息化时代的到来,管理系统都趋向于智能化、系统化,微信小程序校园失物招领也不例外,但目前国内的市场仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化,而微信小程序校园失物招领能很好地解决这一问题,轻松应对校园失物招领平…

老项目vue2.x误用了vue3的插件问题

老项目vue2.x误用了vue3的插件问题背景插件vue-template-compilervue-loader问题回溯总结背景 vue3出来两年多了&#xff0c;它刚出来的时候&#xff0c;vue3相比vue2似乎并没有想像中那样受大家欢迎。因为两个版本的构架上相差太大了&#xff0c;许多的API都不兼容&#xff0…

洛谷题单 Part 2.4 分治

分治 即分而治之 将大问题化解为小问题逐一求解 这种题没有固定的模板 只有分治的思想 所以在做题的时候应当多想如何将一个大问题化解成若干个子问题进行求解 直接上题了 P1226 【模板】快速幂||取余运算 非常经典的分治问题 常规算法求aba^bab要O(b)O(b)O(b)的时间复杂度 我…

Mybatis常见查询总结,仅限于初级程序员阅读

情况描述&#xff1a; 本人初次接触Mybatis&#xff0c;然后对于其中的一些基础查询做一些简单总结&#xff0c;一次用来记录他的用法&#xff0c;便于以后查漏补缺。 1、Mybatis中查询特定的列:&#xff08;单列&#xff09; 如果查询指定列为Long类型&#xff0c;那么在re…

游戏合作伙伴专题:BreederDAO 与 Affyn一起重构现实生活

BreederDAO 团队很宣布与 Affyn 建立了新的合作关系&#xff0c;Affyn 是一家位于新加坡的公司&#xff0c;开发了基于地理位置的增强现实移动游戏。 移动元宇宙 Affyn 团队由来自 EA、任天堂、迪士尼和星巴克等顶级游戏、娱乐和生活方式公司的资深员工组成。他们洞悉了目前边玩…

html5网页设计作业代码 大学生校园网站制作 学校官网制作html

&#x1f329;️ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套…

性能大PK count(*)、count(1)和count(列)

最近的工作中&#xff0c;我听到组内两名研发同学在交流数据统计性能的时候&#xff0c;聊到了以下内容&#xff1a; 数据统计你怎么能用 count() 统计数据呢&#xff0c;count() 太慢了&#xff0c;要是把数据库搞垮了那不就完了么&#xff0c;赶紧改用 count(1)&#xff0c;这…

基于Gossip的online server

在游戏服务端架构中online server,有些也叫center server。 主要承载以下功能:存储玩家的在线信息,处理上线和下线消息。 转发消息给特定玩家。online server在架构图中的位置online server集群内部架构图,以3个实例为例:特点:svr之间相互连接,采用Gossip协议通信。 各s…

MCMS 审计之路

MCMS 是 J2EE 系统&#xff0c;完整开源的Java CMS&#xff0c;基于SpringBoot 2架构&#xff0c;前端基于vue、element ui。为开发者提供上百套免费模板,同时提供适用的插件&#xff08;文章、商城、微信、论坛、会员、评论、支付、积分、工作流、任务调度等...&#xff09;&a…

大学网课查题系统

大学网课查题系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳…

VB6开发 用户控件OCX

VB6 中创建一个主窗体工程后,再添加一个 ActiveX用户控件工程 在用户控件窗体中可以添加 文本框和按钮的控件 属性Public strUrl As String方法发送消息 Public Sub WebSocketSendMsg(ByVal SendMsg As String) On Error GoTo ErrTrapDim sMsg As StringsMsg = msgInput.TextC…

公众号网课答案系统搭建

公众号网课答案系统搭建 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;…

Java I/O流和反射机制

文章目录File类操作文件或目录属性认识Java的流使用字节流读写文本文件使用字节流类FileInputStream读文本文件使用字节流类FileOutputStream写文本文件使用字符流读写文本文件使用字符流类BufferedReader和FileReader读文本文件使用字符流类BufferedWrite和FileWrite写文本文件…

公众号订阅通知

洛塔服务号回复010获取代码。 功能说明 公众号订阅通知这个功能&#xff0c;微信本来打算替代掉模板消息和一次性订阅的&#xff0c;最后也没替代掉&#xff0c;成为单独的一个功能。 个人感觉和一次性订阅是没有太大区别的&#xff0c;只不过增加了一个长期订阅&#xff0c;…

2022测试工作太难找,怎样才能优先获得面试机会?

软件测试岗位前期门槛低&#xff0c;但是想要拿到高薪真没那么简单。工作 2-3 年薪资还在原地打转的同学&#xff0c;都大有人在。 根据我对招聘需求的研究&#xff0c;以及跟拿到高薪的同学交流发现&#xff0c;他们普遍被要求&#xff1a; 1、学历 在学历方面&#xff0c;…

SAP 顾问攻略笔记之寄售业务

寄售业务处理 供应商寄售&#xff08;Vendor Consignment&#xff09;是企业与供应商签订协议&#xff0c;要求供应商将货物送达企业仓库&#xff0c;由企业进行保管&#xff0c;并自由分配使用&#xff0c;此时不发生物权转移&#xff0c;企业实际消耗或者转为自有库存时&…

SQL抽象语法树及改写场景应用

1 背景 我们平时会写各种各样或简单或复杂的sql语句&#xff0c;提交后就会得到我们想要的结果集。比如sql语句&#xff0c;”select * from t_user where user_id > 10;”&#xff0c;意在从表t_user中筛选出user_id大于10的所有记录。你有没有想过从一条sql到一个结果集&…

Linux_Bash_Shell_索引数组和关联数组及稀疏数组

1. 索引数组一、什么是索引数组? 所谓索引数组就是普通数组,以整数作为数组元素的索引下标。二、实例。 备注: (a)使用-a选项定义索引数组,使用一对小括号()定义数组中的元素列表。 (b)索引数组使用整数作为数组元素下标。备注: (a)使用@和*作为数组下标,表示获取所有元素…

Abp项目(.net) 部署到服务端IIS 无法正常打开页面运行问题

1.当前项目使用abp开发&#xff0c;框架是.net6.0 版本。项目开发完毕后是按照正常流程发布。因此发布完成后根目录下面会有一个 .exe 后缀可执行的应用程序。 2. 如果直接点击.exe 应用程序&#xff0c;是能正常运行的输出。 3.但是部署到iis 上&#xff0c;就出现如下错误 …

2022华为杯D题问题一详细思路建模和程序

问题一思路 本问题的赛题总共包括两个子问题&#xff0c;需要同学们在满足上述数据依赖、控制依赖、以及各具体子问题的资源约束条件下进行资源排布&#xff0c;并充分考虑各子问题的优化目标&#xff0c;以求最大化芯片资源利用率。 问题1&#xff1a;给定资源约束条件如下&a…