Всем еще раз здрасте). Сейчас попробую более дитально описать проблему. Изучаю с++ порядка 4-5 месяцем. И в основном это как и у всех начинающих ввод вывод в консоле не сложных арефметический действий. Для того что бы хоть как-то увидеть то чему я научился решил попробывать реализовать свои знание с некой графикой. По гуглил "Графические библиотека с++", выбрав SFML и думаю что все могу начал писать типа игру. Она не будет никуда выыносится, так чисто для себя, что бы понять что я вообще могу.
Есть файл Map.h который считывает файл tmx (xml разметка). В нем есть група обьектов которые хранят значаения x, y, width, height.
<objectgroup id="10" name="Слой объектов 1">
<object id="1" x="14" y="7" width="110" height="148"/>
<object id="2" x="318" y="178" width="64" height="67" visible="0"/>
<object id="3" x="415" y="176" width="68" height="70" visible="0"/>
<object id="4" x="510" y="177" width="66" height="73" visible="0"/>
</objectgroup>
<objectgroup id="11" name="Слой объектов 2">
<object id="5" x="0" y="353" width="131" height="223"/>
<object id="6" x="2" y="311" width="156" height="37"/>
</objectgroup>
Я сделал структура в которой есть эти 4 параметра.
struct Object
{
vector <float> obj_x; //Начало обьекта по Х
vector <float> obj_y; //Начало обьекта по У
vector <float> obj_width; //Длина обьекта по Х
vector <float> obj_height; //Длина обьекта по У
};
Структуру засунул в вектор.
vector <Object> vector_object;
И получается у меня что каждый новый тег
<object id="6" x="2" y="311" width="156" height="37"/>
записывается в структуру, а структура записывается в вектор. В этом примере у меня получается 6 обьектов. При тесте что и как записалось все хорошо, тоесть:
for (int i = 0; i < vector_object.size(); i++)
{
for (int q = 0; q < vector_object[i].obj_x.size(); q++)
{
cout << "X = " << vector_object[i].obj_x[q] << endl;
cout << "Y = " << vector_object[i].obj_y[q] << endl;
cout << "Width = " << vector_object[i].obj_width[q] << endl;
cout << "Height = " << vector_object[i].obj_height[q] << endl;
}
cout << "\n______________\n";
}
Так же у меня есть герой, который хранит координаты х и у. Я хочу сделать проверку что бы игрок НЕ могу заходить на координаты обьекта, что-то типо этого:
for (int i = 0; i < vector_object.size(); i++)
{
for (int q = 0; q < vector_object[i].obj_x.size(); q++)
{
if (user_x > vector_object[i].obj_x[q] && user_x < vector_object[i].obj_width[q])
{
move = false;
}
}
}
Но тут проблемма что я не могу сравнить значение из вектора[i] обьекта [q] с координатой игрока. Якобы нет перегруженного оператора сравнения. Вот тут мне и нехватает знаний... Подскажите, куда копать, и что читать)
Так же как вариант можно сделать динамический масив, под групу координат отдельный масив, к примеру:
float *x = new float[size];
float *y = new float[size];
float *width = new float[size];
float *height = new float[size];
но помойму, вектором удобнее пользоватся
Зачем вам в структуре векторы? Из того, что вы написали, структура должна объявляться так
struct Object {
float obj_x; //Начало обьекта по Х
float obj_y; //Начало обьекта по У
float obj_width; //Длина обьекта по Х
float obj_height; //Длина обьекта по У
};
а еще лучше так
struct Object {
int obj_x; //Начало обьекта по Х
int obj_y; //Начало обьекта по У
int obj_width; //Длина обьекта по Х
int obj_height; //Длина обьекта по У
};
При сравнивании координат нужно проверять условие
obj_x < user_x < obj_x + obj_width
а не
obj_x < user_x < obj_width
for (int i = 0; i < vector_object.size(); i++) {
Object obj = vector_object[i];
if (
user_x > obj.obj_x && user_x < obj.obj_x + obj.obj_width &&
user_y > obj.obj_y && user_y < obj.obj_y + obj.obj_height
) {
move = false;
break; // дальше искать бессмысленно
}
}
Этой фразы
Но тут проблемма что я не могу сравнить значение из вектора[i] обьекта [q] с координатой игрока. Якобы нет перегруженного оператора сравнения
я не понял вообще. Будет лучше если вы приведете точный текст ошибки
Всем спасибо. Ошибкой была моя не внимательность. При попытке сравнивать было vector_object[i].x а надо vector_object[i].x[i]. В первом случаем он пытался сравнить координату персонажа типа float с ВЕКТОРОМ, а нужно было именно со значением из вектора.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
мне нужно сделать код так, чтобы получился пример под цифрой 2 но код я смог сделать только так, что у меня получается пример под цифрой 1 Как...
найти значения длины гипотенузы в прямоугольном треугольнике с целыми сторонами, если 1 из катетов (H) Н-простое числоH=(2<=H<=10^4)