Четверг, 14 Ноября 2024, 09:57

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Отрисовка карты SFML
DivESДата: Суббота, 25 Апреля 2020, 22:25 | Сообщение # 21
заслуженный участник
Сейчас нет на сайте
veeroteen, если говорить грубо, то при статическом выделении памяти под объект
Код
int arr[10];

память под него выделяется из стека, а стек по размеру ограничен.
Если же выделять память динамически
Код
int* arr = new int[10];

то память выделяется из оперативной памяти. Круто, не правда ли? Это отвечает на вопрос, зачем играм нужна оперативная память.
Вот тебе уроки по C++. Или же вот.
Урок по динамическому выделению памяти под номером 85 (по первой ссылке).
Тебе рекомендую начать с первого урока laugh (нет, правда, будет полезно!)
realm786Дата: Воскресенье, 26 Апреля 2020, 13:58 | Сообщение # 22
был не раз
Сейчас нет на сайте
Цитата veeroteen ()
Подкиньте идей для отрисовки карты

Цитата veeroteen ()
realm786, этот вариант кода делает примерно то же самое, но тут как раз проблема в скорости

Цитата veeroteen ()
DivES, динамически выделить память под массив?


Не обозначена задача. Жанр Вашей игры хотя бы.

...

В любом случае, Вам придется разделить огромную карту на части.

И вызывать эти части через state - автомат.

В зависимости от обстоятельств.

Загружая в память необходимые ресурсы, в пределах разумного. Выгружая не используемые.

...

Точно так же разделить и хранить глобальные переменные в памяти для игровой логики.

Вызывая при необходимости. В порядке актуальности ( близости к месту событий/глоб. событий или игроку )

...

С переодическим сохранением (раз в n-минут) всего этого безобразия в бинарку на диск.

Цитата DivES ()
А вообще, это изначально выглядит сомнительно, твоё вот это желание создавать что-то на миллионы элементов...


Сообщение отредактировал realm786 - Воскресенье, 26 Апреля 2020, 14:00
AlexNaraitoДата: Воскресенье, 26 Апреля 2020, 16:28 | Сообщение # 23
уже был
Сейчас нет на сайте
На скорость отрисовки влияет ещё сколько раз вызывается draw функция, чем меньше, тем лучше.
Так что совет, если нужна оптимизация, то статичные объекты лучше рисовать через массив вершин (знаю, что там ещё больше мороки будет, но это ради оптимизации)
FlyOfFlyДата: Четверг, 04 Июня 2020, 00:29 | Сообщение # 24
заслуженный участник
Сейчас нет на сайте
Я просто ограничиваю зону рисование и рисую только от видимых границ(или чуть дальше)

Код
  for (int i = min.y; i < max.y; i++) {
   if (i < 0) continue;
   if (i >= heightMap) break;
   for (int j = min.x; j < max.x; j++) {
    if (j < 0) continue;
    if (j >= widthMap) break;
    TileMy* tm = Tiles[idsLayer][i][j];
    if (tm->Tiles == nullptr)continue;
    if (tm->TilesFrame == nullptr)
     target.draw(*tm->Tiles, states);
    else {
     tm->TilesFrame->getSprite()->setPosition(tm->Tiles->getPosition());
     tm->TilesFrame->getSprite()->setScale(tm->Tiles->getScale());
     target.draw(*tm->TilesFrame->getSprite(), states);
    }
   }

Код
void TiledMap::SetRegion(sf::Vector2i min,sf::Vector2i max) {
    this->min = min;
    this->max = max;
}

И при движение камеры использую
Код

view.setCenter(posTarget);
tiledMap->SetRegion(sf::Vector2i((posTarget.x / 16) - 10, (posTarget.y / 16) - 8),
   sf::Vector2i((posTarget.x / 16) + 10, (posTarget.y / 16) + 8));
  window->setView(view);
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг