HTML入门小站,Phaser

入门教程,我可不会讲什么概念,我只会讲一个入门例子,通过这个例子,你就知道phaser有多么强大,而照着这个例子做,你就能知道怎么使用phaser了。

需要说明的是,这个就是phaser官方的一个入门的案例!

做这个游戏需要多长时间,我可以告诉你,用phaser,只需要十分钟,下面就来一步一步进行游戏的实现。

首先第一步,搭建环境:html>

exam1

var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });

function preload() {

console.log('preload');

}

function create() {

console.log('create');

}

function update() {

console.log('update');

}

我不知道你有没有用过unity3d或者cocos2d,那时候要搭建一个环境是多么地复杂,而phaser,是需要引入一个js文件,是的,就这样环境就搭建好了。

就是上面这个html页面,在浏览器中打开,你会看到控制台的输出,preload用来加载一些资源,create用来进行一些对象的创建及初始化,update就是游戏的主循环。

接下来,我们来点东西:html>

exam2

var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });

function preload() {

game.load.image('sky', 'assets/sky.png');

game.load.image('ground', 'assets/platform.png');

game.load.image('star', 'assets/star.png');

game.load.spritesheet('dude', 'assets/dude.png', 32, 48);

}

function create() {

game.add.sprite(0, 0, 'star');

}

function update() {

console.log('update');

}

这时候,你可以看到左上角上有一颗星星,我们在preload中,将phaser需要使用到的资源加载进来,这里包括一些图片可一些序列帧。然后,我们通过game.add.sprite(0, 0, 'star');就可以把一个精灵显示在游戏区域的(0,0)点了。

d877ed2e1aef094663b4b21260765061.png

但是一个星星似乎没什么意思,接下来我们来绘制一下游戏场景,让游戏看起来有点雏形:html>

exam3

var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });

function preload() {

game.load.image('sky', 'assets/sky.png');

game.load.image('ground', 'assets/platform.png');

game.load.image('star', 'assets/star.png');

game.load.spritesheet('dude', 'assets/dude.png', 32, 48);

}

var platforms;

function create() {

game.physics.startSystem(Phaser.Physics.ARCADE);

game.add.sprite(0, 0, 'sky');

platforms = game.add.group();

platforms.enableBody = true;

var ground = platforms.create(0, game.world.height - 64, 'ground');

ground.scale.setTo(2, 2);

ground.body.immovable = true;

var ledge = platforms.create(400, 400, 'ground');

ledge.body.immovable = true;

ledge = platforms.create(-150, 250, 'ground');

ledge.body.immovable = true;

}

function update() {

console.log('update');

}

这里,我们开启了物理引擎,当然,这只是为了后面做准备。然后,我们创建了天空,大地和两个平板。大地和平板的位置定位,我们是通过坐标来进行的,大家可以仔细看一下图片大小及坐标位置的关系。其中,大地和两个平板都被加到了platforms这个组中,这个组我们为它启动了物理属性,然后我们设置了大地和两个平板是不能动的,这样他们就不会由于撞击被改变位置。

b30594164674e63a5a2ade19b0267534.png

这样,我们的游戏场景就加进来了,接下来,我们来加入一个小人,这个小人也是我们游戏的主角:html>

exam4

var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });

function preload() {

game.load.image('sky', 'assets/sky.png');

game.load.image('ground', 'assets/platform.png');

game.load.image('star', 'assets/star.png');

game.load.spritesheet('dude', 'assets/dude.png', 32, 48);

}

var platforms;

var player;

function create() {

game.physics.startSystem(Phaser.Physics.ARCADE);

game.add.sprite(0, 0, 'sky');

platforms = game.add.group();

platforms.enableBody = true;

var ground = platforms.create(0, game.world.height - 64, 'ground');

ground.scale.setTo(2, 2);

ground.body.immovable = true;

var ledge = platforms.create(400, 400, 'ground');

ledge.body.immovable = true;

ledge = platforms.create(-150, 250, 'ground');

ledge.body.immovable = true;

player = game.add.sprite(32, game.world.height - 150, 'dude');

game.physics.arcade.enable(player);

player.body.bounce.y = 0.2;

player.body.gravity.y = 300;

player.body.collideWorldBounds = true;

player.animations.add('left', [0, 1, 2, 3], 10, true);

player.animations.add('right', [5, 6, 7, 8], 10, true);

}

function update() {

console.log('update');

}

同样是通过game.add.sprite将精灵加入进来,但是大家仔细看看dude.png这张资源图片,这是一个帧动画序列,里面包含了小人左移和右移的动画帧。我们同样给它开启了物理属性,然后设置了它的弹性和重力。player.body.collideWorldBounds = true;这句话设置了它会与边界进行碰撞,这就是为什么小人落下的时候,到游戏区域边界就不会掉下去,大家可以把这句话注释掉再运行,看看会是什么情况。在这里,我们还为小人添加了两个动画,一个是向左移动,一个是向右移动,分别指定了响应的动画帧,这也是为后续的动画做准备。

96dd58ede2f63b6f42231b108eb2fa79.png

但是小人还没有站在地上,接下来,我们来让小人站在地上:html>

exam5

var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });

function preload() {

game.load.image('sky', 'assets/sky.png');

game.load.image('ground', 'assets/platform.png');

game.load.image('star', 'assets/star.png');

game.load.spritesheet('dude', 'assets/dude.png', 32, 48);

}

var platforms;

var player;

function create() {

game.physics.startSystem(Phaser.Physics.ARCADE);

game.add.sprite(0, 0, 'sky');

platforms = game.add.group();

platforms.enableBody = true;

var ground = platforms.create(0, game.world.height - 64, 'ground');

ground.scale.setTo(2, 2);

ground.body.immovable = true;

var ledge = platforms.create(400, 400, 'ground');

ledge.body.immovable = true;

ledge = platforms.create(-150, 250, 'ground');

ledge.body.immovable = true;

player = game.add.sprite(32, game.world.height - 150, 'dude');

game.physics.arcade.enable(player);

player.body.bounce.y = 0.2;

player.body.gravity.y = 300;

player.body.collideWorldBounds = true;

player.animations.add('left', [0, 1, 2, 3], 10, true);

player.animations.add('right', [5, 6, 7, 8], 10, true);

}

function update() {

game.physics.arcade.collide(player, platforms);

}

是不是很惊讶?要让小人站在地上,只要在update中加上一句,game.physics.arcade.collide(player, platforms);就可以了,这句话表示,检测小人与platforms组的碰撞,而大地正是在platforms组中,这样,小人就不会穿过大地了。同样地,当小人与两个平板碰撞时,也不会穿过了。

ab703aff654b40af033e19ef49ffb917.png

但是这小人还傻傻地不能动,接下来,就让小人动起来:html>

exam6

var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });

function preload() {

game.load.image('sky', 'assets/sky.png');

game.load.image('ground', 'assets/platform.png');

game.load.image('star', 'assets/star.png');

game.load.spritesheet('dude', 'assets/dude.png', 32, 48);

}

var platforms;

var player;

var cursors;

function create() {

game.physics.startSystem(Phaser.Physics.ARCADE);

game.add.sprite(0, 0, 'sky');

platforms = game.add.group();

platforms.enableBody = true;

var ground = platforms.create(0, game.world.height - 64, 'ground');

ground.scale.setTo(2, 2);

ground.body.immovable = true;

var ledge = platforms.create(400, 400, 'ground');

ledge.body.immovable = true;

ledge = platforms.create(-150, 250, 'ground');

ledge.body.immovable = true;

player = game.add.sprite(32, game.world.height - 150, 'dude');

game.physics.arcade.enable(player);

player.body.bounce.y = 0.2;

player.body.gravity.y = 300;

player.body.collideWorldBounds = true;

player.animations.add('left', [0, 1, 2, 3], 10, true);

player.animations.add('right', [5, 6, 7, 8], 10, true);

cursors = game.input.keyboard.createCursorKeys();

}

