Phaser2游戏开发初体验

1,982 阅读3分钟

「这是我参与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(300300'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, 100100'#fff');

    // 查看精灵的物理体积
    game.debug.spriteBounds(sprite);

推荐学习地址:

  1. www.phaser-china.com/example-2.h…(phaser小站)
  2. www.phaser-china.com/tutorial-de… (入门教程必看)