Я работаю над мозаичной игрой сверху вниз с использованием 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
вместо этого также ничего не делает.
Хотя я хотел бы использовать подход трех групп и просто перемещать спрайты между группами, я боюсь, что решение может оказаться громоздким, когда могут быть сотни спрайтов, которые нужно переместить.
Могу ли я попробовать еще что-нибудь?