Fires when drawing the user interface (many times per second).
- ScriptObject - The updated widget.
- number - The time in seconds since the last OnUpdate dispatch, but excluding time when the user interface was not being drawn such as while zoning into the game world
- Preceeded by handlers associated with processing user input.
- Blocked by hiding a frame or its parent.
- OnUpdate is resource intensive because it fires as often as the client can draw new frames -- potentially hundreds of FPS with modern computers.
Throttles a workload no more than once every 0.05 seconds:
local frame = CreateFrame() local timeElapsed = 0 frame:HookScript("OnUpdate", function(self, elapsed) timeElapsed = timeElapsed + elapsed if timeElapsed > 0.05 then timeElapsed = 0 -- do something end end)
Executes a workload 20 times per second. If FPS is slower than 20, the workload repeats until caught up.
local frame = CreateFrame() local timeElapsed = 0 frame:HookScript("OnUpdate", function(self, elapsed) timeElapsed = timeElapsed + elapsed while (timeElapsed > 0.05) do timeElapsed = timeElapsed - 0.05 -- do something end end)