Scripting hints: Difference between revisions
m
→AGS do-while loop
No edit summary |
|||
(7 intermediate revisions by 3 users not shown) | |||
Line 18: | Line 18: | ||
* '''Optional parameters only work with int and enum''' parameters, you can't do it with strings or floats. | * '''Optional parameters only work with int and enum''' parameters, you can't do it with strings or floats. | ||
:'' | :''You can make a '''S'''tring parameter optional by setting it to 0 (which is the equivalent of setting it to null). You can also do this with other pointer types, such as Character*. You just have to remember that if you make it optional this way then you shouldn't crash (abort) the game if it's null.'' | ||
* Basically, to be consistent with Java/C#, the '''protection level always goes first when using protected functions''': [http://www.bigbluecup.com/yabb/index.php?topic=19369.msg226163#msg226163] | * Basically, to be consistent with Java/C#, the '''protection level always goes first when using protected functions''': [http://www.bigbluecup.com/yabb/index.php?topic=19369.msg226163#msg226163] | ||
Line 37: | Line 36: | ||
int gameloops = ((StrLen(text) / game.text_speed) + 1) * GetGameSpeed(); | int gameloops = ((StrLen(text) / game.text_speed) + 1) * GetGameSpeed(); | ||
* '''Functions cannot return structs or arrays''' - they can only return primitive types. This includes Strings in AGS v2.71. | * '''Functions cannot return structs or arrays''' - they can only return primitive types. This includes Strings in AGS v2.71. They can also as of v2.7 return any pointer type (pointers are currently only supported for the built-in types such as GUI and Character). | ||
* The character's '''global inventory variables are integers''' and can be used to keep track of how many items the character has. | * The character's '''global inventory variables are integers''' and can be used to keep track of how many items the character has. | ||
===AGS do-while loop=== | |||
One of the "missing" loop structures in AGS is the "do-while" structure which in '''other''' languages looks like this: | |||
int i = 5; | |||
do { | |||
blah(); | |||
i++; | |||
} while (i < 4); | |||
The point being to ensure that the loop is run at least one time, regardless of the condition. This can however be simulated in AGS using the Game.DoOnceOnly function: | |||
int i = 5; | |||
DateTime *now = DateTime.Now; | |||
while ((i < 4) || (Game.DoOnceOnly(String.Format("%d", now.RawTime)))) { | |||
blah(); | |||
i++; | |||
} | |||
In both cases (AGS and the pseudo-C-style programming) ''I'' would have a resulting value of 6 and the loop would run exactly one time. This bit of trickery is possible thanks to Game.DoOnceOnly accepting unique ID strings. If you needed to perform more than one do-while within a single second you would have to do something else, perhaps just appending a variable to the end of that, but you should get the idea now. Also just for clarification you could always just create a temporary variable like "bool doOnce = true;" and then set it to false within the loop. This way is just more fun! |