Рисовать серии изометрических врагов в правильном порядке или иметь дело с грязным прямоугольником? - PullRequest
2 голосов
/ 19 апреля 2011

Мне интересно, может ли кто-нибудь помочь мне убедиться, что мой ... э-э-э ... Z-индекс (плохой каламбур, вы поймете, почему через мгновение) находится в неправильном порядке.Я занимаюсь этим уже несколько часов подряд, и мои глаза начинают глючить - но - возможно, если оставить вопрос на стеке на ночь, это поможет мне двигаться в правильном направлении.

Я работаю надкод для https://github.com/AlexChesser/jsSprite и я дошел до 6-го теста.Используйте клавишу W для запуска, A и D для поворота влево и вправо: http://chesser.ca/jsSprite/06-brainnsss....php (Gettit? Z-Index ?! Веселый).

В любом случае, вы заметите, что если вы бегаетеэкран немного.белые квадраты / грязные прямоугольники отдельных Зомби перекрывают другие квадраты зомби.При работе с несколькими перекрывающимися спрайтами, как можно быть уверенным, что все они прорисованы, не расстраивая ни одного из других спрайтов?

(вы видите, z для зомби, но z index, как когда вы имеете дело сперекрытие в CSS - возможно, гораздо смешнее, когда вы кодируете несколько часов подряд).

Спасибо за ваши умственные способности ......

Ответы [ 2 ]

1 голос
/ 19 апреля 2011

Это не проблема z-index, с вашими зомби все в порядке.

Ваша проблема действительно со второй строкой drawFrame

drawFrame: function(){
  Sprite.ctx.clearRect(0,0,Sprite.width,Sprite.height); //clear previous frame
  // I am trouble:
  MainContext.clearRect(Sprite.Xpos, Sprite.Ypos, Sprite.width, Sprite.height);

Это очищает прямоугольникглавный холст, где зомби когда-то был каждый раз, когда вы рисуете зомби, который может влиять на близлежащие объекты!

Поэтому вместо этого вам следует каждый раз очищать весь холст.

Попробуйте закомментировать MainContext.clearRect в drawFrame, и вместо этого добавьте один в runloop, как показано ниже.Это должно исправить ваши проблемы.

runloop = function(m) {
  // New clear put here!
  MainContext.clearRect(0,0,canvas.width,canvas.height);
  m.drawFrame();
  for (Z in Zarr) {  // For ZOMBIE in "Zombie Array" Aaaaarrrgghhh... 
    Zarr[Z].pointTo(m);
    Zarr[Z].drawFrame();

    MainContext.drawImage(Zarr[Z].canvas, Zarr[Z].Xpos, Zarr[Z].Ypos);
  };
  MainContext.drawImage(m.canvas, m.Xpos, m.Ypos);
};
1 голос
/ 19 апреля 2011

Как насчет сортировки массива (Zarr) по координате y Ypos каждого зомби перед рендерингом?Или вы сталкиваетесь с проблемой (отсутствия) прозрачности?

...