... поясню свой вопрос ...... ты соединил сенсор с контроллером, который должен вызывать функцию init модуля app ...... ты сделал это для двух колес, поэтому у тебя при старте дважды вызывается функция init ...... в функции init идёт назначение обратного вызова callback для коллизии по поверхности ...... и теперь таких обратных вызова назначено два ...... отсюда ответ на твой вопрос "за счёт чего" ...... то есть ты не сделал назначение обратных вызовов для колес, а сделал двойной вызов функции init в которой назначается обратный вызов для поверхности ...
>> Так почему коллизия одного колеса дублируется вызовом коллизии второго?... покажи код (или цепочку рассуждений) который подтверждает, что у колеса (колёс) назначена обработка коллизий ...... просто напиши почему ты считаешь, что у колеса есть вызов обработки коллизий и где это происходит ...
>> Сенсор Всегда будирует через контроллер модуль app.init... поясни почему Всегда? ...
Сенсор Always без параметров, срабатывает только один раз при запуске BGE. Я так понял, это и нужно для инициализации...
Цитата: Samovar от 11 Апрель 2018, 18:20:31Сенсор Always без параметров, срабатывает только один раз при запуске BGE. Я так понял, это и нужно для инициализации...... да, именно так и происходит, не в каждом "кадре", а только один раз для инициализации ...... тогда следующий вопрос - если инициализация только один раз почему в консоль постоянно выводятся сообщения? ...
... не зацикливайся на "инициализации" ...... суть не в ней, а в том что ты сам назначил два вызова функции init модуля app ...... более того, число формально в вызов этой функции не передаётся никакой объект, то есть говорить о том что идёт инициализация дважды одного и того же объекта не уместно ...... происходит вызов два раза функции init модуля app и эти два вызова ты сам прописал через логику bge (а на самом деле этого не требовалось) ...... попробуй изложить текстом последовательность того что должно происходить в твоей программе ...
... в этом модуле (по факту текстовый файл с определением функций) определена функция init (название может быть любым другим), в которой выполняется строка bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback) ...
... допустим у тебя играют несколько детей, бросая разные мячи об стену ...... то есть в сцене присутствует: стена, земля, дети, мячи - и могут быть несколько обработчиков ...... если обработчик у стены, то он будет реагировать на любой мяч, который об него ударился ...... обработчик земли будет реагировать на любой мяч и ребёнка, который с ней столкнулся ...... обработчик меча будет реагировать на стену, землю, ребёнка и другие мячи ...... если ты вешаешь обработчик на ground, то он будет реагировать на любой объект, который столкнулся с ground ...... если ты вешаешь обработчик на колесо, то он будет реагировать на любой объект, который столкнулся с колесом ...(при условии что нет групповых ограничений https://docs.blender.org/api/current/bge.types.KX_GameObject.html?highlight=collisioncallbacks#bge.types.KX_GameObject.collisionGroup и https://docs.blender.org/api/current/bge.types.KX_GameObject.html?highlight=collisioncallbacks#bge.types.KX_GameObject.collisionMask ) ...... допустим у тебя обработчик установлен не на ground, а на колесо wheel - bge.logic.getCurrentScene().objects['wheel'].collisionCallbacks.append(callback1) ...... когда при обработке коллизий столкновения этого объекта будет вызываться функция callback1 (или любая другая, которую ты определишь) ...... в качестве аргументов при вызове будут приняты аргументы объект - столкновения (а также точка и нормаль) и можно проверить столкнулось ли колесо с ground ...