「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战」
前一段时间,使用phaser2进行了一次游戏开发体验,相信大家对于小游戏开发也有一定的兴趣,下面来展开讲述一下phaser开发游戏过程中的一些核心概念和问题。
1. 坐标系
在游戏世界中,最重要的一个点就是坐标系。一切肉眼可见的东西都是基于坐标系实现的。由于phaser2底层使用的是canvas实现的,所以,它的坐标系跟canvas的坐标系是完全一致的,坐标原点(0,0)位于可视区域的左上角,向左向右无限扩展。
当然了,为了便于计算和适配不同机型,在某些场景下可能需要将坐标系的原点移动到可视区域的中心区域。对于坐标原点的移动可以通过 [Phaser].anchor.set 来实现。
2. 精灵
精灵是游戏世界中的最重要的组成部分,基本上游戏中的绝大数成员都是精灵。根据不同的类型,可将精灵划分为几种不同的类型,这里只是介绍一下日常开发过程中比较常用的。
1. 图片 image
只具备精灵最基本的属性,没有其它任何的特性,类似于原子,是精灵体系中的最底层成员了。
2. 普通精灵 sprite
相比较于图片,精灵图除了具备基本的精灵属性外,还具有物理属性(物理属性就是用来进行物理碰撞的,换句话说,图片是无法发生碰撞事件的)。
精灵销毁的两种方式及区别
-
destroy
-
kill
destroy会将精灵销毁的同时,会将精灵销毁的同时,从内存中销毁;而kill只是将精灵销毁掉,可以通过reset将精灵重新放入游戏世界。
需要注意的是: 将精灵从内存中销毁后,依然可以从game的cache属性中拿到它。
3. 精灵集 spritesheet
精灵图集是由n个宽高相同的精灵组成的雪碧图,然后通过切换位置(也就是index)来实现精灵动画效果。比较常见的应用场景:人物的动作,特殊的动画效果等。
3. 事件
phaser中也存在着事件,常见的有点击事件,键盘事件(keyboard),拖拽事件(drap)。
需要注意的一点是: 在点击、拖拽交互事件需要开启精灵的事件能力。
[Phaser].inputEnable = ture
const sprite = game.add.sprite(300, 300, 'infor');
sprite.inputEnabled = true;
// 允许拖拽
sprite.input.enableDrag();
// 竖直方向
sprite.input.allowVerticalDrag = false;
// 水平方向
sprite.input.allowHorizontalDrag = false;
4. 物理碰撞
想要实现碰撞检测,需要现在游戏世界中开启物理系统,然后将要进行物理碰撞检测的精灵加入到物理系统中。
game.physics.startSystem(Phaser.Physics.ARCADE)
然后通过在update方法中进行碰撞检测就可以了
game.physics.arcade.collide(sprite1, sprite2)
5. debug调试
游戏开发中,debug功能十分有用,特别是对于排除某些无法理解的游戏场景问题。
// 查看精灵基本信
game.debug.spriteInfo(sprite, 100, 100, '#fff');
// 查看精灵的物理体积
game.debug.spriteBounds(sprite);
推荐学习地址:
- www.phaser-china.com/example-2.h…(phaser小站)
- www.phaser-china.com/tutorial-de… (入门教程必看)