JonAdmin

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

Просмотр 11 сообщений - с 1 по 11 (из 11 всего)
  • Автор
    Сообщения
  • в ответ на: Моя первая SFML игра "SkoloShot" #980
    +2
    JonAdmin
    JonAdmin
    Участник
    Сообщений:11

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

    Репутация:9
    • Версия 2.1
    • Добавил полоску жизни мобам и игроку
    • Сделал нормальные лестницы
    • Мобов можно убить
    • Мобы сами спавнятся в увеличивающейся прогрессии
    • Рекорд убийств записывается в файлик и отбражается в меню
    • Добавил меню
    Вложения:
    You must be logged in to view attached files.
    в ответ на: Как сделать много крови #920
    JonAdmin
    JonAdmin
    Участник
    Сообщений:11

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

    Репутация:9

    Нет, я хочу сделать красиво, чтобы кровь именно “сыпалась”
    У меня появилась идейка: чтобы при попадании пули не пропадали, а в кровь превращались (ну текстура менялась) и скорость уменьшалась. Думаю это будет красиво и просто

    в ответ на: Как сделать много крови #917
    JonAdmin
    JonAdmin
    Участник
    Сообщений:11

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

    Репутация:9

    Никак. Ладно, спасибо

    в ответ на: Как сделать много крови #915
    JonAdmin
    JonAdmin
    Участник
    Сообщений:11

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

    Репутация:9

    Ну вопрос остался. Я хочу, чтобы много крови было. Это норма, что на 1 частицу крови выделяется 1 экземпляр листа?

    в ответ на: Предложения (открытый форум). #862
    JonAdmin
    JonAdmin
    Участник
    Сообщений:11

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

    Репутация:9

    Размер шрифта мелкий.
    Левый блок новостей его сильно сдавливает. Я думаю, что на форуме левая панель не нужна.

    в ответ на: Движение объектов #861
    JonAdmin
    JonAdmin
    Участник
    Сообщений:11

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

    Репутация:9

    А, у тебя даже проще. Если спрайт2 движется к спрайт1:

    Создаем 2 переменные векторов:
    float vecX, vecY;
    Школьная формула, находим координаты векторов:
    vecX = спрайт1.getPosition().x – спрайт2.getPosition().x;
    vecX = спрайт1.getPosition().y – спрайт2.getPosition().y;
    (если спрайт1, за которым движется спрайт2 тоже в движении, тогда эти две строки вставь в главный цикл на обновление, если нет – тогда вектора 1 раз только нужно найти)
    Движение:
    x += vecX*0.1*time;
    y += vecY*0.1*time;

    спрайт2.setPosition(x,y);
    0.1 – скорость движения
    time – привязка ко времени

    Это все было в уроках.

    в ответ на: Бильярд – удар по шару #856
    +2
    JonAdmin
    JonAdmin
    Участник
    Сообщений:11

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

    Репутация:9

    Окей, а как заставить шар двигаться?
    Движение шара будет прямолинейным равноускоренным. Есть его движение – это прямая.
    Вспомним школу, какая формула прямой? Y = k*X + b;
    Окей, будем двигать шар по этой формуле.
    Создадим процедуру, которая будет срабатывать в начале движения шара:
    Event event;
    while (window.pollEvent(event))
    {

    if (event.type == Event::MouseButtonPressed)
    if (event.key.code == Mouse::Left) //Если нажали ПКМ
    moveBall();//Та самя процедура
    }
    Окей, в этой процедуре будет следующее:
    Находим k,b которые нужны в формуле прямолинейного движения. В помощью школы вспомним как это делать:
    k = (спрайт_шара.getPosition().y- pos.y) / (спрайт_шара.getPosition().x – pos.x);
    b = pos.y – k *pos.x;
    Напоминаю, что pos.x, pos.y кoординаты курсора.
    В таком случае у нас шар сможет катиться только вверх и вправо, добавим выше переменную стороны, она будет либо -1, либо 1:
    int znak;
    Вот так вычисляем ее значение:
    if (спрайт_шара.getPosition().y- pos.x > pos.x) znak = -1;
    else znak = 1;
    Создадим копию переменной rotation из прошлого поста (моего), ибо мы ее будем немного менять:
    rotationCyl = rotation;
    Ее значение будет таким (Это чтобы шар катился на все стороны):
    if (rotation < 90) rotation = 90 + 90 – rotation;

    Все это было процерура moveBall();

    А теперь в главном цикле программы движем шар по формуле прямой:
    x += znak*(2 – rotationCyl / 90)*time;
    Скорость Х завист от угла поворота (2 – rotationCyl / 90), это для того чтобы скорость была равномерной, ибо чем больше Х, тем больше скачой по Y. Не забіваем скорость привязать ко времени *time.
    А Y находим по формуле (это идет после нахождения икса):
    y = (k*x + b);
    Осталось указать новые координаты шара:
    спрайт_шара.setPosition(x,y);

    Все, столкновения сам делай.
    И лайк гони

    в ответ на: Бильярд – удар по шару #854
    +2
    JonAdmin
    JonAdmin
    Участник
    Сообщений:11

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

    Репутация:9

    Я знаю как. Читай внимательно:

    У нас есть шар, который мы бьем (как правило, белый), бить мы будем мышкой.

    Начнем с кия. Создай спрайт кия, текстуру сам найди. Чтобы кий крутился правильно, нужно указать току вращения спрайта кия. Точкой вращения будет шар, по которому мы будем бить (красная точка на скриншоте). Тоесть точка вращения кия будет за пределами спрайта кия. Это сделать можно так:
    sprite.setOrigin(-10, sprite.getTextureRect().height / 2)
    Разберем: “-10″ – отступ от шара, “sprite.getTextureRect().height / 2″ – центр кия по высоте.

    Окей, а как же заставить его крутиться за мышкой?
    Создадим вначале программы 2 вектора:
    Vector2i pixelPos; 
    Vector2f pos;
    Еще создадим доп. переменные, которые будут хранить координаты векторов:
    float vecX;
    float vecY;
    Последняя переменная, которая хранит угол поворота:
    float rotation;
    В главном цикле программы (while (window.isOpen()) {…})  будем ловить координаты мыши:
    pixelPos = Mouse::getPosition(window); //забираем координаты курсора
    pos = window.mapPixelToCoords(pixelPos); //переводим их в игровые
    Потом считаем векторы (от кия до мыши) по школьной формуле (от начала вектора отнимаем конец):
    vecX= pos.x – спрайт_шара.getPosition().x;
    vecY= pos.y – спрайт_шара.getPosition().y;
    Находим угол поворота по школьной формуле и переводим его в градусы:
    rotation = (atan2(gunX, gunY)) * 180 / 3.14159265;
    Осталось только повернуть спрайт кия:
    sprite.setRotation(rotation);
    Там может быть нужно будет отобразить угол (не уверен):
    sprite.setRotation(90 – rotation);

    Ура теперь кий смотрит в сторону шарика. В след. посте напишу как бить шар (мне нужно отойти на час)

    Вложения:
    You must be logged in to view attached files.
    в ответ на: Failed to load image #849
    JonAdmin
    JonAdmin
    Участник
    Сообщений:11

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

    Репутация:9

    1. Путь не содержит часом русских символов?

    2. В файле карты MAP.tmx есть аргумент, который указывает на пусть с тайлами:
    source=”FilesMyGame/map_tiles.png”
    Этот путь должен быть не относительно MAP.tmx, а относительно расположения программы.

    в ответ на: Пример реализации SFML Network #845
    JonAdmin
    JonAdmin
    Участник
    Сообщений:11

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

    Репутация:9

    Ухты, круто! Но к этому я вернусь позже

    в ответ на: Взаимодействие объектов #840
    JonAdmin
    JonAdmin
    Участник
    Сообщений:11

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

    Репутация:9

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

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