Пролагивают спрайты

SFML и C++ Уроки \ Разработка игр Форумы SFML Graphics Пролагивают спрайты

Помечено: 

В этой теме 14 ответов, 3 участника, последнее обновление Павел Букреев Павел Букреев 11 мес. назад.

Просмотр 15 сообщений - с 1 по 15 (из 15 всего)
  • Автор
    Сообщения
  • #2616

    Denisson
    Участник
    Сообщений:7

    Зарегистрирован:
    31.12.2015

    Репутация:1

    При движении пролагивают спрайты, как показано на картинке. Как исправить? Нужную инфу скину.

    Вложения:
    You must be logged in to view attached files.
    #2618
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:584

    Зарегистрирован:
    04.01.2015

    Репутация:103

    мне кажется размеры всех спрайтов на один пиксель не соответствуют размеру окна. может быть поэтому..

    #2619

    Denisson
    Участник
    Сообщений:7

    Зарегистрирован:
    31.12.2015

    Репутация:1

    Причем это происходит не с одним конкретным местом, а во время движения камеры с разными спрайтами… Попробовал поизменять размер окна – ничего не дало. Размер спрайтов 50×50, окна на скрине 640×480

    #2620
    Heisenberg
    Heisenberg
    Участник
    Сообщений:314

    Зарегистрирован:
    01.04.2015

    Репутация:139

    Возможно вы обновляете камеру вида не синхронно. Покажите код отрисовки вместе с обновлением камеры.

    #2621

    Denisson
    Участник
    Сообщений:7

    Зарегистрирован:
    31.12.2015

    Репутация:1

    кусок отрисовки в цикле игры

    h.update(time);
    window.clear();
    window.setView(view1);
    // рисуем карту
    for (int i = 0; i < HEIGHT_MAP; i++)
    for (int j = 0; j < WIDTH_MAP; j++)
    {
    if (TileMap[i][j] == ‘ ‘) s_map.setTextureRect(IntRect(0, 0, 50, 50));
    if (TileMap[i][j] == ‘s’ || TileMap[i][j] == ‘0’) s_map.setTextureRect(IntRect(50, 0, 50, 50));
    if (TileMap[i][j] == ‘t’) s_map.setTextureRect(IntRect(50*2, 0, 50, 50));
    if (TileMap[i][j] == ‘k’) s_map.setTextureRect(IntRect(50*3, 0, 50, 50));
    s_map.setPosition(j * 50, i * 50);
    window.draw(s_map);
    }
    //игровые элементы
    for (int i = 0; i < box_k; i++)
    window.draw(box[i].sprite);
    for (int i = 0; i < h.bullet_k; i++)
    window.draw(h.bullet[i].sprite);
    for (int i = 0; i < enemy_k; i++)
    window.draw(enemy[i].sprite1);
    //
    window.draw(h.sprite1); // спрайт героя
    // игровой интерфейс (сверху слева)
    cursor_sprite.setPosition(window.mapPixelToCoords(Mouse::getPosition(window)).x, window.mapPixelToCoords(Mouse::getPosition(window)).y);
    text.setString(inttostr(h.ammo_k) + ‘/’);
    text.setPosition(view1.getCenter().x-375, view1.getCenter().y-250);
    icon_pistolet.setPosition(view1.getCenter().x-300, view1.getCenter().y-227);
    icon_pistolet.rotate(0.18);
    hp_bar_sprite.setPosition(view1.getCenter().x-400, view1.getCenter().y-290);
    window.draw(hp_bar_sprite);
    window.draw(icon_pistolet);
    window.draw(text);
    window.draw(cursor_sprite);
    //
    window.display();

    ниже h.update();

    void setPosition(db x1, db y1)
    {
    view1.setCenter(x1, y1);
    x = x1;
    y = y1;
    sprite1.setPosition(x1, y1);
    }
    void update(db time)
    {
    if (dx == 0 || dy == 0)
    setPosition(x + dx * time, y + dy * time);
    else
    setPosition(x + time * dx / sqrt(2), y + time * dy / sqrt(2));
    dx = 0; dy = 0;
    }

    #2622
    Heisenberg
    Heisenberg
    Участник
    Сообщений:314

    Зарегистрирован:
    01.04.2015

    Репутация:139

    срочно тащите бинты! У моих глаз утечка!

    #2623

    Denisson
    Участник
    Сообщений:7

    Зарегистрирован:
    31.12.2015

    Репутация:1

    Тем не менее, есть идеи?

    #2624
    Heisenberg
    Heisenberg
    Участник
    Сообщений:314

    Зарегистрирован:
    01.04.2015

    Репутация:139

    Тем не менее, есть правило.
    Пожалуйста пишите название темы согласно Вашей проблеме и закидывайте тему в нужный раздел! Не используйте слова типа “помогите!” и т.д. в названии темы. Для вставки кода найдите кнопку для кода – она чуть выше окна, в котором Вы пишете.

    Соблюдая это правило вы имеете больше шансов на помощь.

    А вообще если первый кадр идёт от 0 до 50, то начало следующего кадра будет с 51, т.к. 50 пиксель занят первым кадром.

    #2625

    Denisson
    Участник
    Сообщений:7

    Зарегистрирован:
    31.12.2015

    Репутация:1

    Сразу не нашел кнопку для оформления кода… Первый кадр у меня идет от 0 до 49, да и как я понял дело не в самих спрайтах, а именно в коде или самой библиотеке.

    #2626
    Heisenberg
    Heisenberg
    Участник
    Сообщений:314

    Зарегистрирован:
    01.04.2015

    Репутация:139

    Ага…

    Первый кадр у меня идет от 0 до 49, да и как я понял дело не в самих спрайтах, а именно в коде или самой библиотеке.

    Ну-ну!

    #2627

    Denisson
    Участник
    Сообщений:7

    Зарегистрирован:
    31.12.2015

    Репутация:1

    Я что-то недопонимаю… Скиньте исправленный код. Если я ставлю с 51, то перед каждым спрайтом белая полоса

    #2628
    Heisenberg
    Heisenberg
    Участник
    Сообщений:314

    Зарегистрирован:
    01.04.2015

    Репутация:139

    ставь до 49

    #2629

    Denisson
    Участник
    Сообщений:7

    Зарегистрирован:
    31.12.2015

    Репутация:1

    Потыкался… Если ставить 49 или 51, то появляются черные полосы.

    #2633
    +1

    Denisson
    Участник
    Сообщений:7

    Зарегистрирован:
    31.12.2015

    Репутация:1

    Проблема решена, с помощью загрузки спрайтов всех элементов карты из отдельных png

    #2635
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:584

    Зарегистрирован:
    04.01.2015

    Репутация:103

    Heisenberg, ты какойт жёсткий типок))

    Denisson, спасибо, что рассказал, как решил проблему:)

Просмотр 15 сообщений - с 1 по 15 (из 15 всего)

Для ответа в этой теме необходимо авторизоваться.