Автор Тема: Странное поведение в BGE  (Прочитано 36355 раз)

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #75 : 10 Апрель 2018, 22:31:28 »
... поясню свой вопрос ...
... ты соединил сенсор с контроллером, который должен вызывать функцию init модуля app ...
... ты сделал это для двух колес, поэтому у тебя при старте дважды вызывается функция init ...
... в функции init идёт назначение обратного вызова callback для коллизии по поверхности ...
... и теперь таких обратных вызова назначено два ...
... отсюда ответ на твой вопрос "за счёт чего" ...
... то есть ты не сделал назначение обратных вызовов для колес, а сделал двойной вызов функции init в которой назначается обратный вызов для поверхности ...
Николай, так два колеса имеют совершенно разные координаты местонахождения. Так почему коллизия одного колеса дублируется вызовом коллизии второго?
Николай, я в « Ответе #46 : 02 Апреля 2018, 10:33:16 » привёл в пример 5 строк с просьбой разъяснить на этом примере работу модуля. Похоже, что пока не прояснится для меня этот момент, я так и буду блуждать меж трёх сосен.

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #76 : 11 Апрель 2018, 04:26:51 »
>> Так почему коллизия одного колеса дублируется вызовом коллизии второго?
... покажи код (или цепочку рассуждений) который подтверждает, что у колеса (колёс) назначена обработка коллизий ...
... просто напиши почему ты считаешь, что у колеса есть вызов обработки коллизий и где это происходит ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #77 : 11 Апрель 2018, 07:52:12 »
>> Так почему коллизия одного колеса дублируется вызовом коллизии второго?
... покажи код (или цепочку рассуждений) который подтверждает, что у колеса (колёс) назначена обработка коллизий ...
... просто напиши почему ты считаешь, что у колеса есть вызов обработки коллизий и где это происходит ...
Сенсор Всегда будирует через контроллер модуль app.init, работу которого я свою очередь и пытаюсь выведать у тебя, ведь в нём есть какая-то закономерность которую можно изложить словами. На мои комментарии ты почему-то не обращаешь внимания и свои не даёшь. Воду в ступе непонятно зачем толчём, только и всего.


Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #78 : 11 Апрель 2018, 13:32:59 »
>> Сенсор Всегда будирует через контроллер модуль app.init
... поясни почему Всегда? ...
... это важно, поскольку лучший способ разобраться - это объяснить другому, то есть мне ...
... хочу сразу тебя предупредить, что я категорически заинтересован в том чтобы ты разобрался и готов холить и лилеять твоё желание вникнуть в суть, уверяю искренне ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #79 : 11 Апрель 2018, 17:30:40 »
>> Сенсор Всегда будирует через контроллер модуль app.init
... поясни почему Всегда? ...
Николай, я не понял вопрос. Да потому что именно сенсор "Всегда" объекта wheel каждый кадр, не ожидая событий, через контроллер будирует модуль app.init
Что-то не так?

Оффлайн Samovar

  • Житель
Re: Странное поведение в BGE
« Ответ #80 : 11 Апрель 2018, 18:20:31 »
Сенсор Always без параметров, срабатывает только один раз при запуске BGE. Я так понял, это и нужно для инициализации...

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #81 : 11 Апрель 2018, 18:52:24 »
Сенсор Always без параметров, срабатывает только один раз при запуске BGE. Я так понял, это и нужно для инициализации...
... да, именно так и происходит, не в каждом "кадре", а только один раз для инициализации ...
... тогда следующий вопрос - если инициализация только один раз почему в консоль постоянно выводятся сообщения? ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #82 : 11 Апрель 2018, 19:57:37 »
Сенсор Always без параметров, срабатывает только один раз при запуске BGE. Я так понял, это и нужно для инициализации...
... да, именно так и происходит, не в каждом "кадре", а только один раз для инициализации ...
... тогда следующий вопрос - если инициализация только один раз почему в консоль постоянно выводятся сообщения? ...
Ну, и почему же?

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #83 : 11 Апрель 2018, 20:07:56 »
... это вопросы на понимание, суть не ответить на них, а научить понимать код ...
... если ты уже понял почему app.init это не модуль, а функция init модуля app, и эта функции вызывается только один раз при старте bge и выполняет какую-то "инициализацию", то найди в коде этой "инициализации" строку, которая ответит на твой вопрос ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #84 : 11 Апрель 2018, 20:26:12 »
Сенсор Always без параметров, срабатывает только один раз при запуске BGE. Я так понял, это и нужно для инициализации...
... да, именно так и происходит, не в каждом "кадре", а только один раз для инициализации ...
... тогда следующий вопрос - если инициализация только один раз почему в консоль постоянно выводятся сообщения? ...
Я вижу другое, два обращения - две инициализации, но несмотря на то что обращения идут от разных объектов, инициализации идут дважды одного и того же объекта. Ну, просто зашибись...

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #85 : 11 Апрель 2018, 20:42:21 »
... не зацикливайся на "инициализации" ...
... суть не в ней, а в том что ты сам назначил два вызова функции init модуля app ...
... более того, число формально в вызов этой функции не передаётся никакой объект, то есть говорить о том что идёт инициализация дважды одного и того же объекта не уместно ...
... происходит вызов два раза функции init модуля app и эти два вызова ты сам прописал через логику bge (а на самом деле этого не требовалось) ...

