Как заменять кубы в Ursina Python

Необходимо, чтобы новый куб появлялся при нажатии на существующий куб. Так создается куб независимо от нажатия:

from ursina import *
app = Ursina()
cube_1 = Entity(model='cube')
cube_1.on_click = Entity(model='cube', position=(1, 0, 0))
app.run()

Функция работает для одного куба:

from ursina import *
app = Ursina()
cube_1 = Entity(model='cube')
def f(position=(1, 0, 0)):
    new_cube = Entity(model='cube', position=position)
cube_1.on_click = f
app.run()

Как сделать это для списка кубов? Код должен при нажатии мыши выполнять замену белого куба, который находится в списке 'cube_list', помещение на его место нового красного куба и запись в другой список 'cube_list_2'. Данный код сразу создает новые кубы без нажатия мыши, что нежелательно:

from ursina import *
app = Ursina()
cube_list = []
cube_list_2 = []
# Формируем список кубов
for i in range(2):
    cube = Entity(model='cube', color=color.white)
    cube_list.append(cube)
# Меняем существующий куб на новый:
def f(i):
    new_cube = Entity(model='cube', position=(cube_list[i].x, 0.5, 1), color=color.red)
    cube_list_2[i] = new_cube
for i in range(len(cube_list)):
    cube_list[i].on_click = f(i)
app.run()

Ответы (1 шт):

Автор решения: CrazyElf

У вас функция вызывается сразу (потому что со скобками), попробуйте так, через lambda:

cube_list[i].on_click = lambda i=i: f(i)
→ Ссылка