среда, 14 мая 2008 г.

HandCursor над кнопкой. MXML

<mx:Button label="Button" useHandCursor="true" buttonMode="true" mouseChildren="false" id="button_name" />

четверг, 24 апреля 2008 г.

"Ручной" cacheAsBitmap. AS2

Код для статьи "Ручной" cacheAsBitmap. AS2.

Пример использования:
import flash.display.BitmapData;
import flash.geom.Matrix;
import flash.geom.ColorTransform;

var bmp_data:BitmapData = new BitmapData(this._width,this._height,false,0);
bmp_data.draw(this,new Matrix(),new ColorTransform(),"normal",new Rectangle(0,0,this._width,this._height),true);

var name:String;
for (name in this)
if (this[name] instanceof MovieClip) {
var movie:MovieClip = this[name];
movie.unloadMovie();
delete this[name];
}

this._height-=0.5;
this.attachBitmap(bmp_data,1,"auto", true);

понедельник, 18 февраля 2008 г.

Псевдо-генератор случайных чисел. AS3

package org.racer.utils
{
/**
* Псевдо-генератор случайных чисел.
* Получает гамму случайных чисел, и по запросу, выдает каждый последующий элемент гаммы
* Класс представляет только статические методы и не позволяет себя инстанцировать.
*
* @author Evgeny [Racer] Simonov
* @version 1.0
*/
public class TGammaRandom {

/**
* При отсутствии гаммы случайных чисел, random возвращает -1
*/
static public const RETURN_ERROR_MODE:int=0;

/**
* При отсутствии гаммы случайных чисел, random возвращает Math.random();
*/
static public const RETURN_RANDOM_MODE:int=1;

/**
* При отсутствии гаммы случайных чисел, random генерирует исключение
*/
static public const THROW_EXCEPTION_MODE:int=2;

/**
* @private
* Текущий элемент
*/
static private var __current:Number=0;

/**
* @private
* Режим реакции на ошибку в случае неустановленной гаммы случайных чисел
* true - генерируется исключение, false - в результат выдается Math.random();
*/
static private var __strict_mode:int=THROW_EXCEPTION_MODE;

/**
* Режим реакции на ошибку в случае неустановленной гаммы случайных чисел
* true - генерируется исключение, false - в результат выдается Math.random();
*/
static public function set strict_mode(value:int):void {
__strict_mode=value;
}

/**
* @private
*/
static public function get strict_mode():int {
return __strict_mode;
}

/**
* @private
* Гамма случайных чисел
*/
static private var __gamma:Array=null;

/**
* Гамма случайных чисел
*/
static public function set gamma(value:Array):void {
__gamma=value;
}

/**
* @private
*/
static public function get gamma():Array {
return __gamma;
}

/**
* Конструктор. Никогда не вызывается.
*/
public function TGammaRandom() {
throw new Error("Класс TGammaRandom инстанцировать нельзя. Все методы класса являются статическими.");
}

/**
* Возвращает значение из гаммы случайных чисел.
*
* @return Случайное значение
*/
static public function random():Number {
if ((__gamma==null)||(__gamma.length==0)) {
switch (__strict_mode) {
case RETURN_ERROR_MODE:
return -1;
break;
case RETURN_RANDOM_MODE:
return Math.random();
break;
case THROW_EXCEPTION_MODE:
throw new Error("Гамма случайных чисел не установлена, либо пуста. Невозможно возвратить случайное число.");
break;
}
}
if (__current>=__gamma.length) __current=0;
return __gamma[__current++];
}
}
}

понедельник, 11 февраля 2008 г.

Серверный скрипт изменения значения переменной комнаты с оповещением всех пользователей зоны. SmartFoxServer API

Получить запрос на изменение переменной комнаты, изменить ее и оповестить всех авторизованных в зоне пользователей об изменении (дело в том, что стандартный метод SFS Flash API изменения переменной комнаты оповещает только пользователей, находящихся в изменяемой комнате).
function init() {
trace("Initialization Zone Level Extension")
zone=_server.getCurrentZone();
}

function handleRequest(cmd, params, user, fromRoom) {
trace("Zone Level Extension received request: cmd="+cmd+" params="+params+" user="+user+" fromRoom="+fromRoom);

switch (cmd) {
case "setrv":
trace("Room "+zone.getRoom(fromRoom).getName()+" variable changed: "+params.name+". Setting the variable and sending broadcast for all users.");
_server.setRoomVariables(zone.getRoom(fromRoom), user, [params], false, false);
var response={}
response._cmd="chgrv"
response.r_id=fromRoom
response.name=params.name
response.val=params.val
_server.sendResponse(response, fromRoom, null, zone.getUserList().toArray())
break;
}
}

воскресенье, 10 февраля 2008 г.

Добавляем ссылку в контекстное меню Flash. ContextMenu. AS2

_root.menu=new ContextMenu();
var context_menu:ContextMenu = new ContextMenu();
context_menu.customItems.push(new ContextMenuItem("Some link title", this.onContextMenu));
_root.menu=context_menu;

. . .

public function onContextMenu() {
_root.getURL("http://www.somelink.ru/" );
}

вторник, 29 января 2008 г.

Представление компонентов в виде списка. Flex

Создать ItemVO.as с кодом:
package
{
import flash.events.IEventDispatcher;
import flash.events.EventDispatcher;
[Bindable]
public class ItemVO extends EventDispatcher
{
public var label : String;
public var checked : Boolean;
}
}


Создать CheckBoxItemRender.mxml с кодом:
<?xml version="1.0" encoding="utf-8"?>
<?xml:namespace prefix = mx /><mx:canvas height="20" width="100" mx="http://www.adobe.com/2006/mxml">
<mx:checkbox id="checker" change="{data.checked = checker.selected}" selected="{data.checked}" label="{data.label}"></mx:checkbox>
</mx:canvas>

Создать ComponentListTest.mxml с кодом:
<?xml version="1.0" encoding="utf-8"?>
<!-- Tree control example. -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*" layout="vertical">
<mx:Script>
<![CDATA[
public function clearItems() : void
{
for (var i : Number=0; i<arcoltest.length; i++)
{
arcoltest.getItemAt(i).checked = false;
}
}
]]>
</mx:Script>
<mx:ArrayCollection id="arcoltest">
<local:ItemVO label="qewqw" checked="true" />
<local:ItemVO label="1" checked="true" />
<local:ItemVO label="2" checked="true" />
<local:ItemVO label="1231" checked="true" />
<local:ItemVO label="qweqwe" checked="true" />
</mx:ArrayCollection>
<mx:List dataProvider="{arcoltest}" itemRenderer="CheckBoxItemRender" />
<mx:Button label="Clear all" click="clearItems()"/>
</mx:Application>

пятница, 25 января 2008 г.

Обработчик события. MXML

Можно добавить обработчик события в скрипте:
video_playback.addEventListener(MouseEvent.MOUSE_OVER,this.onMouseOver);

Или прямо в теге:
<mx:videodisplay id="video_playback" height="302" width="697" y="74" x="37.5" autoplay="true" mouseover="onMouseOver(event);"></mx:videodisplay>