... попробуй изложить текстом последовательность того что должно происходить в твоей программе ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #86 : 11 Апрель 2018, 21:36:35 »
... не зацикливайся на "инициализации" ...
... суть не в ней, а в том что ты сам назначил два вызова функции init модуля app ...
... более того, число формально в вызов этой функции не передаётся никакой объект, то есть говорить о том что идёт инициализация дважды одного и того же объекта не уместно ...
... происходит вызов два раза функции init модуля app и эти два вызова ты сам прописал через логику bge (а на самом деле этого не требовалось) ...

... попробуй изложить текстом последовательность того что должно происходить в твоей программе ...
Погоди Николай. Отменил вызов в одном из колёс. Всё устаканилось, идёт одна инициализация и последовательная обработка объектов. Если в сцене полторы тысячи объектов, а необходимо отслеживать один, то модуль будет все полторы тысячи отслеживать потому что строка
bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback) этого требует?

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Странное поведение в BGE
« Ответ #87 : 12 Апрель 2018, 02:07:16 »
>> Если в сцене полторы тысячи объектов, а необходимо отслеживать один, то модуль будет все полторы тысячи отслеживать потому что строка
bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback) этого требует?

... в этом модуле (по факту текстовый файл с определением функций) определена функция init (название может быть любым другим), в которой выполняется строка bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback) ...
... суть этой строки добавить в список функций вызываемых при столкновении объекта с другими объектами наш собственный обработчик https://docs.blender.org/api/current/bge.types.KX_GameObject.html?highlight=collisioncallbacks#bge.types.KX_GameObject.collisionCallbacks ...

... вопрос на внимательность - какому объекту добавляется обработчик? ...

... допустим у тебя играют несколько детей, бросая разные мячи об стену ...
... то есть в сцене присутствует: стена, земля, дети, мячи - и могут быть несколько обработчиков ...
... если обработчик у стены, то он будет реагировать на любой мяч, который об него ударился ...
... обработчик земли будет реагировать на любой мяч и ребёнка, который с ней столкнулся ...
... обработчик меча будет реагировать на стену, землю, ребёнка и другие мячи ...

... если ты вешаешь обработчик на 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 ...

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #88 : 12 Апрель 2018, 11:47:43 »
... в этом модуле (по факту текстовый файл с определением функций) определена функция init (название может быть любым другим), в которой выполняется строка bge.logic.getCurrentScene().objects['ground'].collisionCallbacks.append(callback) ...
Николай, тут такая каверза у меня получилась. В текстовом редакторе есть два текста: SledKoles.py и SledKoles.init. Текст SledKoles.py тот который я не трогаю, а изменения провожу в тексте SledKoles.init, его и инициирует контроллер, по крайней мере я так думал. Однако был здорово удивлён тем что на самом деле контроллер инициировал не SledKoles.init, который я определил для инициализации, а SledKoles.py. Переименовал в SledKol.py и получил ошибку:
Python module can't be imported - object 'ground', controller 'Python':
ImportError: No module named 'SledKoles'.
Получается что ввод в контроллер названия SledKoles.init неправомочен? Если годится только ".py", то ".init" служит для внутримодульной адресации и только, или я опять что-то не так понял? Картинку прицепил.
Цитировать
... допустим у тебя играют несколько детей, бросая разные мячи об стену ...
... то есть в сцене присутствует: стена, земля, дети, мячи - и могут быть несколько обработчиков ...
... если обработчик у стены, то он будет реагировать на любой мяч, который об него ударился ...
... обработчик земли будет реагировать на любой мяч и ребёнка, который с ней столкнулся ...
... обработчик меча будет реагировать на стену, землю, ребёнка и другие мячи ...

... если ты вешаешь обработчик на 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 ...
Вроде понял. Время покажет, после нескольких применений модулей, так это или что-то не уяснил.
« Последнее редактирование: 12 Апрель 2018, 12:13:37 от Novichok »

Оффлайн Novichok

  • Житель
Re: Странное поведение в BGE
« Ответ #89 : 12 Апрель 2018, 12:22:44 »
Во, блин. Теперь-то какого рожна ему надо?
Пишет: Python controller found the module but could not access the function - object 'ground', controller 'Python':
AttributeError: module 'SledKoles' has no attribute 'py'

 


Яметрика

* По форуму

* Рекламный блок

* Последние вложения

1 (1).png
Скачано: 5598
Автор: LEXA ANЭGROWND
blender.png
Скачано: 5594
Автор: ipv2007
4.png
Скачано: 5577
Автор: hiroyukiss
2.png
Скачано: 5645
Автор: hiroyukiss

Скачано: 5725
Автор: Dilifa12