function update() {

game.physics.arcade.collide(player, platforms);

player.body.velocity.x = 0;

if (cursors.left.isDown)

{

player.body.velocity.x = -150;

player.animations.play('left');

}

else if (cursors.right.isDown)

{

player.body.velocity.x = 150;

player.animations.play('right');

}

else

{

player.animations.stop();

player.frame = 4;

}

if (cursors.up.isDown && player.body.touching.down)

{

player.body.velocity.y = -350;

}

}

我们希望让小人在按下方向左键的时候,向左移动,按下方向右键的时候,向右移动,为了实现这一功能,我们又定义了一个cursors,我们通过cursors = game.input.keyboard.createCursorKeys();来获取系统的键盘输入对象。然后,我们在update中,通过cursors.left.isDown来判断用户是否按下了键盘左键,如果按下了,我们给小人设置一个速度,然后播放左移的动画,方向右键的逻辑是一样的。如果方向左键和右键都没有按下,那么我们就通过player.frame来设置小人停在第4帧。小人的跳跃是通过方向上键来实现的,但是这里有一个条件,就是小人在空中的时候,不允许跳跃,所以,加上了一个player.body.touching.down的判断条件。

d7ccdee3d8f37dde8833775d10e7cf9e.png

一个小人在这个场景中动,也没啥意思,不如加点东西:html>

exam7

var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });

function preload() {

game.load.image('sky', 'assets/sky.png');

game.load.image('ground', 'assets/platform.png');

game.load.image('star', 'assets/star.png');

game.load.spritesheet('dude', 'assets/dude.png', 32, 48);

}

var platforms;

var player;

var cursors;

var stars;

function create() {

game.physics.startSystem(Phaser.Physics.ARCADE);

game.add.sprite(0, 0, 'sky');

platforms = game.add.group();

platforms.enableBody = true;

var ground = platforms.create(0, game.world.height - 64, 'ground');

ground.scale.setTo(2, 2);

ground.body.immovable = true;

var ledge = platforms.create(400, 400, 'ground');

ledge.body.immovable = true;

ledge = platforms.create(-150, 250, 'ground');

ledge.body.immovable = true;

player = game.add.sprite(32, game.world.height - 150, 'dude');

game.physics.arcade.enable(player);

player.body.bounce.y = 0.2;

player.body.gravity.y = 300;

player.body.collideWorldBounds = true;

player.animations.add('left', [0, 1, 2, 3], 10, true);

player.animations.add('right', [5, 6, 7, 8], 10, true);

cursors = game.input.keyboard.createCursorKeys();

stars = game.add.group();

stars.enableBody = true;

for (var i = 0; i 

{

var star = stars.create(i * 70, 0, 'star');

star.body.gravity.y = 300;

star.body.bounce.y = 0.7 + Math.random() * 0.2;

}

}

function update() {

game.physics.arcade.collide(player, platforms);

game.physics.arcade.collide(stars, platforms);

game.physics.arcade.overlap(player, stars, collectStar, null, this);

player.body.velocity.x = 0;

if (cursors.left.isDown)

{

player.body.velocity.x = -150;

player.animations.play('left');

}

else if (cursors.right.isDown)

{

player.body.velocity.x = 150;

player.animations.play('right');

}

else

{

player.animations.stop();

player.frame = 4;

}

if (cursors.up.isDown && player.body.touching.down)

{

player.body.velocity.y = -350;

}

}

function collectStar (player, star) {

star.kill();

}

在create中,我们又创建了一个stars的组,在这个组中,添加了12个星星,然后设置了它们的重力,随机设置了弹性,所以它们掉落的时候,碰到平板或者地面,会弹起不同的高度。同样,星星也不能穿过地面,所以在update中,添加了碰撞检测。

还有一层碰撞检测就是小人和星星的碰撞,当小人和星星发生碰撞的时候,需要让星星消失,这时候,再添加碰撞检测的时候,我们还添加了一个回调函数collectStar,在这里面,我们的player和star都会作为参数传递进来,通过调用star.kill();将星星销毁。

9d3baebaac3595cdccc307bc604a87a8.png

星星全部收集完毕了,接下来我们需要进行得分的计算,不能光收集星星不得分对不对?html>

exam8

var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });

function preload() {

game.load.image('sky', 'assets/sky.png');

game.load.image('ground', 'assets/platform.png');

game.load.image('star', 'assets/star.png');

game.load.spritesheet('dude', 'assets/dude.png', 32, 48);

}

var platforms;

var player;

var cursors;

var stars;

var score = 0;

var scoreText;

function create() {

game.physics.startSystem(Phaser.Physics.ARCADE);

game.add.sprite(0, 0, 'sky');

platforms = game.add.group();

platforms.enableBody = true;

var ground = platforms.create(0, game.world.height - 64, 'ground');

ground.scale.setTo(2, 2);

ground.body.immovable = true;

var ledge = platforms.create(400, 400, 'ground');

ledge.body.immovable = true;

ledge = platforms.create(-150, 250, 'ground');

ledge.body.immovable = true;

player = game.add.sprite(32, game.world.height - 150, 'dude');

game.physics.arcade.enable(player);

player.body.bounce.y = 0.2;

player.body.gravity.y = 300;

player.body.collideWorldBounds = true;

player.animations.add('left', [0, 1, 2, 3], 10, true);

player.animations.add('right', [5, 6, 7, 8], 10, true);

cursors = game.input.keyboard.createCursorKeys();

stars = game.add.group();

stars.enableBody = true;

for (var i = 0; i 

{

var star = stars.create(i * 70, 0, 'star');

star.body.gravity.y = 300;

star.body.bounce.y = 0.7 + Math.random() * 0.2;

}

scoreText = game.add.text(16, 16, 'score: 0', { fontSize: '32px', fill: '#000' });

}

function update() {

game.physics.arcade.collide(player, platforms);

game.physics.arcade.collide(stars, platforms);

game.physics.arcade.overlap(player, stars, collectStar, null, this);

player.body.velocity.x = 0;

if (cursors.left.isDown)

{

player.body.velocity.x = -150;

player.animations.play('left');

}

else if (cursors.right.isDown)

{

player.body.velocity.x = 150;

player.animations.play('right');

}

else

{

player.animations.stop();

player.frame = 4;

}

if (cursors.up.isDown && player.body.touching.down)

{

player.body.velocity.y = -350;

}

}

function collectStar (player, star) {

star.kill();

score += 10;

scoreText.text = 'Score: ' + score;

}

我们通过game.add.text为场景加上一个文本,显示在左上角,在collectStar的时候,将分数进行累加,然后更新显示,这样就结束啦。

12af47de1a5832f0284245c9fae11688.png

到这里,一个简单的小游戏就实现了,是不是比想象中的简单呢?

其实Phaser官方还为这个小游戏提供了一些其他的素材资源,但是在这里没有用到,可能是希望我们自己进行扩展吧!

用phaser做游戏,就是这么简单,只要会一点点js,人人都能做游戏啦!

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

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

相关文章

h2 可视化界面能添加 添加表_Excel只能做表格?那是你不会用!10分钟做出高大上可视化图...

很多公司都要求员工熟练的掌握Excel。But,绝大多数人所谓的熟练使用Excel,估计也只会一些简单的表格和知道加减乘除、求和吧!再难一点,估计就真的把自己难倒了。讲真,Excel还是很牛的,只是你不会&#xff0…

戴尔电脑怎么安装一级计算机,手把手教你戴尔笔记本电脑重装系统教程

随着生活质量的提高,现今基本上人人都拥有一台专属于自己的笔记本电脑。但要是说起笔记本,那dell笔记本可是一个不错的品牌呢?所以小编今天要给大家说的知识点就是关于Dell笔记本怎么重装系统的内容。有兴趣的可以学起来哦!最近小编发现有小…

量子计算机通用程序,量子计算机程序具有“通用性”?基于拓扑量子纠错码的量子计算机...

原标题:量子计算机程序具有“通用性”?基于拓扑量子纠错码的量子计算机不管量子计算机的内部是由什么组成,量子计算机的快速计算都可以归结为应用于量子比特的简单指令序列,即量子计算机内部的基本信息单位。无论这台计算机是由离…

指纹机和计算机无法连接,考勤机怎么连接到电脑?考勤机连接电脑之后操作指南!...

考勤机,主要是用来将员工的出勤基本情况记录以及统计下来的机器。同时能够根据员工的工作上下班时间,详细地统计出加班时间、早退、迟到、旷工等出勤的情况。我们在统计具体的数据情况时候,就需要将考勤机与电脑进行联机,这样更加…

canvas转盘-拯救选择困难

转盘-拯救选择困难效果图简介代码效果图 简介 每到饭点就纠结吃什么,不如直接roll点。 在词条框中输入选项,选项用逗号(中英都可)隔开。点击设置词条,会根据词条(没有输入则获取代码中的默认词条&#xf…

ue4中在物体上加ui_UE4 物体位置同步相关源码分析浅谈

前言多图, 不想在源代码写注释, 不想贴代码块, 看的不清楚版本4.21混4.22, 区别不大文章属于旧有文章搬运, 之前在csdn上面2019.10.27修改一版物体位置信息同步, 或者说物体的移动同步, 是一个很大的坑, 从个人目前魔改UE4位置同步后, 感觉至少要考虑以下几点位置信息的数据结构…

Prime算法生成迷宫

prime迷宫生成结果展示算法解析实现代码结果展示 算法解析 参考链接 Prime迷宫生成算法的原理: (1)初始地图所有位置均设为墙 (2)任意插入一个墙体进墙队列 (3)判断此时墙体是否可以设置为路(判断依据在于上下左右四个位置是否只有一个位置是路) (4)若设置为路&…

wifi密码公式计算机,求一些高数公式,做wifi密码用?

满意答案thyk72832018.06.08采纳率:55% 等级:13已帮助:8612人1)∫kdxkxc2)∫x^udx(x^(u1))/(u c3)∫1/xdxln|x|c4) ∫a^xdx(a^x)/lnac5)∫e^xdxe^xc6)∫sinxdx-cosxc7)∫cosxdxsinxc8)∫1/(cosx)^2dxtanxc9)∫1/(sinx)^2dx-cotxc10)∫1/√…

