Създавам игра с плочки в Action Script 3 / Starling.
Да предположим, че имам сценарий като този:
+----+----+----+----+----+
| | | | | | 0th row - highest
+----+----+----+----+----+
| | | | | |
+----+----+----+----+----+
| | | | | |
+----+----+----+----+----+
| | | | | | 3rd row - lowest
+----+----+----+----+----+
В този пример имам сценарий с плочки 5x4. В реален геймплей ще имам сценарий с плочки 100x100.
Тази квадратна карта е за RPG игра, където всеки квадрат може да бъде зает от обект или герой. Обектите могат да бъдат като дървета, които са високи и биха скрили предметите зад себе си.
Ключовата концепция тук е „скриване на обекти отзад“ и колкото по-голям е номерът на реда, толкова „най-близо“ до екрана ще бъде той, а ако номерът на реда е N, редовете от 0 до N-1 ще бъдат скрити (всъщност "припокриване") от обекти в слоя N (пример: ако герой стои на позиция (x=1,y=2) с височина 2, а дърво стои на позиция (x=1,y=3 ), дървото напълно ще припокрие знака „отгоре“.
Мислех за възможна алтернатива:
Ако имам текущия спрайт Starling (който е създаден от самия Starling, предавайки своя клас на конструктора Starling) и създам един спрайт (под-спрайт) за всеки ред, като го прикрепя към родителския спрайт:
private var rows:Vector.<Sprite> = null;
public function createMapRows(nRows:int) {
this.rows = new Vector.<Sprite>();
for(var r:int = 0; r < nRows; r++) {
this.addChild(new Sprite());
}
}
Ако герой се премести наляво или надясно, той ще остане на същия слой. Ако персонаж се придвижи нагоре, мога да преместя играча от N-тия създаден спрайт към (N-1)-ия създаден спрайт, запазвайки неговите (X,Y) координати И изпълнявайки анимацията „преместване нагоре“. Ако герой се движи надолу, мога да преместя играча от N-тия създаден спрайт към (N-1)-ия създаден спрайт, запазвайки неговите (X,Y) координати И изпълнявайки анимацията „преместване надолу“.
Вярвам, че това ще работи, но съм загрижен за един аспект: производителността.
Моят Въпрос е: Това ли е най-добрият начин да се постигне това по отношение на производителността на паметта? Или може да е по-добро решение, което не включва проблема N+1*? (Всъщност, ако първият въпрос има отговор "НЕ", бих искал алтернатива).
(* Не, проблемът не е N+1 по отношение на записите в базата данни :p, а количеството спрайтове).