VUE+WebPack前端游戏设计:实现外星人的动态下滑特效

本文主要是介绍VUE+WebPack前端游戏设计:实现外星人的动态下滑特效,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在上一节,我们完成了道具在页面上的拖拽特效。当用户在页面底部点击按钮选择一个道具后,鼠标在页面上移动时,一个闪光方块会跟随着鼠标移动,一旦鼠标在页面上单击后,相应的道具就会出现在鼠标点击的地方。

有了道具,本节我们要引入侵略外星人,完成本节代码后,可以得到如下效果:
这里写图片描述

页面上有两个外星人从高空徐徐下落,后面我们会开发代码,让用户拖拽的道具能阻止外星人的下滑,此处看不到动态效果,更详实的演示请点击如下链接:
更详细的讲解和代码调试演示过程,请点击链接

我们看看对应的代码实现。首先我们先创建外星人的类对象,在gamesceneComponent.js中添加如下代码:

enemy () {var enemyObj = new this.cjs.Container()enemyObj.originalSpeed = 0.5enemyObj.deceleration = 0.4enemyObj.hp = 10enemyObj.damageDeal = 10enemyObj.attackSpeed = 100enemyObj.speed = enemyObj.originalSpeedreturn enemyObj},

enemy 函数调用后返回一个cjs的容器对象,这个对象在后面会用来加载外星人对应的图片资源。在函数中配置了外星人对象的一些基本属性,例如speed代表它下落速度的快慢,daageDeal表示外星人的攻击力等。这个函数用于创建外星人的类原型,我们继续添加代码在原型的基础上增加配置,进而实现不同种类的外星人:

enemyTick (enemyObj) {if (this.cjs.Ticker.getPaused()) {return}if (enemyObj.speed < 0) {enemyObj.speed = 0}enemyObj.y += enemyObj.speed},enemyDummy () {var dummy = this.enemy()dummy.addChild(new this.assetsLib.Enemy1())dummy.originalSpeed = 0.3dummy.deceleration = 0.002dummy.hp = 1dummy.speed = dummy.originalSpeedreturn dummy},boss () {var bossEnemy = this.enemy()bossEnemy.addChild(new this.assetsLib.Boss())bossEnemy.originalSpeed = 0.2bossEnemy.deceleration = 0.002bossEnemy.hp = 300bossEnemy.attackSpeed = 50return bossEnemy}

enemyDummy和boss两个函数用来创建两种不同级别的外星人,enemyDummy创建的外形人就是上面图片演示中的宇宙飞船,boss就是上面图片中处于低位的方块机器人。这两个函数分别给enemy返回的容器对象加载不同的图片资源,然后配置不同的属性,例如速度,攻击力等,enemyDummy生成战斗力较弱的外星人,它的速度和攻击力都要比boss生成的外星人低。enemyTick函数用来在游戏的主循环中不断的更改外星人对象的相关属性,在该函数里是修改了外星人的速度属性,于是就形成了外星人在页面上不断从高处往下落的动态效果。

接下来我们要实现的回调函数,在游戏的Tick回调函数里被执行,这样它就能动态的在页面上绘制外星人对象从而实现动画效果,其代码如下:

init () {
...
this.boardLayer = this.Board()
this.stage.addChild(this.boardLayer)
// change here
// 手动添加两个敌人对象
this.addEnemy('enemyDummy')
this.addEnemy('boss')
this.lives = 2
...
},
...
tick () {
...// change herethis.boardTick()},...
// change hereboardTick () {// 从敌人对象数组中取出敌人对象,根据属性更新敌人对象在页面上的位置this.enemyMap = this.create2DArray(this.boardLayer.cols, this.boardLayer.rows)for (var i = 0; i < this.enemyList.length; i++) {var enemy = this.enemyList[i]var rowCol = this.screenToRowCol(enemy.x, enemy.y)this.enemyMap[rowCol.col][rowCol.row] = enemyenemy.col = rowCol.colenemy.row = rowCol.rowthis.enemyTick(enemy)}var len = 0// 当敌人对象落入到页面底部以后将其从页面上删除for (i = 0, len = this.enemyMap.length; i < len; i++) {if (this.enemyMap[i][this.boardLayer.rows] !== undefined) {var bottomEnemy = this.enemyMap[i][this.boardLayer.rows]this.lives -= 1this.removeItem(this.enemyList, bottomEnemy)if (bottomEnemy.parent) {bottomEnemy.parent.removeChild(bottomEnemy)}}}},// change hereaddEnemy (enemyClass) {var sprite = nullswitch (enemyClass) {case 'enemyDummy':sprite = this.enemyDummy()breakcase 'boss':sprite = this.boss()break}this.boardLayer.addChild(sprite)var col = Math.floor(Math.random() * this.boardLayer.cols)var pos = this.rowColToScreen(0, col)sprite.x = pos.xsprite.y = pos.ysprite.row = 0sprite.col = colthis.enemyList.push(sprite)},

addEnemy函数根据传入参数调用相关接口构造外星人对象,如果传入的参数是’dummyEnemy’,那么它调用dummyEnemy接口创建战斗力若的飞船外星人,如果传入参数是’boss’,那么它调用boss接口创建方块机器人,然后它把创建的外星人对象加入到板块图层,同时设置好它在图层中的坐标后,将对象加入到enemyList数组。

在init函数中,我们增加两行代码,通过调用addEnemy接口创建了两个外星人。boardTick函数用来不断的更新外星人对象在页面上的坐标,进而形成外星人在页面上变动的动态效果。它先调用create2DArray函数建立一个二维数组对象,然后根据外星人在页面上的坐标把外星人对象存储在这个二维数组的相应坐标下,然后调用enemyTick修改外星人对象的速度属性进而改变外星人的下降速度,进而改变外星人在页面上的坐标从而营造出外星人对象不断从高处下落的效果。

第二个for循环用于判断外星人的y坐标是否已经超出页面,如果是那么就把它从板块图层里删除,回收对象占据的页面内存。boardTick函数会在Tick函数里调用,Tick函数是游戏主循环不断调用的刷新函数,因此boardTick的调用频率跟Tick一样,于是它一旦执行就可以不断的修改外星人对象的坐标,进而形成下落效果。

下一节,我们将进一步开发更多更复杂的游戏功能,更详细的讲解和代码调试演示过程,请点击链接。

更多技术信息,包括操作系统,编译器,面试算法,机器学习,人工智能,请关照我的公众号:
这里写图片描述

这篇关于VUE+WebPack前端游戏设计:实现外星人的动态下滑特效的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/950065

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi