Difference between revisions of "onEachFrame"

From Bohemia Interactive Community
Jump to navigation Jump to search
(format)
(Undo revision 155024 by Ilias38rus (talk) Not true, it triggers on the next frame)
(Tag: Undo)
 
(8 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Command|= Comments
+
{{Command|Comments=
 
____________________________________________________________________________________________
 
____________________________________________________________________________________________
  
| arma2oa |= Game name
+
| arma2oa |Game name=
  
|1.63|= Game version
+
|1.63|Game version=
 
____________________________________________________________________________________________
 
____________________________________________________________________________________________
  
| Runs given statement every frame. <br><br>
+
| Runs given statement every frame.
{{Informative|Since '''Arma 3''' ''v1.57'' a stackable version of this EH is available: [[Arma_3:_Event_Handlers/addMissionEventHandler#EachFrame|EachFrame]]}}<br>
+
{{Feature arma3 |
{{Feature arma3|In order to keep compatibility between official and community content the functions [[BIS_fnc_addStackedEventHandler]] and [[BIS_fnc_removeStackedEventHandler]] should be used instead.}}|= Description
+
In order to keep compatibility between official and community content:
 +
* Since {{arma3}} v1.57 a stackable version of this EH is available: [[Arma_3:_Event_Handlers/addMissionEventHandler#EachFrame|EachFrame Mission Event Handler]]
 +
* Before that, the scripted version of the event handler should be used instead (using [[BIS_fnc_addStackedEventHandler]] and [[BIS_fnc_removeStackedEventHandler]]).}} |DESCRIPTION=
 
____________________________________________________________________________________________
 
____________________________________________________________________________________________
  
| '''onEachFrame''' statement |= Syntax
+
| [[onEachFrame]] statement |SYNTAX=
  
|p1= statement: [[String]] or [[Code]] |= Parameter 1
+
|p1= statement: [[String]] or [[Code]] |PARAMETER1=
  
| [[Nothing]] |= Return value
+
| [[Nothing]] |RETURNVALUE=
  
| [[diag_frameNo]], [[diag_fps]] |= See also
+
| [[diag_frameNo]], [[diag_fps]] |SEEALSO=
 
____________________________________________________________________________________________
 
____________________________________________________________________________________________
  
|x1= <code>[[onEachFrame]] { [[hintSilent]] [[str]] [[position]] [[player]]}; //Hints position every frame</code> |= Example 1
+
|x1= <code>[[onEachFrame]] { [[hintSilent]] [[str]] [[position]] [[player]]}; {{cc|Hints position every frame}}</code> |EXAMPLE1=
|x2= Private variables defined outside of [[onEachFrame]] scope are not inherited:
+
 
 +
|x2= Private variables defined outside of the [[onEachFrame]] scope are not inherited:
 
<code>_myvar = "bob";
 
<code>_myvar = "bob";
 
myvar = "bill";
 
myvar = "bill";
[[onEachFrame]] {[[hintSilent]] [[str]] [_myvar, myvar]};
+
[[onEachFrame]] { [[hintSilent]] [[str]] [_myvar, myvar]; };
//Result: [any,"bill"]</code>
+
{{cc|Result: [any,"bill"]}}</code>
|= Example 2
+
|EXAMPLE2=
 +
 
 
|x3= Only one [[onEachFrame]] loop can exist at any time:
 
|x3= Only one [[onEachFrame]] loop can exist at any time:
<code>[[onEachFrame]] {[[player]] [[sideChat]] "first"};
+
<code>[[onEachFrame]] { [[player]] [[sideChat]] "first"; };
[[onEachFrame]] {[[player]] [[sideChat]] "second"};
+
[[onEachFrame]] { [[player]] [[sideChat]] "second"; };
//Result: "second","second","second"..."second"</code>
+
{{cc|Result: "second", "second", "second"...}}</code>
  
Note how "first" never gets shown even though it precedes "second". This is because script thread is executing within the same frame and first [[onEachFrame]] is overwritten before it has a chance to execute its statement. |= Example 3
+
Note how "first" never gets shown even though it precedes "second". This is because script thread is executing within the same frame and first [[onEachFrame]] is overwritten before it has a chance to execute its statement. |EXAMPLE3=
 
|x4= Script suspension is not permitted within [[onEachFrame]] scope:
 
|x4= Script suspension is not permitted within [[onEachFrame]] scope:
<code>[[onEachFrame]] {[[sleep]] 1};
+
<code>{{cc|Will throw an error}}
//ERROR!!!</code> |= Example 4
+
[[onEachFrame]] { [[sleep]] 1; };</code> |EXAMPLE4=
 +
 
 +
|x5= <code>[[onEachFrame]] {}; {{cc|Reset event}}</code> |EXAMPLE5=
 
}}
 
}}
  
Line 43: Line 49:
 
<!-- Note Section BEGIN -->
 
<!-- Note Section BEGIN -->
  
<dd class="notedate">Posted on 21 Dec, 2012
 
<dt class="note">[[User:neokika|neokika]]<dd class="note">
 
<code>[[onEachFrame]] {}; //Reset event</code>
 
 
<!-- Note Section END -->
 
<!-- Note Section END -->
 
</dl>
 
</dl>
 
<h3 style="display:none">Bottom Section</h3>
 
<h3 style="display:none">Bottom Section</h3>
  
[[Category:ArmA 2 OA: New Scripting Commands List|{{uc:{{PAGENAME}}}}]]
+
[[Category:Scripting Commands Arma 2|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands ArmA2|{{uc:{{PAGENAME}}}}]]
 
 
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
 
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands|{{uc:{{PAGENAME}}}}]]
 

Latest revision as of 11:14, 3 July 2020

Introduced with Arma 2: Operation Arrowhead version 1.631.63
Hover & click on the images for descriptions

Description

Description:
Runs given statement every frame.
Arma 3 logo black.png
In order to keep compatibility between official and community content:

Syntax

Syntax:
onEachFrame statement
Parameters:
statement: String or Code
Return Value:
Nothing

Examples

Example 1:
onEachFrame { hintSilent str position player}; // Hints position every frame
Example 2:
Private variables defined outside of the onEachFrame scope are not inherited: _myvar = "bob"; myvar = "bill"; onEachFrame { hintSilent str [_myvar, myvar]; }; // Result: [any,"bill"]
Example 3:
Only one onEachFrame loop can exist at any time: onEachFrame { player sideChat "first"; }; onEachFrame { player sideChat "second"; }; // Result: "second", "second", "second"... Note how "first" never gets shown even though it precedes "second". This is because script thread is executing within the same frame and first onEachFrame is overwritten before it has a chance to execute its statement.
Example 4:
Script suspension is not permitted within onEachFrame scope: // Will throw an error onEachFrame { sleep 1; };
Example 5:
onEachFrame {}; // Reset event

Additional Information

See also:
diag_frameNodiag_fps

Notes

i
Only post proven facts here. Report bugs on the Feedback Tracker and discuss on the Arma Discord or on the Forums.

Notes

Bottom Section