Phaser: Z-порядок не работает - PullRequest
0 голосов
/ 09 мая 2018

Я работаю над мозаичной игрой сверху вниз с использованием phaser, и у меня возникают проблемы с работой z-порядка.

Я поместил и мои объекты, и игрока в один класс спавнера, с кодом следующим образом:

for(var i = 0; i < this.mapFile.objects.length; i++) {
  if (this.mapFile.objects[i] === CONST.TILE.OBJECT.WALL) {
    var gridTile = this.grid.getTileAtIndex(i);
    if (gridTile.tileBaseObj) {
      var wall = new Wall(this.game, gridTile.x, gridTile.y, null, gridTile);
      gridTile.tileBaseObj.z = 2;
      this.group.add(gridTile.tileBaseObj);
    }
  }
  else if (this.mapFile.objects[i] === CONST.TILE.OBJECT.START) {        
    var gridTile = this.grid.getTileAtIndex(i);
    if (gridTile.tileBaseObj) {
      var startObj = new FloorObject(this.game, 'gridSampleStartPoint', gridTile, null);
      gridTile.tileBaseObj.z = 1;
      this.group.add(gridTile.tileBaseObj);
    }
  }
}

this.player = new Player(this.game, 'prohyasIdle', this.playerStartTile);
this.player.z = 2;

Вторичный объект с z из 1 - это стартовый тайл игрока, в котором появляется игрок с z из 2.

К сожалению, игрок появляется за плиткой.

Если исходить из довольно бесполезного сэмпла из phaser здесь , кажется, что есть встроенная опция для сортировки по объектам и значению y игрока, но этот пример физически перемещает игрок, тогда как в моей игре я использую подростки, чтобы привязать игрока к плиткам.

  • Ручная установка z плеера на 100 не работает. В частности, удаление игрока и объекта из любой группы и установка для z первого значения 100, а для последнего значения 0 по-прежнему приводит к тому, что объект выходит на первое место, если он создается / рисуется позднее. Означает ли это, что в Phaser нет (простого) Z-упорядочения?
  • Сортировка по y не решает проблему, и даже вводит другую проблему: перемещение персонажа вниз помещает его за плитку пола, когда он должен быть сверху.
  • Сортировка по z вместо этого также ничего не делает.

Хотя я хотел бы использовать подход трех групп и просто перемещать спрайты между группами, я боюсь, что решение может оказаться громоздким, когда могут быть сотни спрайтов, которые нужно переместить.

Могу ли я попробовать еще что-нибудь?

...