m
no edit summary
No edit summary |
mNo edit summary |
||
| Line 1: | Line 1: | ||
= How often is it called = | |||
The game engine will call your OnUpdate function approximately every 0.1 seconds (as defined by the UPDATE_DELAY [[WoW Constants]]). This is usually more often then necessary, and executing your code so often will cause lag! What you need to do is limit how often your OnUpdate code runs, strategies are outlined bellow. | |||
= When is it called = | |||
OnUpdate is not called on any hidden frames, only while they are shown on-screen. OnUpdate will also never be called on a virtual frame, but will be called on any frames that inherit from one. | |||
= Proper Use Example = | |||
; your_xml_file.xml | |||
<Ui ...> | |||
<Frame name="MyAddon_MainFrame" parent="UIParent" hidden="false" toplevel="true"> | <Frame name="MyAddon_MainFrame" parent="UIParent" hidden="false" toplevel="true"> | ||
... | |||
<Scripts> | <Scripts> | ||
<OnUpdate> | <OnUpdate> MyAddon_OnUpdate(elapsed); </OnUpdate> | ||
</Scripts> | </Scripts> | ||
</Frame> | </Frame> | ||
</Ui> | |||
; your_lua_file.lua | |||
-- Globals Section | |||
MyAddon_updateInterval = 1; -- how often my OnUpdate code will run | |||
-- Functions Section | |||
function MyAddon_OnUpdate(elapsed) | function MyAddon_OnUpdate(elapsed) | ||
this.timeSinceLastUpdate = this.timeSinceLastUpdate + elapsed; | |||
if ( | if (this.timeSinceLastUpdate > MyAddon_updateInterval) then | ||
-- | |||
-- | -- Insert your OnUpdate code here | ||
-- | |||
this.timeSinceLastUpdate = 0; | |||
end | end | ||
end | end | ||
Insert your code at the '-- Insert your OnUpdate code here', and substitute the 'MyAddon_' with your addon's name. You might also want to tweak your 'MyAddon_updateInterval' global variable to reflect how often your addon needs the code run, the less the better. This solution also happens to be thread-safe, which is another issue when your code is being run every 0.1 seconds, finished or not. | |||
[[Category:HOWTOs]] | |||