Наткнулся в интернете на код на actionscript 3, позволяющий удалять повторяющиеся значений из массива (код удаляет все найденные дубликаты, трипликаты и тд).
Код полезен и интересен тем, что показывается использование довольно новой функции array.some(), но недостатком является то, что не зная эту функцию сложно понять его работу. Этот же код можно переписать более просто и понятно.
Смысл работы прост - проверяем в цикле есть ли уже такое значение в нашем новом массиве, и если нет добавляем.
Код для удаления дубликатов из массива на actionscript3 для flash
package
{
import flash.display.Sprite;
/**
* ...
* @author andrew
*/
public class Test extends Sprite
{
public function Test()
{
var originalArray:Array = new Array("yellow", "red", "blue", "red", "yellow", "green", "yellow", "purple", "ginger", "red", "blue");
var dedupedArray:Array = new Array();
function ArrayProcess()
{
for each (var item:String in originalArray)
{
if (dedupedArray.indexOf(item)===-1)
{
dedupedArray.push(item);
}
}
trace("dedupedArray: "+dedupedArray);
}
Не помню уже где нашел в сети скрипт на actionscript 2 для анимации волн (эффект ряби), решил переписать его для as3.
Результат работы можно увидеть ниже.
Для использования надо просто создать мувик с нужной картинкой,
присвоить ему класс asflash.Wave
и поместить его на сцену.
Скорость и направление ряби задается параметром в вызове функции makeWave(-0.1), знак отвечает за направление, значение за скорость волн.
public class Wave extends MovieClip
{
private var w:Number;
private var h:Number;
private var ripple:BitmapData;
private var ripple3:BitmapData;
private var ripple2:BitmapData;
private var ripple1:BitmapData;
private var gradient:BitmapData;
private var gradient_mc:BitmapData;
private var offset3:Point;
private var offset2:Point;
private var offset1:Point;
private var speed1:Number;
private var speed2:Number;
private var speed3:Number;
private var pt:Point;
private var rect:Rectangle;
private var dMap:DisplacementMapFilter;
private var r1pt:Point;
private var r2pt:Point;
private var r3pt:Point;
private var r1rect:Rectangle;
private var r2rect:Rectangle;
private var r3rect:Rectangle;
private var seed:Number;
public function Wave()
{
makeWave(-0.1);
}
public function makeWave(str=-0.1)
{
w = this.width;
h = this.height;
ripple = new flash.display.BitmapData(w, h);
ripple3 = new flash.display.BitmapData(w, h / 2);
ripple2 = new flash.display.BitmapData(w, h / 4);
ripple1 = new flash.display.BitmapData(w, h / 4);
gradient = new flash.display.BitmapData(ripple.width, ripple.height);
gradient.draw(gradient, new flash.geom.Matrix(1, 0, 0, 1, 0, 0));
offset3 = new flash.geom.Point(0, 0);
offset2 = new flash.geom.Point(0, 0);
offset1 = new flash.geom.Point(0, 0);
speed1 = 1*str;
speed2 = 2*str;
speed3 = 4*str;
pt = new flash.geom.Point(0, 0);
rect = new flash.geom.Rectangle(0, 0, ripple.width, ripple.height);