By Zevan | February 28, 2009
Actionscript:
-
var letterA:String = "a";
-
var letterZ:String = "z";
-
-
trace(letterA.localeCompare(letterZ));
-
trace(letterZ.localeCompare(letterA));
-
/*
-
outputs
-
-25
-
25
-
*/
String.localeCompare() calculates the sorting order between two Strings....
Posted in strings | Tagged actionscript, flash |
By Zevan | February 27, 2009
Actionscript:
-
function randomize(a:*, b:*):int{
-
return Math.round(Math.random()*8) - 4;
-
}
-
-
var i:int;
-
var fruits:Array;
-
-
trace("Math.random()");
-
for (i = 0; i<4; i++){
-
// reset fruits array:
-
fruits = ["apple", "grape","pear","cherry"];
-
fruits.sort(randomize);
-
trace(fruits);
-
}
-
-
-
// seeds
-
var s1:Number= 0xFF00FF;
-
var s2:Number = 0xCCCCCC;
-
var s3:Number= 0xFF00F0;
-
-
function tRandomize(a:*, b:*):int{
-
return Math.round(rand()*8) - 4;
-
}
-
-
trace("\nTausworthe rand()");
-
for (i= 0; i<4; i++){
-
fruits = ["apple", "grape","pear","cherry"];
-
fruits.sort(tRandomize);
-
trace(fruits);
-
}
-
// from www.ams.org/mcom/1996-65-213/S0025-5718-96-00696-5/S0025-5718-96-00696-5.pdf
-
function rand():Number {
-
s1=((s1&4294967294)<<12)^(((s1<<13)^s1)>>19);
-
s2=((s2&4294967288)<<4)^(((s2<<2)^s2)>>25);
-
s3=((s3&4294967280)<<17)^(((s3<<3)^s3)>>11);
-
var r:Number = (s1^s2^s3) * 2.3283064365e-10;
-
r = (r<0) ? r+=1 : r;
-
return r;
-
}
-
-
/*
-
outputs:
-
Math.random()
-
grape,apple,pear,cherry
-
pear,cherry,apple,grape
-
grape,apple,pear,cherry
-
grape,apple,cherry,pear
-
-
Tausworthe rand()
-
apple,grape,pear,cherry
-
cherry,grape,pear,apple
-
grape,apple,cherry,pear
-
grape,pear,apple,cherry
-
*/
The above shows how to randomly sort or shuffle an array. This is useful in games. To achieve this I made use of the compareFunction argument of Array.sort(). Most sorting algorithms go through the array and compare values until the desired sort order is achieved. The compareFunction argument is a function that takes two values a and b and returns an integer that is negative positive or zero... see this info from the docs:
* A negative return value specifies that A appears before B in the sorted sequence.
* A return value of 0 specifies that A and B have the same sort order.
* A positive return value specifies that A appears after B in the sorted sequence.
So in the case of a randomizing an array you simply need to return a random int -1, 0 or 1. This is what I've done in the past (Math.round()*2) -1) ... but when I was writing this snippet it seemed like 0 caused less variation in the output of the array so I made the range from -4 to 4 instead. This could have just been my imagination, but it seems like having less chance of a zero caused the arrays to be a bit more shuffled.
The reason I also included a version that uses Tausworthe is because of the easy seeding. In some cases you may want to use seeded randomness to sort an array.
UPDATE:
Was digging around about this and found a much faster method for randomizing arrays... not a big deal if you have small arrays, but if you need to randomize 1000's of values this method is much faster than using Array.sort()
By Zevan | February 26, 2009
Actionscript:
-
var words:String = "one two three four five";
-
-
trace("two: ", words.indexOf("two"));
-
-
var letters:String = "abcd";
-
-
trace("d: ",letters.indexOf("d"));
-
-
trace("z: ",letters.indexOf("z"));
-
-
/*
-
outputs:
-
two: 4
-
d: 3
-
z: -1
-
*/
indexOf() searches a string for another string and returns an index... in line 3 above, I search the words string for the smaller string "two" and indexOf() gives me the index of the letter "t". If indexOf() doesn't find anything it will return -1 (as in the case of line 9).
I seem to recall using this in some unexpected places. I'll see if I can dig up an example over the next few days.
By Zevan | February 25, 2009
Actionscript:
-
var txt:TextField = TextField(addChild(new TextField()));
-
txt.text = "";
-
txt.width = 190;
-
txt.height = 400;
-
txt.multiline = true;
-
-
var count:int = 1;
-
function render():void{
-
var line = int(count).toString(2);
-
while(line.length <31){
-
line = "0" + line;
-
}
-
txt.appendText(line + "\n");
-
txt.scrollV= txt.maxScrollV;
-
}
-
-
addEventListener(Event.ENTER_FRAME, onCountUp);
-
function onCountUp(evt:Event):void {
-
count *= 2;
-
render();
-
if (count ==0x40000000){
-
removeEventListener(Event.ENTER_FRAME, onCountUp);
-
addEventListener(Event.ENTER_FRAME, onCountDown);
-
}
-
}
-
function onCountDown(evt:Event):void {
-
count /= 2;
-
render();
-
if (count ==1){
-
addEventListener(Event.ENTER_FRAME, onCountUp);
-
removeEventListener(Event.ENTER_FRAME, onCountDown);
-
}
-
}
The above animates a zig zag pattern in a TextField.