tobidashi

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

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

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

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

    Репутация:7

    Карта – это массив строк, а в функцию MakeTileMapArr передаётся строка. Ошибка возникает при обращении MapArray[i][j]. Нужно передать в функцию массив строк, тогда всё заработает.

    в ответ на: Вывод кириллицы #4732
    +1

    tobidashi
    Участник
    Сообщений:16

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

    Репутация:7

    Проверил у себя – всё работает. Если что-то не работает, надо конкретно описать что именно происходит, желательно ещё прикрепить код.

    Можно попробовать такой вариант:

    Проверил его у себя, он тоже работает.

    в ответ на: Вывод кириллицы #4730
    +1

    tobidashi
    Участник
    Сообщений:16

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

    Репутация:7

    Можно так:

    в ответ на: Вывод кириллицы #4728
    +1

    tobidashi
    Участник
    Сообщений:16

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

    Репутация:7

    Попробуй следующее.
    Установить в редакторе кодировку UTF-8: Settings -> Editor -> General settings -> Encoding settings.
    Убедиться, что шрифт, который ты загружаешь в текст, поддерживает кириллицу.
    Передать в текст широкую строку:

    в ответ на: Цикл взаимодействия с картой. #4712

    tobidashi
    Участник
    Сообщений:16

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

    Репутация:7

    Если, например, x = 64 и w = 5, то цикл по j выполнится как минимум один раз. Вообще, чтобы не гадать, почему цикл выполняется, можно просто посмотреть, чему равны значения всех переменных до начала цикла и во время его исполнения.

    в ответ на: Цикл взаимодействия с картой. #4710

    tobidashi
    Участник
    Сообщений:16

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

    Репутация:7

    Как я понимаю, цикл будет выполняться, только если спрайт персонажа пересёк границу тайла карты. Если персонаж находится строго внутри тайла карты вдоль оси x (соответственно, y), то проверка коллизий по оси x (соответственно, y) не проводится, что , в принципе, логично.


    tobidashi
    Участник
    Сообщений:16

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

    Репутация:7

    vproject57, лучше привести конкретный пример того, что хотите реализовать. То есть пользователь запустил вашу игру, затем он ввёл такой-то текст (например, “QWe145bK8f”), программа в ответ на это должна сделать то-то и то-то (например, нарисовать зелёный треугольник внутри синего круга и вывести в консоль “Hello, World”).  Я пока не очень понимаю, что конкретно вводит пользователь и как должна на это отреагировать программа.


    tobidashi
    Участник
    Сообщений:16

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

    Репутация:7

    Ок, с нумерацией вроде ясно. Пусть A – это двумерный массив всех вершин. Тогда каждая вершина задаётся двумя числами – номером строки i и столбца j (например, вершина A[4][2] расположена на пересечении четвёртой строки и второго столбца). Я так понимаю, нужно по индексам вершины A[i][j] узнать её координаты в массиве строк String TileMap[HEIGHT_MAP]? Тогда надо сначала узнать координаты верхнего левого угла массива вершин (то есть вершины A[1][1]) в массиве строк TileMap. Координаты верхнего левого угла определяются, когда ты рисуешь карту, то есть их можно найти вручную и потом в программе создать для них специальные переменные. Пусть эти координаты равны x и y. Другими словами, вершине A[1][1] соответствует элемент карты TileMap[x][y]. Пусть на карте TileMap соседние вершины разделены t рёбрами по горизонтали и s рёбрами по вертикали. Тогда координаты вершины A[i][j] на карте TileMap можно вычислить как

    Должно быть так, если ничего не напутал.


    tobidashi
    Участник
    Сообщений:16

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

    Репутация:7

    Как я понял, движение должно происходить так: сначала нужно кликнуть ЛКМ на персонажа, он должен выделиться зелёным. После этого нужно кликнуть ПКМ на точку карты, куда мы хотим пойти. Персонаж должен пойти в эту точку. То есть для движения достаточно двух нажатий кнопок мышки. Если после этих двух нажатий персонаж не двигается или двигается не так/не туда, надо подробно описать, что именно и при нажатии чего происходит.

    Также можно попробовать закомментировать строчку 300, где написано

    и заменить её на

    Так можно проверить, не прерывается ли движение в функции update().


    tobidashi
    Участник
    Сообщений:16

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

    Репутация:7

    Не очень понял вопрос. Пользователь пишет номер вершины. Какой номер и откуда он его берёт? На картинке никаких номеров нет. Могу предположить, что нумерация вершин идёт слева направо и сверху вниз (что-то вроде 0 1 2 – это первй ряд, 3 4 5 – второй ряд и т. д.). Дальше, как получить координаты этих вершин и рёбер. Каких вершин и каких рёбер? Надо уточнить детали.

    в ответ на: Взаимодействие с картой #4676

    tobidashi
    Участник
    Сообщений:16

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

    Репутация:7

    Всё зависит от размеров прямоугольника персонажа, размеров тайла карты и направления столкновения. Допустим, персонаж столкнулся с тайлом карты при движении слева направо. Тогда он немного “продавит” этот тайл и должен будет оттолкнуться от него влево. Мы в коде должны сами прописать координату, в которой он окажется после столкновения, а эта координата как раз определяется размерами прямоугольника персонажа и тайлов карты. А именно, персонаж после столкновения должен вплотную прилегать к тайлу карты, с которым он столкнулся, отсюда можно найти координаты персонажа после коллизии. Если персонаж двигался слева направо, то после столкновения нужно от левого края прямоугольника карты  отступить влево ширину персонажа, тогда персонаж будет стоять как раз вплотную слева от прямоугольника. А если персонаж двигался справа налево, то к левому краю прямоугольника карты нужно прибавить ширину тайла карты, тогда персонаж окажется как раз вплотную справа от него. Проще всего это понять, если на бумаге схематично нарисовать кусочек карты и вручную промоделировать коллизии персонажа с тайлами карты по всем направлениям (т.е., просто по шагам проследить, как выполнятеся функция interactionWithMap(), чему равны в момент столкновения переменные i и j и т. д.), тогда станет ясно, на какое расстояние нужно его сдвигать.

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

    tobidashi
    Участник
    Сообщений:16

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

    Репутация:7

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

    Теперь любой текст можно создать с помощью одной команды.

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

    tobidashi
    Участник
    Сообщений:16

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

    Репутация:7

    Игрок взаимодействует с монстрами благодаря условию

    в котором проверяется пересечение его прямоугольника с объектами списка entlist, то есть монстрами.

    Если в классах так задавать здоровье, думаю всё должно быть нормально. Надо вывести в консоль здоровье сразу после создания игрока и потом смотреть, где оно может измениться (я так понял, оно меняется только при боковом столкновении с монстром).

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

    tobidashi
    Участник
    Сообщений:16

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

    Репутация:7

    Serob, теперь видно, что игрок получает урон от монстров. Если хотите, чтобы он исчезал с экрана, то нужно его добавить в список entities. Только сперва нужно подкорректировать переменную p.health. Вы говорите, что она может принимать значения от -3000 до -9000. В конструкторе класса entity есть строка if (health <= 0) { life = false; }. В функции update из класса Player у вас есть условие if (health <= 0) { life = false; }. Получается, что у игрока life всегда равна false. Лучше p.health задать равной положительному значению (например, 100), тогда после нескольких столкновений с монстром p.health станет отрицательной и p.life станет равна false. Когда вы пройдёте по списку entities, все у кого life == false, будут из него удалены и перестанут отображаться на экране.

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

    tobidashi
    Участник
    Сообщений:16

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

    Репутация:7

    Моожно посмотреть на значения переменных в момент пересечения. Должно стать ясно, почему код не заходит в ветку бокового столкновения с монстром. Например, так:

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