Последнее обновление:
November 28, 2017

Есть мысль... Жми, напиши!
Что имеем: Постов : 171 Авторов: 1 Категорий: 38

as3 изменение кодировки

var ba:ByteArray = ByteArray(event.target.data);
ba.readMultiByte(ba.bytesAvailable,"win-1251");
Views :

1108

TextField embedFonts (внедрение шрифтов as3)

Для нормальной работы тегов b i нужно найти шрифты с соответствующими начертаниями, к примеру MyriadPro-Regular — с обычным MyriadPro-Bold — с жирным
Подгружается шрифт во флэшку следующим образом:

[cc lang=»ActionScript3″] [Embed ( source = «MyriadPro-Regular.ttf»,fontName = «Myriad Pro», fontStyle = «regular», fontWeight = «regular», mimeType = «application/x-font-truetype») ] private var MyriadPro:Class;
[Embed ( source = «MyriadPro-Bold.otf»,fontName = «Myriad Pro», fontStyle = «regular», fontWeight = «bold», mimeType = «application/x-font-opentype») ] private var MyriadProB:Class;[/cc]

Примерчик использования:

[cc lang=»ActionScript3″] Font.registerFont(MyriadPro);
Font.registerFont(MyriadProB);
var tff_btitle : TextFormat = new TextFormat();
tff_btitle.color=0x595047;
tff_btitle.size=24;
tff_btitle.font=»Myriad Pro»;

var tf:TextField = new TextField();
addChild(tf);
tf.embedFonts=true;
tf.autoSize = TextFieldAutoSize.LEFT;
tf.htmlText = «обычный текст, а теперь жирный«;
tf.setTextFormat(tff_btitle);
tf.defaultTextFormat = tff_btitle; [/cc]


[ratings]

Views :

1455

Добавить экземпляр класса подгружаемого мувика

Пусть есть флешка library.swf и в её библиотеке есть мувик связанный с классом MC
(Свойства, галочка Экспорт для ActionScript)
Есть другая флешка loader.swf которая подгружает флешку library.swf.

package {
 import flash.display.Loader;
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.events.EventDispatcher;
 import flash.net.URLRequest;
 import flash.system.ApplicationDomain;

 public class loader extends Sprite {
  var e:Event;
  var a:ApplicationDomain;
  public function loader() {
   var url:URLRequest = new URLRequest("library.swf");
   var l:Loader = new Loader();
   l.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
   l.load(url);
  }
  
  private function onLoadComplete(e:Event) {
   trace("loaded");
   var currentClass:Class = e.target.applicationDomain.getDefinition("MC") as Class;
   var s:Sprite = new currentClass();
   addChild(s);
   
   var s2:Sprite = new currentClass();
   addChild(s2);
   
   s2.x = 50;
   s2.y = 50;
  }
 }
}


[ratings]

Views :

1952

Сохранить MovieClip как SWF файл на сервере.

