ООП и сфмл
| |
Raf_Tank | Дата: Пятница, 03 Февраля 2017, 14:22 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Всем здравия. Захотел я в качестве школьного проекта написать игру (кстати норм ли для 10 класса?) и такой прикол. Есть два класса (стула), один выше другой ниже (но в этом наверное нет разницы, но всё-же), во втором классе есть функция которая при выполнении определённого условия меняет переменную в первом, вышестоящем, классе. Но она почему-то не меняется... вот кусочек кода:
Код class Enemy{ private:.... //другие ненужные в этом вопросе переменные public: int dir; int hp; float x, y; Sprite sprite; Enemy(String F,float X, float Y, const int W, const int H, int dir){//кусочек конструктора} void move(float game_time){ if (dir == 1){ sprite.setTextureRect(IntRect(0, 0, w, h)); sprite.move(0, -0.1*game_time); } if (dir == 2){ sprite.setTextureRect(IntRect(58, 0, w, h)); sprite.move(0,0.1*game_time); } if (dir == 3){ sprite.setTextureRect(IntRect(58, 58, w, h)); sprite.move(0.1*game_time,0); } if (dir == 4){ sprite.setTextureRect(IntRect(0, 58, w, h)); sprite.move(-0.1*game_time, 0); } } /////////// class bot_shoot{ private:\\\\\\ public: bot_shoot(String F, String F2){опять конструктор} void shoot_bot(float game_time, Enemy espr){ //вот и сама функция reload_time = reload.getElapsedTime().asMilliseconds(); x = espr.sprite.getPosition().x;//с этими двумя строками проблем нет, т.к. на сколько я понял я лишь беру переменные из другого класса, а не меняю их. y = espr.sprite.getPosition().y;// if (ysl) { espr.dir = 1; reload.restart(); } // ysl- некоторое условие. if (ysl) { espr.dir = 2; reload.restart(); } if (ysl) { espr.dir = 3; reload.restart(); } if (ysl) { espr.dir = 4; reload.restart(); } } }; int main(){ Enemy e1(parametri_constructora); bot_shoot bot1(game_time, e1); bot1.shoot_bot(game_time, e1);
return 0; }
собственно ошибки никакой нет, компилятор это всё запускает, но! Переменная dir в классе enemy так и не меняется, и соответственно спрайт не двигается так, как мне надо, как мне изменить эту переменную? p.s. простите за возможно корявое сокращение и изуродование кода, но старался чтобы было без лишнего и максимум понятно.
|
|
| |
Gudleifr | Дата: Пятница, 03 Февраля 2017, 14:34 | Сообщение # 2 |
почти ветеран
Сейчас нет на сайте
| Цитата Raf_Tank ( ) кстати норм ли для 10 класса? Поздновато. Впрочем, по нынешним временам, когда на 10 строк игры приходятся мегабайты мусорного контента и гигабайты видеокурсов...
Цитата Raf_Tank ( ) собственно ошибки никакой нет Ошибка самая обычная. C (и его выродок - С++) передают параметры по значению. Значение Вы и правите, а сама переменная остается без изменений. Надо передавать по указателю (*) или ссылке (&).
Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
Сообщение отредактировал Gudleifr - Пятница, 03 Февраля 2017, 14:35 |
|
| |
Raf_Tank | Дата: Пятница, 03 Февраля 2017, 14:47 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Цитата Gudleifr ( ) Надо передавать по указателю (*) вот про указатель у меня была мысль, но я не особо понял как реализовать, можно поподробней, или желательно кусочек кода. p.s. почему ты так хейтишь С и плюсы?
|
|
| |
Gudleifr | Дата: Пятница, 03 Февраля 2017, 15:21 | Сообщение # 4 |
почти ветеран
Сейчас нет на сайте
| Цитата Raf_Tank ( ) но я не особо понял как реализовать, можно поподробней Лучше посмотрите в книжке, это очень важный вопрос. (Для C++ - Страуструп, ЯЗЫК ПРОГРАММИРОВАНИЯ С++, 2-е издание, не 1-е - слишком сырое - и не 3-е и последующие - там слишком много мусора).
Цитата Raf_Tank ( ) почему ты так хейтишь С и плюсы? В данном случае за то, что он мешает Вам изучать программирование. Возьмите любую программистскую фичу - файл, процесс, лямбды,.. даже ООП - каждая имеет свою историю и толкование в великих программистских талмудах. Однако, C++ пошел по пути своего толкования всех этих фиговин, совершенно не совпадающего с классическим. Для каждой - у него своя синтаксическая загогулина. Все бы ничего, но C++ сейчас используется не как самостоятельный язык, а как средство дополнительного программирования в суперпродвинутых системах (MS Studio, Unity...). И эти системы имеют свое толкование упомянутых фич. Три толкования на каждую фичу - Вы наверняка запутаетесь.
Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
Сообщение отредактировал Gudleifr - Пятница, 03 Февраля 2017, 15:22 |
|
| |
JackNazaryan | Дата: Пятница, 03 Февраля 2017, 19:28 | Сообщение # 5 |
старожил
Сейчас нет на сайте
| Цитата Gudleifr ( ) Поздновато. Впрочем, по нынешним временам, когда на 10 строк игры приходятся мегабайты мусорного контента и гигабайты видеокурсов...
У нас некоторые товарищи аж на 3-4 курсах начинают хоть чему-то учиться. Нет ничего такого. Мои бывшие одноклассники в 10 классе только начинали осознавать, что задротство - ещё не весь мир
Цитата Raf_Tank ( ) вот про указатель у меня была мысль, но я не особо понял как реализовать, можно поподробней, или желательно кусочек кода. p.s. почему ты так хейтишь С и плюсы?
Если поставить знак * или & перед названием переменной, будет передано не его значение, а ссылка на него. Т.е. при его изменении внутри функции изменится и значение вне её. Удобная штука А товарищ Gudleifr хейтит всё и вся, все нормально.
|
|
| |
|