User Tools

Site Tools


hpl2:tutorials:forloop

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
hpl2:tutorials:forloop [2011/08/14 00:24]
thegreatcthulhu
— (current)
Line 1: Line 1:
-====== "​For"​ Loops ====== 
- 
- 
-"​For"​ loops are used to repeat some operation multiple times, for example to do something with a variable, or to call an engine function several times in a row. It is almost the same as the "​While"​ loop. 
- 
- 
-A "​for"​ loop's header defines 3 parts things: (1) the counting variable , usually set to an initial value, (2) the loop condition , and (3) the change in the variable'​s value. These are separated by a semicolon ( ; ).  After the header, comes the body of the loop, which defines what is it that should be done on each loop cycle (note: a loop cycle is usually called an //​iteration//​). It can consist of a single statement, or of multiple statements in a code block. 
- 
- 
-The structure of a "​for"​ loop: 
- 
- 
-<​code>​ 
-for (counter; condition; step) 
-    DoSomething();​ 
-</​code>​ 
- 
- 
-Or, with a code block: 
- 
- 
-<​code>​ 
-for (counter; condition; step) 
-{ 
-    DoSomething();​ 
-    DoSomethingElse();​ 
-    WhyNotDoThisToo();​ 
-} 
-</​code>​ 
- 
- 
-Basically, the loop uses the counter variable, checks if the condition is true, executes the loop body if it is, and then changes the counter by the specified step. Then it does it all over again, untill the condition evaluates to false. 
- 
- 
-There are many different ways you can create "​for"​ loops. Here are some examples: 
- 
- 
-<code cpp>void OnStart() ​ 
- 
-        for(int i = 0; i <4; i++) 
-              AddTimer("​T"​ + i, 1.5 * i, "​TimerFunction"​); ​   
-} 
-</​code>​ 
- 
- 
-Lets take this apart. "void OnStart()"​ is the location it is in, which happens when the level starts up. "​for(int i = 0; i < 4; i++)" runs the loop body (in this case, the loop body adds a timer that will trigger "​TimerFunction"​) 4 times before the loop breaks, because integer "​i"​ has to be less than 4, as stated in the loop condition. 
- 
- 
-NOTE: It's an old programming tradtion to start your counters from 0 - maybe this seems counter-intuitive,​ but it's often more convenient to do so. Just remember, if you see the initial value of the counter variable set to 0, and the condition states i < 4, a loop like this will execute 4 times, //not// 3. 
- 
- 
-Why? Look at how the value changes: i= 0, 1, 2, 3 , (4 doesn'​t execute, as the condition is not  true for i=4). 
- 
- 
-If you didn't use the "​for"​ loop, it would look like this: 
- 
- 
-<code cpp>void OnStart() ​ 
- 
- AddTimer("​T0",​ 1.5, "​TimerFunction"​);  ​ 
- AddTimer("​T1",​ 3, "​TimerFunction"​); ​ 
- AddTimer("​T2",​ 4.5, "​TimerFunction"​); ​ 
- AddTimer("​T3",​ 6, "​TimerFunction"​); ​ 
-} 
-</​code>​ 
- 
- 
-All the code above would do exactly the same thing for each other. You can think of the "​for"​ loop as a shortcut. When you use the "​for"​ loop in your script, don't be afraid to use it. You could always go back here and check out how to do it again. When using the "​for"​ loop, you can change whatever value a parameter has when it's in the "​for"​ loop. Use braces ({ }) when the loop's body exceeds one line. Also another tip is that you can use whatever variable you want for the "​for"​ loop, so long that it doesn'​t interfere with an existing variable that could do stuff that you don't want to happen. Here is and example for how a "​for"​ loop could vary: 
- 
- 
-<code cpp>void OnStart() ​ 
- 
- for (int x = 0; x <= 4; x += 2)  
- {  ​ 
- AddEntityCollideCallback("​Player",​ "​ScriptArea_"​+x,​ true, 1);  
- 
-} 
-</​code>​ 
- 
- 
-Note that the condition here checks if x is //less then or equal// to 4 (<= 4). Also note that the x variable is incremented by 2 on each loop cycle (''​x += 2''​ is just shorthand for''​x = x + 2''​). This means that the loop will body execute 3 times (remember, the counter started from 0, not 1 - so, i = 0, 2, 4). 
- 
- 
-I also want to say that in the scripts I provided don't include the functions that could be created based on what I have in there, like a timer function and entity collide functions. 
- 
- 
-== This wiki entry has been made by Kyle S. If you have any comments or need help with this, send me a private message on the Frictional Games Forum. (My name on there is Kyle) == 
- 
- 
-**- Edited by Xiphirx. Fixed errors in code and in text.** 
  
hpl2/tutorials/forloop.1313281496.txt.gz ยท Last modified: 2011/08/14 00:24 by thegreatcthulhu