KindRedSand

Созданные ответы форума

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

  • KindRedSand
    Участник
    Сообщений:82

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

    Репутация:30

    Вопрос и правду непонятен.

    Ты что-то подобное хотел?

    в ответ на: Class Text #4672
    +1

    KindRedSand
    Участник
    Сообщений:82

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

    Репутация:30

    Вобще, если пытаешься делать под себя обёртки для упрощения своей жизни, конструктор можно подгонять под любое количество аргументов. К примеру в своём коде я буду всегда по умолчанию использовать один и тот же шрифт который был статически где-то объявлен, соответственно в конструкторе я могу упустить передачу файла шрифта и уже сразу задавать строку и позицию, либо что-то ещё.
    К примеру на C# мой класс Text который я старался сделать похожим на аналог из SFML имеет уже зарание объявленую ссылку на шрифт которая присваивается ещё до вызова конструктора(Main.Font объявлен статично)

     

    в ответ на: Class Text #4670
    +1

    KindRedSand
    Участник
    Сообщений:82

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

    Репутация:30

     

    Ну а собственно, как ты собрался тут обращатся к text1 если в конце конструктора класса будет автоматически вызван его деструктор так как он окажется вне поля видимости всей программы? Если ты хочешь просто использовать конструктор текста достаточно обьявить статический метод. Так же желательно Font так же обьявить статическим (Или держать его обьявление в начале int mani() дабы не терять его из поля видимости на протяжении всего  жизненого цикла программы)

     


    KindRedSand
    Участник
    Сообщений:82

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

    Репутация:30

    А, и возможно я мог слишком неявно указать в чём проблема: Когда ты перетаскиваешь окно и игра доходит до секции отрисовки отрисовка приостанавливается до момента пока ты не отпустиш окно, и как только ты попадаешь в секцию где ты перемещаешь обьекты ты умножаешь перемещение на пройденое время ща цикл. Посколько цикл был приостановлен, но время продолжало идти перемещение обьектов оказывалось настолько большим что обьекты попросту повылетали за границы экрана.


    KindRedSand
    Участник
    Сообщений:82

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

    Репутация:30

    Для избегания таких вещей делают перемещение обьектов привязанно не ко времени, а к некому игровому тику который срабатывает каждый интервал времени.
    Для привязки всего к тику придётся переписывать половину кода. Для себя я набросал два класса которые отвечают за подобную механику обновления обьектов. Можешь спокойно использовать и модифицировать их как хочешь. Учти что:
    1. Твой код должен содержатся в классе – наследнике от State и в int main() должна быть обьявлена конструкция:
    IApp app(window);
    app.run(new ИмяНовогоКлассаState(&window))
    2. onHandle(sf::Event event) будет вызыватся на каждый ивент содержащийся в пуле окна
    3. onUpdate(sf::Time delta) и onDraw(sf::RenderWindow window) не всегда будут вызыватся одновременно за один цикл (если отрисовка займёт слишком много времени следующее обновление будет вызвано столько раз, сколько излишнего времени заняла отрисовка и наоборот, если отрисовка проходит быстрее чем временной шаг то будет снова вызыватся отрисовка пока не пройдт времени больше чем временной шаг).
    Ну, думаю и ежу понятно что код инициализации должен быть в конструкторе класса, логика в onUpdate а отрисовка в onDraw. Если нужно перехватить вводимый игроком текст или ещё что-то связаное с sf::Event – ловим в onHandle.
    Узлы, добавленые в addNode(Node * node), будут иметь приоритет заданый переменной Z и всегда приоритет ниже Parent(Т.е. класса в котором он был добавлен)
    Ну и собственно классы(Разбиты на хидеры и .cpp, как и положено). Кстати, если сможешь понять как можно использовать класс-узел (Node) это сильно сможет облегчить тебе жизнь в дальнейшем програмировании игры (В частности при помощи этого класса можно спокойно отрисовывать спрайты слоями, т.е. вначале то что должно быть на заднем плане, дальше на главном а после то что должно быть поверх главного плана)

     

    в ответ на: не могу убить игрока #4649
    +1

    KindRedSand
    Участник
    Сообщений:82

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

    Репутация:30

    А собствено как вы его убивать собрались? Если вы хотели просто не давать камере следить за игроком то зачем тогда выстроена такая конструкция?

     


    KindRedSand
    Участник
    Сообщений:82

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

    Репутация:30

    Проблемы две. Первая – тот же вопрос поднимался и на оффициальном форуме но всё сошло к тому что это дело гиблое.
    Вторая – на форуме практически никого нет, ну а поля для ввода и кнопочки я спокойно реализовывал и на самом SFML, так что тут я не советчик.
    Если нужны оконные кнопочки и тому подобное то был уже тред на этом форуме, там человек решил свою проблему прикрутив к MVS поверх SFML QT

    в ответ на: Стрельба по клику мыши #4642
    +1

    KindRedSand
    Участник
    Сообщений:82

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

    Репутация:30

    Возможно беда с нормализацией вектора. Когда мышь находится по отношению к спрайту на расстоянии меньше одного юнита может произойти подобное из за того что мы находим скаляр для приведения длинны вектора к 1 юниту.
    Попробуй заменить мой метод нормализации на этот

     

    в ответ на: Удаление из листа #4639

    KindRedSand
    Участник
    Сообщений:82

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

    Репутация:30

    При помощи дебага проверь попадает ли вобще код в
    <div id=”crayon-591320f37a462315167078-4″ class=”crayon-line crayon-striped-line”><span class=”crayon-st”>if</span> <span class=”crayon-sy”>(</span><span class=”crayon-sy”>(</span><span class=”crayon-o”>*</span><span class=”crayon-v”>iter1</span><span class=”crayon-sy”>)</span><span class=”crayon-o”>-></span><span class=”crayon-v”>life</span> <span class=”crayon-o”>==</span> <span class=”crayon-t”>false</span><span class=”crayon-sy”>)</span></div>
    <div id=”crayon-591320f37a462315167078-5″ class=”crayon-line”><span class=”crayon-sy”>{</span></div>
    <div id=”crayon-591320f37a462315167078-6″ class=”crayon-line crayon-striped-line”><span class=”crayon-v”>enemyArray</span><span class=”crayon-sy”>.</span><span class=”crayon-e”>erase</span><span class=”crayon-sy”>(</span><span class=”crayon-v”>iter1</span><span class=”crayon-sy”>)</span><span class=”crayon-sy”>;//Ставь точку дебага здесь и убей противника</span></div>
    <div id=”crayon-591320f37a462315167078-7″ class=”crayon-line”><span class=”crayon-e”>delete</span> <span class=”crayon-sy”>(</span><span class=”crayon-o”>*</span><span class=”crayon-v”>iter1</span><span class=”crayon-sy”>)</span><span class=”crayon-sy”>;</span></div>
    <div id=”crayon-591320f37a462315167078-8″ class=”crayon-line crayon-striped-line”><span class=”crayon-v”>iter1</span><span class=”crayon-o”>++</span><span class=”crayon-sy”>;</span></div>
    <div id=”crayon-591320f37a462315167078-9″ class=”crayon-line”><span class=”crayon-sy”>}</span></div>

    в ответ на: Удаление из листа #4637

    KindRedSand
    Участник
    Сообщений:82

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

    Репутация:30

    Собственно, что вы пытались данной конструкцией донести до машины? Что бы создавался новый обьект на месте старого с полной копией его параметров?
    iter1 даже после enemyArray.erase(iter1) будет сохранять ссылку на ОБЪЕКТ, при этом ссылка из листа будет удалена. Убери лишнее приведение и обьект будет успешно удалён.

     


    KindRedSand
    Участник
    Сообщений:82

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

    Репутация:30

    А, и не забывай использовать где надо packet.clear();


    KindRedSand
    Участник
    Сообщений:82

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

    Репутация:30

    Для начала в SFML Network уже присутствует контейнер для получаемых данных Packet. Instance of TYPE текущего масива в пакете проверяется легко

    Ну и у тебя есть 2 выбора. Либо при дисконекте клиента отправлять на сервер кодовую строку, либо проверять state у sf::Socket

     

     

    в ответ на: Проблема с оптимизацией #4632

    KindRedSand
    Участник
    Сообщений:82

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

    Репутация:30

    Делай проверку находится ли обьект в поле зрения и только тогда обновляй/рисуй обьект.


    KindRedSand
    Участник
    Сообщений:82

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

    Репутация:30

    Человеческий фактор никогда не отменялся. Странно что IntelliSense не маячит об этом…

    в ответ на: Не рисуется карта #4625

    KindRedSand
    Участник
    Сообщений:82

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

    Репутация:30

    Пробелы тоже символы, и учитываются при подсчёте длинны строки. Поскольку ты используешь константы для итерации по карте то будь добр проверять что длинна строки = этой константе:

    Поскольку c++ не поддерживает string по умолчанию сам он реализован в виде вектора char, и когда ты пытаешься сослатся на элемент которого нет в векторе – хватаешь экзепшен что ищеш обьект вне поля видимости. Выхода 2 – либо иметь строку длинной равной константе, что в данном случае самое уместное, либо считать длинну строки и использовать каждый раз её для итерации по масиву, что повлечёт свои проблемы так как это тайлсет а не строка содержащая в себе локализацию к примеру.

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