• Как правильно работать с Canvas в Love2D?

    @dj--alex
    Canvas можно узнать что содержит сделав скриншот канваса.

    GAMEWINDOWCANVAS:newImageData():encode('png', realpath..levelname.. 'x2.png');
    подставляете имя своей функции вместо gamewindow. в какой то из версий love newImageData переименована учтите.

    я бы привел свой код целиком. но он слишком страшный. привел сокращенную версию примера со всеми ключевыми командами.
    поэтому опишу те крупицы что выучил сам.
    У меня 2 канваса.
    1-й атлас. в нем содержится все рисунки что есть в игре.
    2-й канвас это игровое поле, в нем "рисуется" поле кусочками 1-го канваса. квадами.

    пример как создать атлас.
    function create_atlas ()
    ATLAS = love.graphics.newCanvas(8192, basetexturesize) -- это создание пустой картинки для наполнения ее картой спрайтов.
    nonetexture="1empty.png";
    IMAGES = {};
    IMAGES[0]=objs[0+1][3]; -- у меня здесь обращение к таблице со списком ВСЕХ используемых картинок.
    for a0=1,170,1 do -- максимум временно 170 (6800 пикс), для 1 байтового режима - 256.
    IMAGES[a0]=objs[a0][3]; -- загружаем список имён из таблицы обьектов.
    end

    love.graphics.setCanvas(ATLAS)
    for i = 0, #IMAGES - 1 do
    local img = love.graphics.newImage("Textures/"..IMAGES[i + 1]);
    if (img==nil) then love.graphics.newImage("Textures/"..nonetexture); end;
    love.graphics.draw(img, i * basetexturesize)
    IMAGES[i + 1] = love.graphics.newQuad(i * basetexturesize, 0, basetexturesize, basetexturesize, 8192, basetexturesize)
    end
    love.graphics.setCanvas()
    end

    дальше можно просто рисовать тем массивом который сгенерировали в images
    GAMEWINDOWCANVAS = love.graphics.newCanvas(xxxx, yyyy) -- x,y, это создание пустой картинки для наполнения ее картой спрайтов.
    nonetexture="1empty.png";
    IMAGESX = {};
    love.graphics.setCanvas(GAMEWINDOWCANVAS);
    for yy=1,0+visual_mapsize_vertical,1 do -- этот цикл делает рендеринг, он же должен сделать активную копию карты. --5*editor+maximumvertical
    for xx=1,0+visual_mapsize_horizontal,1 do
    IMAGESX[object_to_rendering]=IMAGES[objectcodenow + 1];
    OBJECTPRINTNOW_IMAGESX=IMAGESX[object_to_rendering];
    postobjectX=xx*rozmiarznak;
    postobjectY=yy*rozmiarznak;
    love.graphics.draw(ATLAS,OBJECTPRINTNOW_IMAGESX,postobjectX, postobjectY,0,scaling,scaling);
    -- вот именно эта строчка выше и рисует всё что вы захотите на игровом поле.
    end;
    a=a+1;

    end;
    a=a+mapsize_horizontal-visual_mapsize_horizontal;
    end;
    end

    love.graphics.setCanvas() -- эта строчка возвращает рендерер в игровое поле. обязательная.

    пример не совсем правильный т.к. я не дошёл до того чтобы в 2-3 строки расположиь картинки
    я говорю у самого опыта пока мало.
    видеокарты не поддерживают ширину канвас более 8000 пикселей .если что.

    И ещё. Канвас надо формировать только если на поле что то меняется.
    Если игрок стоит на месте и не шевелится и его враги тоже - - его перерисовывать не надо.
    Ответ написан
    Комментировать
  • Как реализовать поворот персонажа?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    Можно посчитать угол линии между персонажем и мышкой. Есть такая формула
    Atan2(mouseY - playerY, mouseX - playerX) * 180 / Math.PI;

    и теперь у вас есть угол от 0 до 360, можете менять спрайт в зависимости от значения этого угла.
    Ответ написан
    4 комментария
  • Есть ли альтернатива include из php в js?

    heksen
    @heksen
    Не знаю как в javascript, но в jquery есть функция load.
    Пример: $( "#result" ).load( "ajax/test.html" );
    Ответ написан
    6 комментариев