SFML и C++ Уроки \ Разработка игр › Форумы › SFML System, Window и другие вопросы › Как организовать зависимость объектов
В этой теме 12 ответов, 2 участника, последнее обновление Darkos 7 года/лет, 7 мес. назад.
-
АвторСообщения
-
Здравствуйте. Есть объект кнопка и объект движущаяся платформа. Как сделать так, что бы при нажатии на кнопку платформа начинала движение(до этого она неподвижна). Если и кнопка и платформа будут в одном списке тогда возникает проблема, как определить именно нужную кнопку и платформу. Но с другой стороны если кнопка и объект с которым она связана будут отдельно, а таких кнопок еще и несколько – то будет неудобно их контролировать.
Добавить каждому обекту id или груповой id. Вот как то-так.
C++12345678910struct Object{ Enemy* entities; int id,groupid; };list<Object> entities;for(it = entities.begin(); it != entities.end(); it++){if((*it.ebtities)->name == "easyEnemy"){if(*it.id)=0)///////}}Получается нужно будет два раза список проходить что бы найти нужную пару, так?
C++12345678910for(it = entities.begin(); it != entities.end(); it++){if((*it)->name == "button")if(*it)->id==0)for(it2 = entities.begin(); it2!=entities.end(); it2++)if((*it2)->name == "platform")if(*it2)->id==0)if(Keyboard::isKeyPressed(Keyboard::F))(*it2)->dx = 0.8;}Задачу решил таким образом:
C++123456789101112131415161718std::map<std::string,Entity*> actions;for(it=entities.begin(); it!=entities.end(); it++){if((*it)->type.compare(""))actions[(*it)->type] = &(**it);}actions["bond1"]->dx = 0;//..............................if((*it)->name == "button" && p.getRect().intersects((*it)->getRect())){if(Keyboard::isKeyPressed(Keyboard::F)){(*it)->anim.set("green");actions["bond1"]->dx = -0.08;}}Не знаю на сколько это будет удобно в дальнейшем.
Так легче всёго. Но можно заморочиться с буферами.
А что за буфера?
C++12345678910111213Entity* buff1,*buff2;for (it = entities.begin(); it != entities.end(); it++){if ((*it)->name == "button")if (*it)->id == 0)*buff1=*it;if ((*it)->name == "platform")if (*it)->id == 0)*buff2=*it;}if (Keyboard::isKeyPressed(Keyboard::F)) (*buff2)->dx = 0.8;А можно ли как то получить доступ к полям класса наследника через класс родитель? В данном случае в классе Button есть переменная isActive которой нет в Entity. А список у меня std::list<Entity*> entities; не дает доступ к этой переменной.
Насколько я знаю нет.
Попробуйте создать глобальный указатель на переменную.
Не совсем понял что значит глобальный указатель?
Указатель с глобальной видимостью.
Ясно, спасибо за помощь.
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.