Взято с forum.vingrad.ru/
[cc lang=»actionscript»] import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.utils.ByteArray;
var ByteLoader:URLLoader;
var ByteConverter:Loader;
var ByteConverter2:Loader;
var FileRequest:URLRequest;
var ba:ByteArray = new ByteArray;
function convert(event:Event)
{
//function BytesExample (event:Event) {
ByteLoader = new URLLoader();
ByteLoader.dataFormat = URLLoaderDataFormat.BINARY;
ByteLoader.addEventListener (Event.COMPLETE, onBytesLoaded);
FileRequest = new URLRequest («mov.swf»);
ByteLoader.load (FileRequest);
//}
function onBytesLoaded (evt:Event)
{
ByteConverter = new Loader();
ByteConverter.contentLoaderInfo.addEventListener (Event.COMPLETE, onConvertFinished);
ByteConverter.loadBytes (ByteLoader.data);
ba.writeBytes(ByteLoader.data);
//urla
var url_req:URLRequest = new URLRequest(«http://127.0.0.1/img_create.php»);
url_req.data = ba;
url_req.method = URLRequestMethod.POST;
var header:URLRequestHeader = new URLRequestHeader («Content-type», «application/octet-stream»);
url_req.requestHeaders.push(header);
navigateToURL(url_req, «png»);
}
function onConvertFinished (evt:Event)
{
var mc = ByteConverter.content;
trace (ba);
mc.x = 0;
mc.y = 0;
mc.alpha = .75;
addChild (mc);
}
}
bt.addEventListener(MouseEvent.CLICK, convert);
[/cc] Серверный код:
[cc lang=»php»] header(«Expires: Mon, 26 Jul 1997 05:00:00 GMT»);
header(«Last-Modified: » . gmdate(«D, d M Y H:i:s») . » GMT»);
header(«Cache-Control: no-store, no-cache, must-revalidate»);
header(«Cache-Control: post-check=0, pre-check=0», false);
header(«Pragma: no-cache»);
$image_data = $GLOBALS[«HTTP_RAW_POST_DATA»] ;
$filename_to_save = «avatar.swf»;
if(isset($image_data)){
$png_file = fopen($filename_to_save, «wb») or die(«File not opened!»);
if($png_file){
set_file_buffer($png_file, 20);
fwrite($png_file, $image_data);
fclose($png_file);
}
}
echo(«
«);
?>
[/cc]

Views :

1025

Изменение содержимого ячеек DataGrid на примере создания кнопки. (CellRender DataGrid)

[b]1.[/b] Создаем новую папку
[b]2.[/b] Во флэш новый документ, сохранить в тока что созданной папке
[b]3.[/b] Кинуть на сцену компонент — DataGrid и Button в библиотеку.
[b]4.[/b] В первом кадре код:

var sampleItem1:Object = { Name:"John Alpha",     Number:"555-123-0101", Email:"jalpha@fictitious.com" };
var sampleItem2:Object = { Name:"Mary Bravo",     Number:"555-372-3322", Email:"mbravo@fictitious.com" };
var sampleItem3:Object = { Name:"Trevor Gamma", Number:"555-485-1212", Email:"tgamma@fictitious.com" };
var sampleItem4:Object = { Name:"Susan Delta",     Number:"555-987-3434", Email:"sdelta@fictitious.com" };       

//dg.setStyle('cellRenderer', MyRenderer);

dg.columns = ["Name", "Number", "Email"];

dg.addItem(sampleItem1);
dg.addItem(sampleItem2);
dg.addItem(sampleItem3);
dg.addItem(sampleItem4);

dg.addColumn("NewCol");

//--дальше две строчки - задают обраьотчики рисования эдеметво в ячейках столбца
dg.getColumnAt(0).cellRenderer=MyRenderer;
dg.getColumnAt(1).cellRenderer=MyRenderer2;
[b]5.[/b] Дальше создаем в папке с нашим роликом файл с именем [b]MyRenderer2.as[/b] В него пишем следующий код:

package
{
    import fl.controls.LabelButton;
    import fl.controls.listClasses.ICellRenderer;
    import fl.controls.listClasses.ListData;
 import fl.containers.BaseScrollPane;
 import flash.display.Sprite;
 import flash.events.MouseEvent;
    
    public class MyRenderer2 extends Sprite implements ICellRenderer {
        private var _listData:ListData;
        private var _data:Object;
        
        public function MyRenderer2() {
  	this.graphics.lineStyle(1);
  	this.graphics.drawCircle(10, 10, 10);
   
  	this.addEventListener(MouseEvent.CLICK, mouseClickHandler);
        }
  
  private function mouseClickHandler(e:MouseEvent):void {
   trace("cell clicked");
  }

        public function set listData(newListData:ListData):void {
            _listData = newListData;
            //label = "Random: " + _listData.label;
            //drawRandomColor();
        }

        private function drawRandomColor():void {
            graphics.beginFill(Math.random()*0xFFFFFF);
            graphics.drawRect(0,0,20,20);
            graphics.endFill();            
        }

        public function get listData():ListData {
            return _listData;
        }

        public function set data(newData:Object):void {
            _data = newData;
        }

        public function get data():Object {
            return _data;
        }
  public function get selected():Boolean {
   return true;
  }
  public function set selected(value:Boolean):void {
   
  }
  public function setMouseState(state:String):void {
   //if (state == "over") { trace ("mouse Over") };
  }
  public function setSize(width:Number, height:Number):void {
   this.width = width;
   this.height = height;
  }
  
  public function setStyle(style:String, value:Object):void {
    
  }

    }
}

Теперь там же создаем файл с именем [b]MyRenderer.as[/b] в нем:

package
{
    import fl.controls.LabelButton;
    import fl.controls.listClasses.ICellRenderer;
    import fl.controls.listClasses.ListData;
  import fl.containers.BaseScrollPane;
	import flash.events.MouseEvent;
    
    public class MyRenderer extends LabelButton implements ICellRenderer {
        private var _listData:ListData;
        private var _data:Object;
        
        public function MyRenderer() {
  	this.addEventListener(MouseEvent.CLICK, mouseClickHandler);
        }
  
  private function mouseClickHandler(e:MouseEvent):void {
      trace("Кликнули по номеру:", _data.Number);
    }
  

        public function set listData(newListData:ListData):void {
             _listData = newListData;  
             //-------------------------------
  	label = _data.Number;  //--запишем в кнопку значение
     }

        public function get listData():ListData {
            return _listData;
        }

        public function set data(newData:Object):void {
            _data = newData;
        }

        public function get data():Object {
            return _data;
        }
    }
}

Сохраняемся и компилим проект.
Теперь для чего файл [b]MyRenderer.as[/b] Он отвечает за надписи на кнопках в пером столбце и за реакцию на них.
а [b]MyRenderer2.as[/b] за рисование кружков.
Вот и все)

