Navigation menu
Personal tools
Not logged in
Talk
Contributions
Create account
Log in
Namespaces
WoW
Talk
English
Views
Read
Edit
History
More
Search
Navigation
Home
Random page
Help using wiki
Editions
for WoW
for WildStar
for Solar2D
Documentation
for WoW
for WildStar
Reference
WoW
⦁ FrameXML
⦁ AddOns
⦁ API
⦁ WoW Lua
WildStar
⦁ AddOns
⦁ API
⦁ WildStar Lua
Engine
Tools
What links here
Related changes
Special pages
Page information
Site
Recent Changes
Editing
WoW:Using OnUpdate correctly
(section)
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Proper Use Example == ; your_xml_file.xml <Ui ...> <Frame ...> ... <Scripts> <OnLoad>self.TimeSinceLastUpdate = 0 </OnLoad> <OnUpdate function="MyAddon_OnUpdate" /> </Scripts> </Frame> </Ui> The important part for us is the local "elapsed" (Global is arg1) parameter that we're passing to our function. This is a variable that's being inherited from the WoW system telling us how long it's been since the last update call cycle. ; your_lua_file.lua -- Globals Section MyAddon_UpdateInterval = 1.0; -- How often the OnUpdate code will run (in seconds) -- Functions Section function MyAddon_OnUpdate(self, elapsed) self.TimeSinceLastUpdate = self.TimeSinceLastUpdate + elapsed; if (self.TimeSinceLastUpdate > MyAddon_UpdateInterval) then -- -- Insert your OnUpdate code here -- self.TimeSinceLastUpdate = 0; 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. If you're doing things that require high accuracy in the frequency of the OnUpdate calls, the above code won't be accurate since every time it is called, you will lose milliseconds as the ''TimeSinceLastUpdate'' variable is reset to 0 (If it was 1.05 seconds since last update, it would take 0.05 more seconds until the next update than it should, assuming that one hits 1.0, otherwise it would be delayed by another 0.05, etc). The below code accounts for this, and has a ''while'' structure to make sure that if the players framerate is very low, it'll still do the updates as many times as is needed. function MyAddon_OnUpdate(self, elapsed) self.TimeSinceLastUpdate = self.TimeSinceLastUpdate + elapsed; while (self.TimeSinceLastUpdate > MyAddon_UpdateInterval) do -- -- Insert your OnUpdate code here -- self.TimeSinceLastUpdate = self.TimeSinceLastUpdate - MyAddon_UpdateInterval; end end [[Category:HOWTOs|Use OnUpdate Correctly]]
Summary:
Please note that all contributions to AddOn Studio are considered to be released under the Creative Commons Attribution-NonCommercial-ShareAlike (see
AddOn Studio Wiki:Copyrights
for details).
Submissions must be written by you, or copied from a public domain or similar free resource (see
AddOn Studio Wiki:Copyrights
for details).
Cancel
Editing help
(opens in new window)