воскресенье, 25 ноября 2007 г.

Загружаемый растр. Как включить сглаживание при трансформациях. AS2

//this.__display - клип, в который только что было загружено растровое изображение

public function makeBitmap() {

//Сохраняем изображение в BitmapData с включенным сглаживанием
var bmp_data:BitmapData = new BitmapData(this.__display._width,this.__display._height,true,0);
bmp_data.draw(this.__display,new Matrix(),new ColorTransform(),"normal",new Rectangle(0,0,this.__display._width,this.__display._height),true);

//Очищаем клип от загруженных данных (возможно есть более правильный способ)
var display_parent:MovieClip=this.__display._parent;
var display_name:String=this.__display._name;
var display_depth:Number=this.__display.getDepth();
this.__display.removeMovieClip();
this.__display=display_parent.createEmptyMovieClip(display_name,display_depth);

//Выводим растр в очищенный клип
this.__display.attachBitmap(bmp_data,0,"auto", true);
}

суббота, 24 ноября 2007 г.

Ждем следующего фрейма для получения полноценного доступа к свойствам загруженного клипа. AS2

Особенность использования onLoadComplete вместо onLoadInit

private function waitForOneFrame() {
this.__display.onEnterFrame=Delegate.create(this,this.afterOneFrame);
}

private function afterOneFrame() {
this.__display.onEnterFrame=null;
//Есть доступ ко всем свойствам
}

private function onLoadComplete() {
this.waitForOneFrame();
}

пятница, 23 ноября 2007 г.

Вращение клипа относительно любой точки

var angle=0.1;
var vector_x=mc._x-pointx; var vector_y=mc._y-pointy;

mc.onEnterFrame=function(){
var cos=Math.cos(angle);
var sin=Math.sin(angle);
var vector_rotate_x=vector_x*cos-vector_y*sin;
var vector_rotate_y=vector_x*sin+vector_y*cos;
vector_x=vector_rotate_x;
vector_y=vector_rotate_y;
mc._x=vector_rotate_x+pointx;
mc._y=vector_rotate_y+pointy;
mc._rotation+=angle*180/Math.PI;
}

Вариант реализации паттерна Singleton с проверкой булева флага на возможность инстанцирования. AS3

package
{
/**
* Пример реализации паттерна Одиночка на языке ActionScript 3
* с проверкой специального флага на возможность инстанцирования.
*
* @author Yuri "Barmaley" Yarovoy
* @version 1.0
*/
public class Singleton
{
private static var __instance:Singleton;
private static var __allowInstantiation:Boolean = false;

public static function get instance():Singleton
{
if(!__instance)
{
// Разрешаем создание экземпляра класса.
__allowInstantiation = true;
// Создаем экземпляр.
__instance = new Singleton();
// Запрещаем создание экземпляров.
__allowInstantiation = false;
}
return __instance;
}
/**
* Конструктор.
*/
public function Singleton()
{
if(!__allowInstantiation)
throw new Error("Вы не можете создавать экземпляры класса при помощи конструктора. Для доступа к экземпляру используйте Singleton.instance.");
}
}
}

пятница, 16 ноября 2007 г.

Скрипт мониторинга загрузки

/*
* Скрипт мониторинга загрузки.
* Вставляется в главную временную шкалу, требует от владельца:
* - метод onComplete - что делать по завершении загрузки
* - String text_format - как форматировать текст информацией о загрузке. Сивол $ заменяется на процент загрузки
* - MovieClip display - клип, отображающий загрузку. Должен иметь 101 фрейм с анимацией мониторинга загрузки и текстовое поле text
*/

if (_root.getBytesLoaded()!=_root.getBytesTotal()) {
this.stop();
this.display.owner=this;
this.display.skipped=Number(_root.getBytesLoaded());
this.display.total=Number(_root.getBytesTotal()-this.display.skipped);
this.display.onEnterFrame=function (){
var progress:Number=Math.floor(((_root.getBytesLoaded()-this.skipped)*100)/this.total);
this.gotoAndStop(progress+1);
this.text.text=this.owner.text_format.split("$").join(progress);
if (_root.getBytesLoaded()==_root.getBytesTotal()) {
this.onEnterFrame=null;
this.owner.onComplete();
}
}
} else {
this.onComplete();
}

понедельник, 5 ноября 2007 г.

Принудительный вызов сборщика мусора. AS3

try {
new LocalConnection().connect('foo');
new LocalConnection().connect('foo');
} catch (e:*) {}


Позаимствовано отсюда.

четверг, 1 ноября 2007 г.

Как загрузить библиотеку и затем аттачить из нее клипы. AS3

package {
import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
//
public class duplicateLoadedExample extends Sprite {
public function duplicateLoadedExample() {
var loader:Loader = new Loader();
var url:URLRequest = new URLRequest( “library.swf” );
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, movieLoaded);
loader.load( url );
}
public function movieLoaded(event:Event){
var ms:Class = event.target.applicationDomain.getDefinition(”movie”) as Class;
var mvs = new ms();
addChild( mvs );
}
}
}

Версия подгружаемой SWF (Получить 4й байт)

static public const SWF_SIGN:String = 'CWS';
static public const SWF_VERSION_POS:int = 3;
static public function getSWFVersion(b:ByteArray):uint {
if(BinLoader.isSWF(b)) {
var pos:uint = b.position;
b.position = BinLoader.SWF_VERSION_POS;
var ver:uint = b.readByte();
b.position = pos;
return ver;
} else return null;
}