Среда, 18 Декабря 2024, 13:27

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
HGE + Box2D
RomanNVKZДата: Пятница, 09 Декабря 2011, 04:24 | Сообщение # 1
участник
Сейчас нет на сайте
Появилась нужда в создании игры основанной на физике, но как наиболее просто скрестить HGE и Box2D я без понятия. Думаю надо просто создать физ. прямоугольник для персонажа и на него налепить спрайт с его картинкой. Подскажите, как это можно осуществить? wacko
MatouДата: Пятница, 09 Декабря 2011, 15:15 | Сообщение # 2
Исходный коТ
Сейчас нет на сайте
Все очень просто, создаешь игровой обьект и помещаешь внитри него ссылку на обьект типа b2Body, а внутри обьекта типа b2Body ссылку на пользовательские денные делаешь ссылкой на игровой обьект. Далее внутри игрового обьекта определяешь все что связано с ХГЕ, какие нужны текстуры спрайты, какие бывают параметны, ну в общем всякие свойства присущие данному актору. А потом когда все это сделал и настроил делаешь рендер игрового обьекта с помощью ХГЕ используя координаты получаемые из Box2d через ссылку на игровй обьект. Элементарно же.


RomanNVKZДата: Пятница, 09 Декабря 2011, 18:55 | Сообщение # 3
участник
Сейчас нет на сайте
Прости, просто я самоучка, пока знаю программирование на уровне классов, а ссылках я понятия пока не имею =). А так-как по этим движкам и так мало уроков, приходится делать наугад sad Объясните про ссылки, я, как вы поняли, в этих 2 движках нубастер cry



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 раз запущенная сценка с рассыпанием кучи объетов, всегда в финале была идеально одинаковой).
(В той ж е сцирре как-то можно было регулировать элемент случайности, но насколько это работало сказать сложно).
Сам по себе движок способен на такое?
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг