Что случилось со сравнениями в ГМС?
|
|
Глюк | Дата: Воскресенье, 24 Мая 2015, 09:55 | Сообщение # 1 |
Lampa Studio
Сейчас нет на сайте
| В общем - проблема. Раньше в гамаке 8.x можно было сравнивать вот так:
if distance_to_object(o_obj)<100 and distance_to_object(o_obj)>20 { ////Дейтсвие//// };
Теперь почему то второе сравнение ГМС просто не берет в расчет и сравнивает только <100. Может, как то по другому можно сравнить?
Мой проект Drunk West! (заморожен) https://gcup.ru/forum/9-99264-1
Мой проект Block Destroyer ( В разработке ) https://gcup.ru/forum/9-102818-1#764778
|
|
| |
LunarPixel | Дата: Воскресенье, 24 Мая 2015, 10:26 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| Код if distance_to_object(o_obj)<100 if distance_to_object(o_obj)>20 { ////Дейтсвие//// };
А вообще, все должно работать и в твоем случае.
|
|
| |
OpenGOO | Дата: Воскресенье, 24 Мая 2015, 10:30 | Сообщение # 3 |
почти ветеран
Сейчас нет на сайте
| Тебе в настройках надо снять галочку с Short Circuit evaluations Short Circuit Evaluation
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
Сообщение отредактировал OpenGOO - Воскресенье, 24 Мая 2015, 10:32 |
|
| |
Глюк | Дата: Воскресенье, 24 Мая 2015, 10:36 | Сообщение # 4 |
Lampa Studio
Сейчас нет на сайте
| LunarPixel,
Все равно...
Код distance=point_distance(x,y,o_hero.x,o_hero.y);
if distance<32 and dir=1 { ata=1 sprite_index=s_enemy1_fl image_speed=0.2}; if distance<32 and dir=0 { ata=1 sprite_index=s_enemy1_fr image_speed=0.2 };
if distance<100 if distance>32 and dir=1 and col<=0{ x+=2 hunt=1 sprite_index=s_enemy1_gor image_speed=0.2 };
if distance<100 if distance>32 and dir=0 and col<=0{ x-=2 hunt=2 sprite_index=s_enemy1_gol image_speed=0.2 };
Спрайт не меняется, хоть убей. ( s_enemy1_fl и s_enemy1_fr ). как только уже не извращался с кодом...Добавлено (24 мая 2015, 10:36) --------------------------------------------- OpenGOO, У меня нету этой "настройки"
Мой проект Drunk West! (заморожен) https://gcup.ru/forum/9-99264-1
Мой проект Block Destroyer ( В разработке ) https://gcup.ru/forum/9-102818-1#764778
|
|
| |
OpenGOO | Дата: Воскресенье, 24 Мая 2015, 10:42 | Сообщение # 5 |
почти ветеран
Сейчас нет на сайте
| Цитата Глюк ( ) OpenGOO, У меня нету этой "настройки" Ну тогда у тебя просто условие не выполняется и ошибка где то выше.
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
LunarPixel | Дата: Воскресенье, 24 Мая 2015, 10:49 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| Short Circuit evaluations тут уж точно не причем. Цитата Глюк ( ) Спрайт не меняется Только спрайт не меняется? Или все таки ничего не срабатывает? Если просто show_message('TEXT') написать, скажем, то он сообщение не выдаст?
Попробуй протестировать на отдельных, "чистых" объектах.
|
|
| |
Глюк | Дата: Воскресенье, 24 Мая 2015, 11:01 | Сообщение # 7 |
Lampa Studio
Сейчас нет на сайте
| LunarPixel, странно. Вообще не выполняется. Хотя условие по идеи выполнено. Я героем и вплотную подходил и отходил. Либо идет, либо стоит враг, но не атакует.
Мой проект Drunk West! (заморожен) https://gcup.ru/forum/9-99264-1
Мой проект Block Destroyer ( В разработке ) https://gcup.ru/forum/9-102818-1#764778
Сообщение отредактировал Глюк - Воскресенье, 24 Мая 2015, 11:02 |
|
| |
OpenGOO | Дата: Воскресенье, 24 Мая 2015, 11:14 | Сообщение # 8 |
почти ветеран
Сейчас нет на сайте
| Цитата LunarPixel ( ) Short Circuit evaluations тут уж точно не причем. Как он вопрос задал Цитата Глюк ( ) if distance_to_object(o_obj)<100 and distance_to_object(o_obj)>20 { ////Дейтсвие//// };
Теперь почему то второе сравнение ГМС просто не берет в расчет и сравнивает только <100. так и ответил. В гмс 1.3 и выше по умолчанию, если первое уловие ложно, то второе условие не проверяется (потому в нашем случае логическое умножение) .
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
Сообщение отредактировал OpenGOO - Воскресенье, 24 Мая 2015, 11:19 |
|
| |
Глюк | Дата: Воскресенье, 24 Мая 2015, 11:29 | Сообщение # 9 |
Lampa Studio
Сейчас нет на сайте
| Запустил в дебаге и увидел странные вещи. distance - колеблется постоянно от 866 до 45/40. Бред, какой то...Добавлено (24 мая 2015, 11:29) --------------------------------------------- Но в тоже время условие подхода к ГГ срабатывает же...
Мой проект Drunk West! (заморожен) https://gcup.ru/forum/9-99264-1
Мой проект Block Destroyer ( В разработке ) https://gcup.ru/forum/9-102818-1#764778
|
|
| |
LunarPixel | Дата: Воскресенье, 24 Мая 2015, 11:42 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| Цитата OpenGOO ( ) если первое уловие ложно, то второе условие не проверяется Ну а на кой нам второе условие проверять, если первое уже ложно? В любом случае, условие не выполнится, хоть с Short Circuit, хоть без него.
Глюк, сложно сказать, не видя всей картины.
|
|
| |
OpenGOO | Дата: Воскресенье, 24 Мая 2015, 11:48 | Сообщение # 11 |
почти ветеран
Сейчас нет на сайте
| Цитата LunarPixel ( ) Ну а на кой нам второе условие проверять, если первое уже ложно? В любом случае, условие не выполнится, хоть с Short Circuit, хоть без него. Вот для этого и ввели Short Circuit Evaluation чтобы делать так Код if distance_to_object(o_obj)<100 && distance_to_object(o_obj)>20 { ////Дейтсвие//// }; а не делать вот так
Цитата LunarPixel ( ) Код if distance_to_object(o_obj)<100 if distance_to_object(o_obj)>20 { ////Дейтсвие//// };
Причем до 1.3 в первом примере сперва выполнялись оба действия, а уже потом сравнение.
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
Сообщение отредактировал OpenGOO - Воскресенье, 24 Мая 2015, 11:59 |
|
| |
LunarPixel | Дата: Воскресенье, 24 Мая 2015, 17:15 | Сообщение # 12 |
старожил
Сейчас нет на сайте
| OpenGOO, да в курсе я зачем он нужен. Потому и говорю, что в нем проблемы быть не может. Если условие не выполняется при включенном Short Circuit Evaluation, значит оно не выполнится и с выключенным, т.е. результата ТС в любом случае не получит.
|
|
| |
OpenGOO | Дата: Понедельник, 25 Мая 2015, 07:36 | Сообщение # 13 |
почти ветеран
Сейчас нет на сайте
| Так кто же знал, что под вопросом: Что случилось со сравнениями в ГМС? ТС имел ввиду: Где у меня ошибка?
Действительно, на последний вопрос Short Circuit Evaluation не дает ответ, по скольку он предназначался для первого вопроса.
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
Глюк | Дата: Понедельник, 25 Мая 2015, 10:11 | Сообщение # 14 |
Lampa Studio
Сейчас нет на сайте
| но фишка в том, что условия все выполняются я по 100 раз уже проверял.
Мой проект Drunk West! (заморожен) https://gcup.ru/forum/9-99264-1
Мой проект Block Destroyer ( В разработке ) https://gcup.ru/forum/9-102818-1#764778
|
|
| |
MrSlap | Дата: Понедельник, 25 Мая 2015, 13:14 | Сообщение # 15 |
почетный гость
Сейчас нет на сайте
| Глюк, у меня в GMS подобные функции работают без нареканий. Попробуй проверить значения переменных в реальном времени, выведи их в draw GUI через draw_text, может ошибка где-то в коде всё-таки, а не в if?
Создаю интерактивную повесть.
|
|
| |
Глюк | Дата: Понедельник, 25 Мая 2015, 13:21 | Сообщение # 16 |
Lampa Studio
Сейчас нет на сайте
| MrSlap, Проблему решил вот таким способом.
if distance<150 and dir=1 and col<0{ if distance>59 { x+=2 sprite_index=s_enemy1_gor image_speed=0.2 };
Мой проект Drunk West! (заморожен) https://gcup.ru/forum/9-99264-1
Мой проект Block Destroyer ( В разработке ) https://gcup.ru/forum/9-102818-1#764778
|
|
| |
XDominator | Дата: Среда, 03 Июня 2015, 15:02 | Сообщение # 17 |
постоянный участник
Сейчас нет на сайте
| distance_to_object() не очень то надежная функция. Гораздо надежней подогнать point_distance(). Думаю дело исключительно в этом.
Ghaarp
The soul lighter(Android, logic)
Zzzzombie RAGE!!!(For android)
|
|
| |