Вторник, 24 Декабря 2024, 02:04

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Что случилось со сравнениями в ГМС?
ГлюкДата: Воскресенье, 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, У меня нету этой "настройки" surprised



Мой проект 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)
  • Страница 1 из 1
  • 1
Поиск:

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