热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[phaser3入门探坑]运用phaser3制造山寨马里奥

媒介phaser是一个优异的前端canvas库,封装了许多底层的完成,能够用来制造游戏,h5场景等。本年1月新宣布了phaser3,到今天为止已更新到了3.30。声明本游戏来自于p

媒介

phaser是一个优异的前端canvas库,封装了许多底层的完成,能够用来制造游戏,h5场景等。本年1月新宣布了phaser3,到今天为止已更新到了3.30。

声明

本游戏来自于phaser小站的官方教程,到场了一些个人的解释,本文旨在协助列位观众老爷疾速上手。

列位看官也能够直接移步phaser官网检察教程

小贴士

每一个步骤背面都贴了代码,假如由于我的写作体式格局让您难以接收,能够直接到每一个步骤背面

预备工作

你须要一份phaser3.js
也能够须要一份文档
假如有一份随时查阅的范例固然更好
一个当地服务器
一份包括素材的空[项目]()

最先制造

这里是为观众老爷们预备的github堆栈,有我们须要的素材和剧本文件

git clone https://github.com/YexChen/canvas_game.git

制造基础的游戏场景

翻开我们的项目文件夹,修正index.html















然后在命令行运转http-server,翻开浏览器,效果是否是出来了呢?
《[phaser3入门探坑]运用phaser3制造山寨马里奥》

在上面的剧本中,我们定义了三个函数,preload,create,update,离别代表游戏中的预加载,初始化函数,更新函数。

加载重要素材

在preload函数中到场以下代码段:

this.load.image("sky","./img/sky.png")
this.load.image("star","./img/star.png")
this.load.image("ground","./img/platform.png")
this.load.image("bomb","./img/bomb.png")
this.load.spritesheet("dude","./img/dude.png",{frameWidth:32,frameHeight:48})

spritesheet是精灵图的加载体式格局,frameWidth是每帧的宽度,frameHeight是帧的高度,有兴致的朋友们能够量一量

加载重要场景

摸了这么久的鱼,也该看点效果了吧,我们来制造主场景:
在create函数中到场:

this.add.image(400,300,"sky")

保留,革新,我们的界面上是否是涌现了一片蓝天呢?
《[phaser3入门探坑]运用phaser3制造山寨马里奥》

this.add.image(offsetX,offSetY,imagename)
有兴致的朋友们能够调下参数,试一下(0,0,'sky')是在哪一个处所的

让我们来继承增加场景吧,紧跟着上一句输入以下代码:

platforms = this.physics.add.staticGroup()
platforms.create(400,568,"ground").setScale(2,2).refreshBody()
platforms.create(600,400,"ground")
platforms.create(0,300,"ground")
platforms.create(600,200,"ground")
platforms.create(0,100,"ground")

create(x,y,imagename)
selScale(x,y):把图片缩放x,y倍,假如不设置y的话就按x的倍数缩放
这个refreshbody人人能够去掉,背面会有欣喜的

《[phaser3入门探坑]运用phaser3制造山寨马里奥》

如许场景就绘制出来了,列位看官也能够本身设置参数,制造属于本身的游戏场景

《[phaser3入门探坑]运用phaser3制造山寨马里奥》

只管不要做出这类反人类设想就行。。emmm,你的游戏你做主咯

能够内容多,人人能够会打错处所,发一下完全的代码段:















人物的制造

什么都有了,主角怎样能少呢?
紧接着上一行,写下代码:

player = this.physics.add.sprite(100,450,'dude')

革新一下,是否是看到我们的男主角天生出来。。然后又入土为安了呢?
智慧的你应该会想到:是缺少了碰撞函数,那末,让我们来增加碰撞函数吧,紧接着增加:

player.setBounce(0.2)
player.setCollideWorldBounds(true)

革新页面,哇塞
《[phaser3入门探坑]运用phaser3制造山寨马里奥》

我们的男主真入土为安了!

嗯,这不是我们想要的效果,最少不是我的。。我们彷佛遗忘给障碍物增加碰撞了,我们来加一下吧:

this.physics.add.collider(player,platforms)

人人还记得哪一个refreshbody吗?假如你当时删掉了它,那末碰撞就照样不会建立(话说这类东西作者去内置一个要领不就好了么)

这里贴出如今完全的代码:














增加动画效果和键盘控制器

如果不能操控的话,那这游戏也太佛系了,我们来增加一动画效果吧
Phaser类有个anims成员,用来管理所有的动画效果(说白了就是转变图片嘛),接下来我们经由过程代码感受一下,增加到上述代码背面:


this.anims.create({
key : 'left',
frames : this.anims.generateFrameNumbers('dude',{start : 0,end : 3}),
frameRate : 10,
repeat : -1
})
this.anims.create({
key : 'turn',
frames : [{key : 'dude',frame : 4}],
frameRate : 20
})
this.anims.create({
key : 'right',
frames : this.anims.generateFrameNumbers('dude',{
start : 5,end : 8
}),
frameRate : 10,
repeat : -1
})

然后我们初始化遥控器吧:

cursors = this.input.keyboard.createCursorKeys()

按下键盘方向键上下左右,诶?为何没反应?
我们彷佛遗忘在update函数中监听键盘了,难怪没反应,
在update函数中增加以下代码:

