Добавляет в переменную 61 вместо 1

техническая поддержка по Construct 2

Сообщение Добавляет в переменную 61 вместо 1
» 12 авг 2018, 14:22

Коллеги, не могу разобраться.
В игре создаются несколько одинаковых объектов по двойному клику (спрайт с бабкой и дедкой).
Есть переменные времени.
Каждое N времени, каждый из созданных объектов должен прибавить в переменную LevelScore единицу (+1).
Но, на практике прибавляется число во много раз превосходящее требуемое.

Я пробовал 2 вариант (видно на картинке, один из них был деактивирован):
1) когда сам объект прибавляет 1 к LevelScore, при этом прибавлялось 3100. В этом случае платит только 1 объект.
2) когда объект спавнит монетку, при соприкосновении с которой прибавляется +1 к LevelScore (при этом прибавляется по 60, а в первый раз 61). В этом случае платит каждый объект.

Код в самом низу листа.

Изображение

Пока так и не разобрался, в чём причина и как сделать правильно.

Пожалуйста помогите понять:
1) Почему добавляет к LevelScore не 1 а больше (~ +60)?
2) Как сделать правильно, что бы каждый одинаковый объект на сцене добавлял по 1 к LevelScore?

В примере
- красный счётчик показывает время от последнего платежа.
- зелёный счётчик деньги.

Заранее благодарю!
p.s. Данное коммьюнити, на удивление одно из самых отзывчивых, которые я встречал в рунете. Приятно удивлён. :drinks:
SingleExample.capx
(1.05 МБ) Скачиваний: 6
Аватара пользователя

Участник
Сообщений: 22
Я тут с 25 июл 2018
Репутация 0 [ ? ]

Сообщение Добавляет в переменную 61 вместо 1
» 12 авг 2018, 15:42

На первый вопрос не отвечу, а по второму всё выглядит как недостаток логических операций для озвученных действий. У объектов-коллекторов должны быть собственные переменные и уже их значение (или изменение) должно влиять на глобальную. Что-то такое.
Изображение
Аватара пользователя

Участник
Сообщений: 751
Я тут с 31 май 2017
Репутация 171 [ ? ]

Сообщение Добавляет в переменную 61 вместо 1
» 12 авг 2018, 19:17

repkino писал(а):На первый вопрос не отвечу, а по второму всё выглядит как недостаток логических операций для озвученных действий. У объектов-коллекторов должны быть собственные переменные и уже их значение (или изменение) должно влиять на глобальную. Что-то такое.


Второй пункт я, пускай криво, но поборол.
А вот проблема с неправильным значением, добавляемым в переменную, гораздо важнее и непонятнее.

Прошу помочь тех, кто может разобраться.
Аватара пользователя

Участник
Сообщений: 22
Я тут с 25 июл 2018
Репутация 0 [ ? ]

Сообщение Добавляет в переменную 61 вместо 1
» 12 авг 2018, 20:31

cheiwe писал(а):Прошу помочь тех, кто может разобраться.

Скорее всего можно и проще, но сейчас особо думать нет времени.
Суть такая: каждые 5 секунд в переменную записывается 1*число твоих объектов
SingleExample.capx
(1.05 МБ) Скачиваний: 2
Дал годный совет, не скупись, поставь + к репутации ^_^
Аватара пользователя

Участник
Сообщений: 167
Я тут с 08 янв 2014
Двиг: C2
Репутация 7 [ ? ]

Сообщение Добавляет в переменную 61 вместо 1
» 12 авг 2018, 22:11

cheiwe писал(а):Второй пункт я, пускай криво, но поборол.
А вот проблема с неправильным значением, добавляемым в переменную, гораздо важнее и непонятнее.


У конструктора есть обманчивая лёгкость в построении алгоритмов, из-за того, что можно что угодно подставить в условия. Это вызывает путаницу в больших проектах с перекрещивающимся взаимодействием объектов, необъяснимые вещи в области выполнения и в результате, чтобы что-нибудь сделать, надо перелопачивать весь лист событий.

Лучше строить логику отдельно, на переменных, дублируя триггеры объектов и поведений переменными - и связывая различные события изменения этих переменных с помощью вызова функции. У С2 большой ресурс и оптимизация на вызов функции, он может безболезненно делать тысячи вызовов одновременно.

Плюс использование семей и семейных переменных. Надо только помнить, что переменные семей наследуются объектами и не могут совпадать, это требует тщательного планирования архитектуры на старте.
Изображение
Аватара пользователя

Участник
Сообщений: 751
Я тут с 31 май 2017
Репутация 171 [ ? ]

Сообщение Добавляет в переменную 61 вместо 1
» 13 авг 2018, 01:20

repkino писал(а):Лучше строить логику отдельно, на переменных, дублируя триггеры объектов и поведений переменными - и связывая различные события изменения этих переменных с помощью вызова функции. У С2 большой ресурс и оптимизация на вызов функции, он может безболезненно делать тысячи вызовов одновременно.

Примерно так я и делаю. И увеличение levelScore у меня происходит только в 1-ом месте, том самом, где +1 надо прибавить. В любом случае, буду копать и заново перебирать всё.
А, не в курсе — в условие каждые X секунд, можно вместо X подставить значение переменной? Может получится сделать, для каждого UIDсобытие вроде каждые PaymentDuration/Gamespeed секунд прибавить 1 к LevelScore (Сейчас не могу проверить сам)?
Аватара пользователя

Участник
Сообщений: 22
Я тут с 25 июл 2018
Репутация 0 [ ? ]

Сообщение Добавляет в переменную 61 вместо 1
» 13 авг 2018, 16:47

[quote="cheiwe"]в условие каждые X секунд, можно вместо X подставить значение переменной?[/quot]
Всё, что нельзя вводить редактор сам запретит, за исключением полей ввода в сторонних плагинах. Единственное, текущий интервал не поменяется с переменной, только следующий.
Изображение
Аватара пользователя

Участник
Сообщений: 751
Я тут с 31 май 2017
Репутация 171 [ ? ]

Сообщение Добавляет в переменную 61 вместо 1
» 13 авг 2018, 18:16

Итак, не глядя в исходник думаем. Прибавляется 61 вместо 1. Что у нас связано с 60 или с 61. Правильно, FPS, 60 кадров (тиков) в секунду. А теперь открываем исходник.
Изображение
Изображение

Каждую секунду меняется LevelTime. Следующее изменение только через секунду, а значит текущее значение держится всю секунду. Если фпс 60, то за секунду пройдет 60 событий. Коины появляются если LevelTime=тому-то, а значит действие будет верно 60 раз за секунду, и коин заспавнится 60 раз. Ну и ниде событие сразу же коин удаляется и начисляется очко.

Лечится добавлением Trigger once while thue:
- Сработает один раз, если условие верно.
- Сработает ещё раз, если условие станет не верно, а потом опять верно.
- Т.к. дополнительное условие Pick, то коины заспавлятся у каждого один раз, ну и у каждого +1.
Изображение

Без коинов
Изображение
Аватара пользователя

Модератор
Сообщений: 2650
Я тут с 18 сен 2015
Откуда: Екатеринбург
Двиг: Construct 2
Лицензия: Personal
VK: id21590703
Репутация 393 [ ? ]

Сообщение Добавляет в переменную 61 вместо 1
» 14 авг 2018, 00:54

ReviveR200 писал(а):Итак, не глядя в исходник думаем. Прибавляется 61 вместо 1. Что у нас связано с 60 или с 61. Правильно, FPS, 60 кадров (тиков) в секунду. А теперь открываем исходник.


Спасибо! Завтра попробую сделать по вашему образцу.
Аватара пользователя

Участник
Сообщений: 22
Я тут с 25 июл 2018
Репутация 0 [ ? ]



Вернуться в Вопрос-Ответ по Construct 2

Сейчас эту тему просматривают

Зарегистрированные пользователи: нет зарегистрированных пользователей

Наверх