[ratings]

Views :

1153

Передача параметров через EventHandler

Как известно по умолчанию EventHandler не может передовать параметры обработчику,
НО мы можем задать промежуточный обработчки в который уже передадим целевой обработчик и параметры .
Код промежуточного обработчика:

var delegate:Function = function(scope:Object, func:Function, ...rest):Function {
  return function(...args):void {
    func.apply(scope, args.concat(rest));
  }
}

Пример использования:

myButton.addEventListener(MouseEvent.CLICK, delegate(this,mouseClickHandler, "param1" , "param2"));  //--параметров может быть сколько угодно

Целевой обработчик:

private function mouseClickHandler(e:MouseEvent, ...rest):void { //-- "...rest" - означает что число параметров - неопределенное
trace("Кликнули по кнопке:", rest[0], rest[1]);  //---  rest[0] - получаем первый переданный параметр,  rest[1]  - второй, и т.д.
}

Вот так вот просто)

[ratings]

Views :

1020

баг с getCharBoundaries

Вот мой обход бага:
Была задача — некоторую фразу в прямоугольную рамку, обрамляю эту фразу в «|»
Собственно код:

 //--создаем текстовое поле, вносим текст
 var tf:TextField = new TextField();
 tf.htmlText = ' К счастью, |баги емае| можно обойти';
 tf.autoSize=TextFieldAutoSize.CENTER;
 tf.x=0;
 tf.y=0;
 addChild(tf);
 //--пошло самое интересное
 var s:String;
 s=tf.text;
 var p1:int=s.indexOf("|"); //--нашли индекс символа начала рамки
 var p2:int=s.indexOf("|", p1+1); //--нашли индекс закрывающее рамку
 var fr:Rectangle=tf.getCharBoundaries(p1); //--определили кооринаты символа открывающего
 var sr:Rectangle=tf.getCharBoundaries(p2); //--координаты закрывающего
 var dx:int=-tf.getCharBoundaries(0).x+2.5; //- определяем на сколько смещен первый имвол строки
 //--рисуем рамку
 var mr:Sprite=new Sprite();
 with (mr.graphics) {
	lineStyle(1,0x000000);
	drawRect(fr.x+dx, //--положение по горизонтали
                          fr.y,       //--по вертикале
                          (sr.x+dx)-(fr.x+dx),  //--ширина с учетом бага
                          18                           //--высота
            );
 }
 addChild(mr);


[ratings]

Views :

711

Совместная работа IEView и History++ (miranda plugins)

Если IEView отказывается натягивать скрин, то следует убрать галочку в настройках в ветке история галочку «имитировать API IEView». скины появятся.

Views :

906

Баг с позиционирыванием бэграунда по центру в firefox и safari

[cc lang=»css»] html {
margin-left: -1px;
overflow-Y: scroll;
}
[/cc]
Views :

854

Создание перил для лестниц

Рисуем сплайн — путь по которому должна лечь перилина,
рисуем форму перилины,
выделяем ее,
идем во вкладку Create->Geometry->в выпадающем списке ComboundObjects
щелкаем loft в skin parametrs снять галку с balking
перилина готова.

Views :

983