Skip to content

Infinite loops RU

Shararvev edited this page Sep 24, 2021 · 2 revisions

This page is available in English

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

	local button = controller:GetMetaTarget("start_button_no")
	button.OnPressed = function(ent, activator)
		print(activator, "just pressed", ent)
		button:Fire("Press") -- FAIL! infinite loop
	end
	button:Fire("Press") -- for test only

Используйте третий аргумент delay в методе Entity:Fire для того, чтобы добавить задержку и безопасно обработать такие случаи. Уточню, что сам по себе пример не имеет смысла, это лишь для демонстрации рекурсии.

	local button = controller:GetMetaTarget("start_button_no")
	button.OnPressed = function(ent, activator)
		print(activator, "just pressed", ent)
		button:Fire("Press", nil, 0.01) -- recurse, but not fail (anyway, for what?)
	end
	button:Fire("Press") -- for test only