allods, wheel collider плоский а катки могут быть широкими, да и он какой то громоздкий честно говоря и порой тоже не адекватно работает. может конечно я чего не знаю или примеры тугие попадались...
Добавлено (01.10.2014, 16:53) --------------------------------------------- Кстати еще, заметил такую особенность, что качество сцепки объектов(подверженность соединения деформации) зависит от массы присоединяемых обьектов Поясню, есть телега массой 1300 к ней я присоединяю четыре колеса по 25, при падении с высоты колеса немного прижимает вверх, через секунду конструкция восстанавливается, но если я уменьшаю вес колес до 5, то при падении их вжимает гораздо дальше и при движении вся конструкция трясется... Как может влиять вес колес(присоединенных Hinge Joint) на силу сцепки их с телегой?!!!!
Подскажите как реализовать осевое соединение с помощью физики, нужно сделать катки или колеса у механизма. Пробовал Hinge Joint, но не смотря на то что указываю только одну ось при взаимодействии с другими объектами колесо все равно выгибает на угол ((( а нужно его закрепить жёстко на одной оси! Помогите пожалуйста...
Сообщение отредактировал Renus - Воскресенье, 05 Октября 2014, 20:47
Cre-game, согласен, думаю использовать 2 цвета ручки и карандаш)) Но на данный момент задача графики не стоит, щас пилится чисто механика. Кстати, залил новую демку...
Добавлено (25.08.2014, 17:08) --------------------------------------------- Новая версия 0.05, смотрим))
Да, встал сегодня со свежей головой и проблема решилась за пару часов)) XDominator, на сколько я знаю глобальные клики обрабатываются после кликов по объекту, поэтому так проверять не получиться...
Решил не делать глобальный маус контроллер, а просто повставлять код в нужные объекты, используя родительские пустышки, вообще довольно удобно что есть хоть какое то подобие ООП, хотя отсутствие возможности создавать методы обьектам, очень сильно напрягает. Вот код на клик в родительском обьекте для которого вылазит меню:
Код
//Если меню нет if(!o_controller.tower_menu_show) { o_controller.tower_menu_show = true; //включаем меню o_controller.tower_menu_target = id; //передаем id башни instance_create(x+20, y-50, o_button_sell); //создаем меню(кнопки) instance_create(x-20, y-50, o_button_up); } //Если есть другое меню else { //Если обьект не под меню if(point_distance(o_controller.tower_menu_target.x, o_controller.tower_menu_target.y, x, y) > o_controller.tower_menu_target.radius) { with(par_tower_menu) instance_destroy(); //удаляем старое меню o_controller.tower_menu_target = id; //передаем id новой башни instance_create(x+20, y-50, o_button_sell); //создаем новое меню(кнопки) instance_create(x-20, y-50, o_button_up); } }
Добрый вечер комрады. Столкнулся с такой сложностью, есть игровые объекты строения, юниты там разные, не важно, при нажатии на них выскакивает их меню с кнопками улучшения, продажи и т.д. Менюшка и кнопки рисуются чуть выше объекта, но если под кнопкой оказался другой объект, другой юнит к примеру, то при нажатии начинаются вакханалии, срабатывает и кнопка и переключение на другой обьект и запуск его меню и т.д... Как сделать что бы нажимались только кнопки? Верхний слой так сказать, что бы в пределах меню не срабатывали нажатия на другие объекты?
Можно писать код для каждого объекта что бы если какое то меню есть то нажатия на него не работали или сделать маус контроллер, который сам определять на что было нажато в какой зоне и т.д. Мне кажется такая проблема выскакивает при написании любых стратегий, рпг и т.п. Подскажите как решить... спс.
Название игры: Paper Tower Defence Жанр игры: tower defence Инструменты: GameMaker: Studio, Flash CS6 Пространство: 2D Вид: сверху Платформа: пока что только Windows Тип лицензии: смотря что получиться... Состав команды: только я
Описание: Классический TD, с той лишь особенность что все происходит на тетрадном листике, хотелось бы реализовать именно рисованную графику времен школьных учебников Естественно будет достаточный набор башен со своими особенностями и апгрейдами, большая вариация врагов, волн и карт. На данный момент прописывается базовая механика игры, потом будет расширяться остальной функционал. Хотелось пораньше сюда выложить что бы сразу получать советы и выявлять ошибки В идеале, по мере развития понадобиться дизайнер/художник.
Скриншоты:
Лог разрботки:
v 0.03 (17.08.14) - Первая полурабочая набросочная демка. v 0.04 (23.08.14) - Добавлена возможность прокачки и продажи башен(пока что без использования денег). v 0.05 (25.08.14) - В прокачку и продажу включены деньги, нарисован приблизительный интерфейс, синхронизирован режим строительства и меню башен.
Ближайшее: новые башни, новые враги и тестовые волны.
Raven84, да я думал о таком варианте, но мне он показался не реалистичным, ваши видео я посмотрел, у вас все симпатично получилось, мне понравилось))) Тем более как я понял это игра на мобильное устройство, там производительность превыше всего...
Я думал-думал, перебирал варианты и таки написал что то годное и более менее оптимизированное(хотя я знаю как еще, но пока лень), как по мне все весьма реалистично(единственное в реале ударная волна угасает кубически от расстояния, а у меня квадратически, так как то симпатичнее). На моем ноуте подтармаживает когда начинаешь все взрывать, падает на 5 фпс, на стационарном думаю все норм будет.
distmax = P / Imin; //Максимальный радиус расчета взрыва
//Перебираем объекты with (dynamic_obj) { //Проверяем на попадние в зону взрыва if rectangle_in_circle(bbox_left, bbox_top, bbox_right, bbox_bottom, other.x, other.y, other.distmax) > 0 { //Перебираем линии ang0 = point_direction(other.x, other.y, x, y); //устанавливаем угол на объект ang = ang0; cw_flag = false; acw_flag = false;
while (!cw_flag || !acw_flag) { collision = false;
OpenGOO, Вы не правы))) Трение есть, я его сам написал, потому как Box2D не порадовал меня такой функций, он может только ящики об ящики "тереть" ))) А дампинги этот совсем другое, это как написано в мануале - сопротивление среды, а сила сопротивления среды зависит от скорости движения объекта(как в аэродинамике). Сила трения скольжения же не зависит скорости, она постоянна, как и ее момент при вращении...
Пришлось взяться за этот вопрос самому, физика, двойные интегралы и форумы для ботанов мне помогли Вот как я моделирую трение объектов об плоскость(при учете что правильно соблюден масштаб пикселей к метрам, для реальных сил). В Create:
Код
//Константы fric = 0.4; //коэффициент трения скольжения g = 9.8 //ускорение свободного падения
d = 0.8; //диаметр эквивалентного круга
В step:
Код
if(!phy_sleeping) //Только если не спит! { //Сила трения скольжения Ff = fric * phy_mass * g; direction = point_direction(phy_position_x, phy_position_y, phy_position_xprevious, phy_position_yprevious); xFf = lengthdir_x(Ff, direction); yFf = lengthdir_y(Ff, direction);
Как по мне гораздо реалистичней чем с родными дампингами...
А про коэффициент трения вы правильно заметили, у меня стоит 0.4 а для дерева по бетону обычно берут 0.6, поэтому они так и катаются легко. И кстати я почти сделал предварительный вариант правильного физического взрыва, но пока что он сильно грузит пой проц на ноуте, буду оптимизировать, потом выложу)))
OpenGOO, скачайте демку постреляйте, посмотрите, там есть визуальный эффект, мне не нравиться как разлетаются ящики...( От этого же зависит динамика игры как никак.
Постепенно прорабатывая макет TDS пришел к вопросу как физически правильно и красиво реализовать взрывы(эффект ударной волны), на данный момент работает упрощенная модель она толкает объекты от точки взрыва, но сила прикладывается к центру масс, следовательно вращения не происходит, ящики летят как то статично и уныло((( Вот екзешник, погоняйте, посмотрите: http://rghost.ru/57250224 ракета правой кнопкой, добавить ящики - пробел.
Вернемся к нашим баранам)) Вот наглядная ситуация:
Сила ударной волны угасает с расстоянием, следовательно давление на объект в точке А будет больше чем в точке Б, а значит объект приобретет вращение по часовой стрелке. Ну и если совсем уже придираться то ударная волна имеет скорость распространения, а значит и к точке А она придет быстрее, из чего опять следует что объект будет вращаться... Вот как то это все и надо грамотно организовать, иначе зачем игре физика если нет взрывов?
У меня есть один вариант решения, его я выложу позже, боюсь что он будет хорошо грузить ЦП... Ваши мнения господа, кто уже с таим сталкивался и как решил, прошу помощи... С уважением.
rid32, я щас активно копаю физику, и на сколько я знаю Raven84, абсолютно прав, вогнутые формы box2d не поддерживает... А значит единственный способ засунуть один объект в другой, это сделать внешний объект составным из нескольких простых.
Anthem, как его использовать? менять силу в зависимости от поверхности? Упрощенно можно использовать Linear Damping, менять его значения на разной поверхности. Но Linear Damping это сопротивление среды движению, то есть оно зависит от скорости объекта(чем быстрее движение, тем больше сопротивление, как аэродинамическое сопротивление). А реальное трение скольжения не зависит от скорости Fтр=kN=kmg, я его прооделировал так, в step:
Код
N = phy_mass * 9.8; F = 0.5 * N; direction = point_direction(phy_position_x, phy_position_y, phy_position_xprevious, phy_position_yprevious); xF = lengthdir_x(F, direction); yF = lengthdir_y(F, direction);
if (phy_speed_ms(phy_speed)>0) { physics_apply_force(x, y, xF, yF); }
Но я все равно не могу промоделировать трение на вращение объекта Да, и скажите в чем разница между переменными x, xprevious и phy_position_x, phy_position_xprevious ???
Доброго времени суток товарищи! Решил сделать TDS и возник не тривиальный вопрос: как реализовать реалистичное трение об пол(скорее всего тайловый, неважно) всевозможных объектов. Взаимодействие объектов между собой реализуется родной физикой Box2D, а она работает в одном измерении и наложить один объект на другой нельзя(( Нормально использовать Linear Damping не получается, если ставить его больше определенного значения(около 56-58), то объект резко перестает реагировать на приложенные к не нему силы и импульсы(physics_apply_impulse...), однако игроком я его потолкать могу, но объект недостаточно тормозиться и дальнейшее увеличение Linear Damping ничего не меняет(видимо этот параметр не эквивалент трения, а какой то ограничитель скорости, как то так...). Вообщем задача не простая и может показаться не понятной на первый взгляд. Хочется моделировать поверхности: земля, лед, песок и т.д. Если кто подскажет как буду очень благодарен!))) Вот екзеник и проект для просмотра: exe - http://rghost.ru/56830231 gmx.zip - http://rghost.ru/56830296
Сообщение отредактировал Renus - Пятница, 11 Июля 2014, 00:03
Доброй пятницы друзья) Решил осваивать OpenGL понемножку, и GLUT соответственно, и вот наткнулся на проблему. GLUT использует функции обратного вызова(так называемые CALLBACK-и), для обработки различных событий в основном для средств ввода информации(клавиатура, мышка и т.д.)
Так вот когда я вставляю в них обычные глобальные функции, все работает отлично: glutMotionFunc(MouseMove);
А когда хочу передать управление методу класса, который по моей задумке должен обрабатывать средства ввода, то выдает ошибку при компиляции: glutMotionFunc(IOS.MouseMove);
Ошибка: [Error] cannot convert 'IOS::MouseMove' from type 'void (IOS::)(int, int)' to type 'void (__attribute__((__cdecl__)) *)(int, int)'
Подскажите в чем проблема и как исправить, спасибо.
Добавлено (06.05.2014, 09:04) --------------------------------------------- В общем проблему решил, кому интересно, может поможет.
Метод класса объявил как статичный: static void MouseMove(int, int);
Но, поскольку статичные методы не работают с не статичными переменными-членами, то доступ к ним осуществляю через глобальный указатель на объект. void IOS::MouseMove(int x, int y) { pIOS->MOUSE_X = x; pIOS->MOUSE_Y = y; }
Ну для этого проекта оставим так, он все таки первый... А вообще virtual у меня используется очень даже сильно, собсно у каждого объекта есть функции Process и Render которые виртуальные и у имеют свою реализацию для каждого класса...
О! Заработало!!!! Спасибо ребят, даю плюс в репы))) НА выходных постараюсь выложить новую версию своей игрушки, а через недельку возможно версию для тестов, так заходите и смотрите)
Да не хочет, выдает ошибку, пишет что damage не является членом "CObject" По моему с указателями так нельзя...
Добавлено (05.11.2010, 01:27) --------------------------------------------- Если решать вопрос таким способом, то нужно каким либо способом привести указатель к типу CBullet*, или получить его где нибудь... Ну, что то моих познаний тут не хватает(((
Ну а как нормально получить указатель на объект производного класса, имея указатель только на его базовую часть...? Возможно у меня не правильна сама архитектура игрового цикла, если возникаю такие проблемы?))) И самое интересное что нигде подобной информации не найдешь, а все молчат, как будто это вселенская тайна Нет что бы какой то хороший человек сказал: "Я делаю так и так..."
P. S. Пожалуйста, прошу всех игроделов-программистов, расскажите как вы храните игровые объекты и осуществляете взаимодействия между ними!!!
Добавлено (04.11.2010, 19:24) --------------------------------------------- Ну вот, и все молчат...
В таком случае будет легче вынести все параметры объектов куда нибудь, и получать их через параметр базового класса. К примеру дать базовому классу переменную type, и определять ее в конструкторе при создании объектов, а через функции получать доступ к всяким параметрам... Опять навалил непонятно чего))) Интересно просто как люди делают, неужели нет более изящного подхода...?
Добавлено (03.11.2010, 16:41) --------------------------------------------- Можно еще правда разделить списки, сделать отдельно для всех типов объектов и обрабатывать их по очереди, тогда будет не посредственный доступ ко всем параметрам производных классов...