| HGE + Box2D | 
|  | 
| 
| RomanNVKZ | Дата: Пятница, 09 Декабря 2011, 04:24 | Сообщение # 1 |  |   участник Сейчас нет на сайте | Появилась нужда в создании игры основанной на физике, но как наиболее просто скрестить HGE и Box2D я без понятия. Думаю надо просто создать физ. прямоугольник для персонажа и на него налепить спрайт с его картинкой. Подскажите, как это можно осуществить?   |  |  |  |  | 
| 
| Matou | Дата: Пятница, 09 Декабря 2011, 15:15 | Сообщение # 2 |  |   Исходный коТ Сейчас нет на сайте | Все очень просто, создаешь игровой обьект и помещаешь внитри него ссылку на обьект типа b2Body, а внутри обьекта типа b2Body ссылку на пользовательские денные делаешь ссылкой на игровой обьект. Далее внутри игрового обьекта определяешь все что связано с ХГЕ, какие нужны текстуры спрайты, какие бывают параметны, ну в общем всякие свойства присущие данному актору. А потом когда все это сделал и настроил делаешь рендер игрового обьекта с помощью ХГЕ используя координаты получаемые из Box2d через ссылку на игровй обьект. Элементарно же. 
 
   
   |  |  |  |  | 
|  | 
| 
| Matou | Дата: Пятница, 09 Декабря 2011, 21:50 | Сообщение # 4 |  |   Исходный коТ Сейчас нет на сайте | Если не понимаешь про ссылки то учи С++, это самые основы этого языка. Такие вещи как 
 b2Body body = world->CreateBody(&bodyDef);
 Actor actor = new actor();
 actor->body = body;
 body->m_UserData = actor;
 
 не должны вызывать вопросов. Так что лучше подучи С++, а потом уже берись за эти движки.
 
 Вообще задача которую ты поставил довольно обьемная, тут много чего можно сделать, сами движки очень простые и особого изучения не требуют, а вот С++ чтобы с ними умело обращаться, да еще и в тандеме, нужно знать хорошо.
 
 
   
   |  |  |  |  | 
| 
| RomanNVKZ | Дата: Пятница, 16 Декабря 2011, 04:13 | Сообщение # 5 |  |   участник Сейчас нет на сайте | Ребят, подскажите в чём проблема, мне надо чтобы при изменении элемента класса в функции она записывалась в этот элемент класса. Пробовал использовать & и *, но не получается =( 
 Code  #include <iostream>
 #include <conio.h>
 #include <clocale>
 
 using namespace std;
 
 class strana
 {
 public:
 int peh;
 int tanks;
 int boi_in;
 int boi_out;
 /*int units[2];*/
 };
 
 void data_init(strana *rus)
 {
 rus.peh = 5000;
 /*rus.tanks = 2500;
 usa.peh = 3000;
 usa.tanks = 1000;*/
 }
 
 *ЗАКОММЕНТИРОВАНО*
 //void boi(strana rus,
 //     strana usa)
 //{
 //    cout << "Отправить в бой ";
 //    cin >> rus.boi_in;
 //    cout << " пехоты." << endl;
 //    usa.boi_in = 1500;
 //    if (usa.boi_in > rus.boi_in)
 //    {
 //  usa.boi_out = usa.boi_in - rus.boi_in;
 //  usa.peh -= usa.boi_in - usa.boi_out;
 //  rus.peh -= rus.boi_in;
 //  cout << "Поражение!!!";
 //    }
 //    else
 //    {
 //  rus.boi_out = rus.boi_in - usa.boi_in;
 //  rus.peh -= rus.boi_in - rus.boi_out;
 //  usa.peh -= usa.boi_in;
 //  cout << "Победа!!!";
 //    }
 //}
 
 int main()
 {
 strana rus, usa;
 setlocale(LC_CTYPE, "Russian");
 data_init(&rus);
 cout << rus.peh;
 _getch();
 
 }
 
 
   
   
   |  |  |  |  | 
| 
| Matou | Дата: Пятница, 16 Декабря 2011, 04:33 | Сообщение # 6 |  |   Исходный коТ Сейчас нет на сайте | RomanNVKZ, Ну ты риальнэ отжигаешь) Во первых это уже никакого отношения к поднятой теме не имеет, следовало другую тему создать в соответствующем разделе.
 
 Quote (RomanNVKZ) мне надо чтобы при изменении элемента класса в функции она записывалась в этот элемент класса.Гугл транслейт, не?) Я так понимаю ты хочешь изменять член класса по средством функции в которую он передается.
 
 Code  void data_init(strana *rus)   {
 rus.peh = 5000;
 /*rus.tanks = 2500;
 usa.peh = 3000;
 usa.tanks = 1000;*/
 }
У тебя это еще и компилируется? Доступ к элементу структуры через указатель нужно получать либо через
 (*rus).peh = 5000;
 либо через более короткую запись той же операции
 rus->peh = 5000;
 
 Хотя в твоем варианте лучше использовать не указатели, а ссылки, тогда достаточно будет сделать лишь изменение в сигнатуре функции, плюс сделать передачу самой структуры, а не ссылки на нее. Как-то так:
 
 void data_init(strana& rus)
 {
 rus.peh = 5000;
 /*rus.tanks = 2500;
 usa.peh = 3000;
 usa.tanks = 1000;*/
 }
 
 data_init(rus);
 
 Обязательно разберись с такими понятиями как указатель, ссылка, структура, способы передачи параметров функции и доступ к элементам структуры через указатель на нее. Это самые основы программирования, если ты не будешь четко этого понимать, то и написать нечего не сможешь.
 
 
   
   
 
 Сообщение отредактировал Matou - Пятница, 16 Декабря 2011, 04:35 |  |  |  |  | 
| 
| Самоделкин | Дата: Вторник, 24 Января 2012, 19:21 | Сообщение # 7 |  | участник Сейчас нет на сайте | Очень интересуют возможности Box2D. Знакомство с этим движком я имел только в компании Scirra, но и то, что я вижел в других разработках не особо отличается. Движ умеет делать физику только а-ля AngryBirds? (то есть когда, одно и то же лействие (навправление, сила) вызывает разные последствия). Ну рандома тупо. Кто более-менее знаком с движком. Может он быть настроен так, чтобы исключить всякий элемент случайности? (То есть чтобы 99999 раз запущенная сценка с рассыпанием кучи объетов, всегда в финале была идеально одинаковой).
 (В той ж е сцирре как-то можно было регулировать элемент случайности, но насколько это работало сказать сложно).
 Сам по себе движок способен на такое?
 |  |  |  |  |