if(cursors.left.isDown)
{
player.setVelocityX(-50)
player.anims.play("left",true)
}
else if(cursors.right.isDown)
{
player.setVelocityX(50)
player.anims.play("right",true)
}
else{
player.setVelocityX(0)
player.anims.play('turn')
}
if(cursors.up.isDown && player.body.touching.down){
player.setVelocityY(-300)
}

好,如今挪动我们人物,哇,走的怎样这么慢!列位本身改下参数吧,每一个人都有差别的游戏兴趣,你肯定能够找到最适合本身的设置的,固然啦,也能够玩出溜冰形式,月球形式,鬼畜形式,仙人形式,鬼人正邪形式等等。。开辟游戏重要靠想象力对吧

贴一下我们的代码














早苗教你画星星

好了,人物有了,接下来应该做点道具了吧,我们来画点星星,在create函数中增加代码:

stars = this.physics.add.group({
key : 'star',
repeat : 11,
setXY : {x: 20,y: 0,stepX:70}
})
stars.children.iterate(function(child){
//设置一下碰撞效果
child.setBounceY(Phaser.Math.FloatBetween(0.4,0.8))
})
this.physics.add.collider(stars,platforms)

我们初始化了一些星星,增加了小小的碰撞效果,但是。。。

《[phaser3入门探坑]运用phaser3制造山寨马里奥》

并不能吃到星星!就像一大盘香喷喷羊蝎子在你眼前你却不能吃(我这篇博客定到晚12点发就好了)

由于没有写星星和男主的碰撞函数,我们来在背面写一行

this.physics.add.overlap(player,stars,collectStar,null,this)

overlap(obj1,obj2,overcallback,processcallback,回掉中的上下文(this))

然后在文件底部加一个函数:

function collectStar(player,star)
{
//让star实体消逝
star.disableBody(true,true)
}

好了,如今能够一般的吃星星了

贴上如今的代码段:














计分体系和炸弹,以及游戏完毕

假如这个游戏没有计分体系和炸弹的话,那末这个游戏也太过于佛系了
在preload前面加上一行:

let score = 0
let scoreText
let gameover = false

然后在create函数中尾部增加:

bombs = this.physics.add.group()
scoreText = this.add.text(16,16,"score : 0",{fontSize: '32px',fill: "#000"})

这是一个炸弹群组,我们在所有星星被吃光今后运用这个群组增加炸弹

修正collectstar函数为:

function collectStar(player,star)
{
//让star实体消逝
star.disableBody(true,true)
score += 1000
scoreText.setText("score :"+ score)
if(stars.countActive(true) === 0)
{
stars.children.iterate(function(child)
{
child.enableBody(true,child.x,0,true,true)
})
var x = (player.x<400)?Phaser.Math.Between(400,800):Phaser.Math.Between(0,400)
var bomb = bombs.create(x,16,'bomb')
bomb.setBounce(true)
bomb.setCollideWorldBounds(true)
bomb.setVelocity(Phaser.Math.Between(-200,200),20)
bomb.allowGravity = false
}
}

然后在create函数中加上碰撞:

this.physics.add.collider(bombs,platforms)
this.physics.add.collider(player,bombs,bombbbb,null,this)

在文件尾部加上撞击函数:


function bombbbb()
{
this.physics.pause()
//涂色,我以为绿绿的比较悦目
player.setTint(0x00ff00)
player.anims.play("turn")
gameover = true
}

至此,我们的游戏就功德圆满啦。。诶,彷佛我的人物还能动?这个题目就留给人人本身处理了哈哈
《[phaser3入门探坑]运用phaser3制造山寨马里奥》
完全代码:















推荐阅读
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文详细介绍如何在 Apache 中设置虚拟主机,包括基本配置和高级设置,帮助用户更好地理解和使用虚拟主机功能。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • Vue CLI 基础入门指南
    本文详细介绍了 Vue CLI 的基础使用方法,包括环境搭建、项目创建、常见配置及路由管理等内容,适合初学者快速掌握 Vue 开发环境。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 本文详细记录了 MIT 6.824 课程中 MapReduce 实验的开发过程,包括环境搭建、实验步骤和具体实现方法。 ... [详细]
  • Git命令基础应用指南
    本指南详细介绍了Git命令的基础应用,包括如何使用`git clone`从远程服务器克隆仓库(例如:`git clone [url/path/repository]`)以及如何克隆本地仓库(例如:`git clone [local/path/repository]`)。此外,还提供了常见的Git操作技巧,帮助开发者高效管理代码版本。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • SSL 错误:目标主机名与备用证书主题名称不匹配
    在使用 `git clone` 命令时,常见的 SSL 错误表现为:无法访问指定的 HTTPS 地址(如 `https://ip_or_domain/xxxx.git`),原因是目标主机名与备用证书主题名称不匹配。这通常是因为服务器的 SSL 证书配置不正确或客户端的证书验证设置有问题。建议检查服务器的 SSL 证书配置,确保其包含正确的主机名,并确认客户端的证书信任库已更新。此外,可以通过临时禁用 SSL 验证来排查问题,但请注意这会降低安全性。 ... [详细]
  • 本文全面解析了JavaScript中的DOM操作,并提供了详细的实践指南。DOM节点(Node)通常代表一个标签、文本或HTML属性,每个节点都具有一个nodeType属性,用于标识其类型。文章深入探讨了DOM节点的创建、查询、修改和删除等操作,结合实际案例,帮助读者更好地理解和掌握DOM编程技术。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
author-avatar
小美女金猪宝宝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有