Аз съм в ранен етап на разработка на игра. Използвам изображения, за да създавам анимации, като рисувам част от по-голямо изображение върху повърхност. Ето примерен код:
void drawNextFrame() {
//surf.canvas().clear();
surf.clear();
float startX = entity.flipH ? entity.width : 0;
float endX = entity.flipH ? -entity.width : entity.width;
float width = entity.width;
float height = entity.height;
//surf.canvas().drawImage(image, 0, 0,
surf.drawImage(image, 0, 0,
width, height,
(width * curFrame) + startX, 0,
endX, height);
}
surf
е повърхността на SurfaceLayer
, а image
е Image
актив. Java версията на тази игра работи чудесно, тя е гладка и отзивчива и не изпуска никакви рамки или има проблеми с изобразяването. Имам обаче проблеми с HTML версията, изглежда бавна и изпуска много кадри в анимацията. Например имам анимация за изпълнение за плейъра, която се повтаря, изглежда, че HTML версията възпроизвежда анимацията само веднъж, преди плейърът да стане празен. Прескачането или задействането на друга анимация го коригира, така че мога да пусна отново анимацията за бягане, но тя все още няма да се възпроизведе след една итерация на анимационния цикъл, преди да превърне знака празен. Също така имам проблеми с последователното задействане на surf.clear()
и понякога кадрите се натрупват един върху друг.
Направих всякакви видове отстраняване на грешки, за да се уверя, че не рисувам кадри твърде бързо. Не докосвам метода paint(). Опитах да изключа SurfaceLayer
за CanvasLayer
и въпреки че изглеждаше, че това промени малко поведението по отношение на видовете проблеми с изобразяването, които имах и кога се случваха, това все още беше много невъзможно изживяване. Освен това не успя да създаде огледални изображения на моите изображения, когато например играчът е обърнат назад. Включих коментирания код за версията на Canvas по-горе - в този случай surf
е екземпляр на CanvasImage
. Използвам Box2D в допълнение към рисуването на тези анимации, ако това има значение.
Моят въпрос е: това нормално ли е? Само аз ли имам този тип проблеми и някой намерил ли е заобиколно решение? Просто искам да съм сигурен, че не правя нещо погрешно и подходите, които прилагам, са валидни.
Тествам с Chrome на доста модерна машина с клона 1.2 на PlayN. Създавам и тествам HTML версията на моя проект от командния ред чрез Maven със следните команди:
mvn clean
mvn install
mvn test -Ptest-html
И след това разглеждам http://localhost:8080 с Chrome.
Допълнителен проблем, с който се сблъсквам е, че опресняването на страницата не винаги презарежда играта ми. Внедрих AssetWatcher, за да се уверя, че всичко е налично преди стартиране и работи веднъж, обикновено след като изчистя кеша на браузъра си и рестартирам Chrome, но след това имам късмет, ако опресняването зареди играта. Обикновено трябва да повторя процеса на изчистване на кеша, да рестартирам браузъра, за да го тествам отново.
Знам, че задавам много въпроси, без да предоставям много код, но имам всичко в SVN хранилище онлайн и ще се радвам да го отворя за всеки, който желае да погледне.
Всяка помощ се оценява! Благодаря ви за отделеното време!