KindRedSand

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

Просмотр 15 сообщений - с 16 по 30 (из 82 всего)
  • Автор
    Сообщения
  • в ответ на: мой клон марио #4895

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

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

    Репутация:30

    Кодировка на коментариях…. Явно не UTF-8, а кракозябры не читаемы и переводить каждую строку – лень. Собственно потому я если и пишу аннотации – то на английском. Если хочешь – могу выложить свои наработки на C#, может чего интересного там найдёшь (если знаешь плюсы то в шарпе всё будет интуитивно понятно, единственное но что плюсы не поддерживают рефлексию ). Кстати есть детектор коллизии основаный на SAT для наклонных поверхностей и т.д.


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

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

    Репутация:30

    У тебя только два варианта – либо просчитывать всю коллизию в одной плоскости и под одним углом, либо делать лоигку столкновений основываясь на SAT (Separated Axis Theorem aka Теорема разделённых осей кординат). В последнем – все прямоугольники будут заменены на вектора точек описывающих контур, но его беда в том что он не может просчитывать поднутрения у контура (Т.е. если одна из точек окажется внутри контура – коллизия будет просчитыватся через соседние в списке точки – ушедшая во внутрь просто выпадает.) Box2D использует именно этот способ просчёта столкновений и нахождения Minimal Translation Vector (Минимальный вектор смещения для вывода одного контура из другого по направлению вектора нормали (Перпендекуляр к отрезку))

    в ответ на: Анимация #4889

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

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

    Репутация:30

    Ну, могу только вытащить из недр системы реализацию анимации, хотя я её вроде выкладывал уже сюда кому-то. Сам уже перекочевал на C#, плюсы более менее понял – пусть дальше идут лесом, мозговыжигалку я уже прошёл :)

    Нашёл среди ответов


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

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

    Репутация:30

    Учти что для использования изомтерии тебе придётся делать имплементацию для этого. Столкновения не происходит ибо проверка вида сбоку и сверху НЕ подходит для изометрии: Картинка


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

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

    Репутация:30

    Некропстингом занимаешсья, Sanya_drug?


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

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

    Репутация:30

    Вобще для кода на сайте есть специальный модуль – пожалуйста, пользуйся им а не сливай свои файлы – хидеры.
    Вылетает ошибка – скриншот с содержимым приложить?
    В каком месте ты вызываешь этот метод? Точно ли ты передаёшь в качестве аргумента ссылку на игрока в момент вызова?


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

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

    Репутация:30

    Поправочка. в строке vec = vectorRotate(sf::Vector2f(1,0),360  angle) должно быть не 360 а 180. Ночью котелок порой варит вообще не в ту сторону


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

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

    Репутация:30

    Помоему в разы проще чем делать коллизию на SAT. Берёшь вектора цетров окружностей и проверяешь дистанцию между ними – если дистанция меньше чем сумма радиусов – выталкивай вектора центров в противоположных направлениях на велечину пересечения.
    Будет примерно так

     

    в ответ на: Пример реализации SFML Network #4850

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

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

    Репутация:30

    idris070, Некропостинг. А вобще эта проблема отпадает если правильно переписать весь код (Буржуй чёт нахимичил лишнего в коде на видео а остальные неглядя код скатали).


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

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

    Репутация:30

    Если делать привязку к globalRect тебе будет удобнее работать так как при рескайлинге/повороте изображения ты будешь получать прямоугольник описывающий всё изображение. И можно сразу работать с альфа каналом в редакторе изображений – не придётся мучатся с масками в коде (Я использую .Net Paint).


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

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

    Репутация:30

    Тогда я привёл метод поворота вектора. Учти что поворот производится вокруг вектора [0, 0] так что не забудь вычесть из вращаемого вектора точку вращения.
    Про блоки: я имел в виду что текстукри одинаковых размеров и имеют Origin Point по середине этого “кубика”.
    То что ты изменяешь текстурку для подгона – плохая затея. Делай подгон позиции башни под танк (Всё тот же приведённый мною метод в помощь – вращение даст тебе круг. Ну а где центр этого круга надеюсь рассказывать не нужно)
    И зачем ты делаешь лишний шаг с Image -> Texture? Ты собираешься прямо в игре как либо перерисовывать пиксели на текстурке? Если нет то используцй сразу Texture минуя Image (Учитывая что мы работаем с C++ память лишней не будет).
    Ну и в чём проблема с нужным направлением? На сайте был же уже тутор как заставить картинку поворачиваться в сторону курсора и перемещатся при зажатии кнопки. Метод который даст тебе возможность получить угол между двумя векторами. Если нужно получить угол относительно системы кординат то в качестве первого аргумента передай Vector2f(1, 0)

    Ну и можешь из этого получить угол поворота башни и снаряда передав в первом аргументе центр башни и второго – позицию мыши с применённым оффсетом View(Верхний левый угол поля зрения)


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

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

    Репутация:30

    Хм, хотя с краем ствола всё же тебе нужно смотреть как ты вращаешь спрайт, где у него Origin Point и как у тебя вобще выполнен спрайт(Я думал что у тебя и танк и пушка размером 1×1 блок. В твоём случае это может не сработать в том виде в котором я описал но думаю ты понял суть).
    Просто смотри расстояние от Origin Point до края ствола в исходном положении и когда повернёшь единичный вектор (длинна которого всегда == 1) просто умнож его на эту длинну. Как исходный единичный вектор принимай Vector2f(1, 0) (Поворот 0 deg == 0 rad)


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

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

    Репутация:30

    Массштаб: а вы смотрели в класс View? Там же есть такие нужные тебе методы setSize и zoom(Насчёт последнего: он просто делает рескайлнг относительно текущего Size и похоже не сохраняет своих результатов)

    С краем ствола всё легко: Для начала делаем вектор длинной половины спрайта пушки и поворрачиваем его на угол поворота ствола. Позже берём вектор находящийся по центру спрайта пушки и прибавляем к нему первый – задача выполнена

    Ну и полёт снаряда: просто сделай некую переменную в классе пули которая будет вычитатся каждый игровой тик и при достижении условия var <= 0 пуля будет удалена из массива.

    в ответ на: как заставить монетку крутиться #4756
    +1

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

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

    Репутация:30

    Дк Tiled предоставляет возможность выставялть дополнительныйе параметры к объектам. Через TinyXML как либо сделай считывание этих параметров либо найди в интернете TMX Parser для SFML

    в ответ на: как заставить монетку крутиться #4750

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

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

    Репутация:30

    Глянь в соседнюю тему с OriginPoint в реализацию AnimatedSprite::update(sf::Time frameTime) и Animation::update(sf::frameTime)

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