canvas简单五子棋

canvas简单五子棋效果思路代码效果 思路 canvans 绘制棋盘&#xff0c;绘制时候边缘预留棋子位置监听点击事件绘制落子并记录到字典中获胜判定&#xff0c;在四个方向上检测是否有足够数量的连贯棋子 代码 <!DOCTYPE html> <html lang"en"> <head…

viewBox视图缩放(1)

文章目录前言一、案例解析前言 svg 的viewBox 可以重新定义视口的显示范围&#xff0c;通常表现为平移&#xff0c;缩放内容&#xff0c;之前测试的一直是viewBox 和viewPort 之间的等比缩放&#xff0c;后来发现不等比情况与认知有些出入&#xff0c;如下 <svg width&quo…

sklearn svm如何选择核函数_文本挖掘篇|利用SVM进行短文本分类

何为数据挖掘&#xff0c;顾名思义就是从大量数据中挖掘或抽取出知识。在实际中&#xff0c;进行数据挖掘的数据不仅仅有数值型数据&#xff0c;还有图片型数据&#xff0c;文本型数据等。而所谓文本挖掘&#xff0c;就是从大量文本数据中&#xff0c;提取出对信息使用者有价值…

微信企业号已停止提供企业消息会话服务器,企业微信注册时显示会话服务已经被安装了怎么解决 解决攻略教程大全...

2016年4月18日&#xff0c;腾讯正式发布全平台企业办公工具“企业微信”&#xff0c;并通过腾讯应用宝独家首发安卓版。“企业微信”的推出将为企业员工提供最基础和最实用的办公服务&#xff0c;并加入贴合办公场景的特色功能、轻OA工具&#xff0c;合理化区分工作与生活&…

ftp服务器文件名存在,有什么办法根据已知文件名来检测FTP服务器上是否存在该文件? 急...

蛊毒传说我不敢说_________________using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.IO;namespace test{ class Program { static void Main(string[] args) { string path "ftp://192.168.1.200/ser…

A* 寻路 +寻路演示(js)

效果 每个单元格内文字&#xff1a; (F) (Price) (G) (H) 原理 原理是参考另一篇csdn博文&#xff0c;不过忘记收藏找不到了 初始化 open_set和 close_set。将 起点 加入open_set中&#xff0c;并设置优先级为0&#xff08;优先级最高&#xff09;。如果open_set不为空&…

pc端无法ping android模拟器_【内附下载方式】PC端最新宝可梦 Lets Go去皮去伊模拟器+最新dlc+mod...

游戏名称&#xff1a;精灵宝可梦 Let‘s go 皮卡丘 伊布游戏总大小&#xff1a;9GB游戏简介&#xff1a;《精灵宝可梦 Lets Go 皮卡丘/伊布》是宝可梦系列全新作品&#xff0c;也是该系列首次登上Switch主机&#xff0c;为后续作品的开发奠定了基础。本作可以视为是对第一世代红…

自定义处理网页选区字符并实时显示(js)

概述 浏览网页的时候&#xff0c;可能需要去数一下某段文字的字符数量&#xff0c;或者需要对选中内容做些实时翻译&#xff0c;比如进制的转化&#xff0c;可以使用脚本做个简单的实时翻译。 效果 选中内容&#xff0c;并且鼠标移动时会在左下角显示翻译后的结果。示例为翻…

伽罗瓦域(256) 生成指定纠错码字的生成多项式 (js)

效果 使用 复制code 保存为html 涉及内容 1、有限域、伽罗瓦域(256) 2、对数反对数 3、XOR 异或 两个因式各项相乘&#xff0c;当系数项相乘时&#xff0c;指数相加并mod(255) 合并同类项时&#xff0c;相同项的系数合并为 XOR操作&#xff1b; 伽罗瓦域依旧有些犯懵&…

实现二维码-完整三种编码流程加代码解析(javascript)

效果 输入内容&#xff1a;XXXwedewed生日//&sss乐❤XXXwedewed生日//&sss乐❤ 完整的演示效果为&#xff0c;输入内容后会将解码绘制的每一步都展示&#xff08;有点长就不全截图了&#xff0c;可以直接移至最后复制代码到本地运行&#xff09;&#xff1a; 原理…

three.js 拖动场景中物体(原生|拖拽控制器)

非控制器版 拖动场景中的物体实际上是在一个平行于窗口的平面中进行拖动&#xff0c;确定这个平面并确定鼠标在该平面中的位置变化&#xff0c;就将问题转换成简单的2d移动物体了 <!DOCTYPE html> <html> <head><meta charsetutf-8><title>015-…

element-ui 可复选树型表格

效果 思路 自定义模板当点击某个行复选框时&#xff0c;其所有后代复选框都要同步状态&#xff0c;且其直系父辈状态需要根据所点击复选框的状态来修正点击全选复选框时&#xff0c;批量同步所有行内复选框状态 代码 非封装组件&#xff0c;按需自行改写 确保引入element-ui…