![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2006
Сообщений: 93
|
Open Source проект от Flash Menu Labs
Вертикальное Меню структура и настройки читаются из XML графика и анимация задаётся во fla-файле |
|
|||||
|
Назначается произвольный курсор c эффектом размытия при движении.
Как известно эффект размытия во flash действует только вдоль оси x или y и не подвержен повороту на какой-либо угол, в этом примере обходится этот недочет. Реализован на AS3 |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
Водим мышкой.
|
|
|||||
|
Modus ponens
|
import mx.transitions.Transition;
import mx.transitions.TransitionManager;
class mx.transitions.Iris extends Transition {
#include "Version.as"
public static var SQUARE:String = "SQUARE";
public static var CIRCLE:String = "CIRCLE";
public static var HEART:String = "HEART";
public static var STAR:String = "STAR";
public var type:Object = Iris;
public var className:String = "Iris";
private var _mask:MovieClip;
private var _startPoint:Number = 5;
private var _cornerMode:Boolean;
private var _shape:String = "CIRCLE";
private var _rays:Number = 5;
private var _maxDimension:Number;
private var _minDimension:Number;
private var _renderShape:Function;
function Iris (content:MovieClip, transParams:Object, manager:TransitionManager) {
this.init (content, transParams, manager);
};
function init (content:MovieClip, transParams:Object, manager:TransitionManager):Void {
//trace ("Iris.init()");
super.init (content, transParams, manager);
if (transParams.startPoint) {this._startPoint = transParams.startPoint};
if(transParams.shape.length) this._shape = transParams.shape;
if(!isNaN(transParams.rays)) this._rays = transParams.rays;
this._maxDimension = Math.max (this._width, this._height);
this._minDimension = Math.min (this._width, this._height);
// if _startPoint is an odd number, it's a corner
if (this._startPoint % 2) {
this._cornerMode = true;
}
// assign the render function dynamically based on shape choice
if (this._shape == "SQUARE") {
if (this._cornerMode) {
this._render = this._renderSquareCorner;
} else {
this._render = this._renderSquareEdge;
}
} else if (this._shape == "CIRCLE") {
this._render = this._renderCircle;
} else if (this._shape == "HEART"){
this._render = this._renderHeart;
} else if (this._shape == "STAR"){
this._render = this._renderStar;
}
this._initMask();
};
function start ():Void {
this._content.setMask (this._mask);
super.start();
}
function cleanUp ():Void {
this._mask.removeMovieClip();
super.cleanUp();
}
private function _initMask ():Void {
var container:MovieClip = this._content;
var depth:Number = this.getNextHighestDepthMC (container);
var mask:MovieClip = this._mask = container.createEmptyMovieClip ("__mask_Iris_"+this.direction, depth);
//mask._alpha = 30;
mask._visible = false;
var ib:Object = this._innerBounds;
switch (this._startPoint) {
case 1:
// top left
mask._x = ib.xMin;
mask._y = ib.yMin;
break;
case 4:
// left
mask._x = ib.xMin;
mask._y = (ib.yMin + ib.yMax) * .5;
break;
case 3:
// top right
mask._rotation = 90;
mask._x = ib.xMax;
mask._y = ib.yMin;
break;
case 2:
// top center
mask._rotation = 90;
mask._x = (ib.xMin + ib.xMax) * .5;
mask._y = ib.yMin;
break;
case 9:
// bottom right
mask._rotation = 180;
mask._x = ib.xMax;
mask._y = ib.yMax;
break;
case 6:
// right
mask._rotation = 180;
mask._x = ib.xMax;
mask._y = (ib.yMin + ib.yMax) * .5;
break;
case 7:
// bottom left
mask._rotation = -90;
mask._x = ib.xMin;
mask._y = ib.yMax;
break;
case 8:
// bottom center
mask._rotation = -90;
mask._x = (ib.xMin + ib.xMax) * .5;
mask._y = ib.yMax;
break;
case 5:
// center
mask._x = (ib.xMin + ib.xMax) * .5;
mask._y = (ib.yMin + ib.yMax) * .5;
break;
default:
break;
}
}
// stub--dynamically overwritten by one of the other render methods
private function _render (p:Number):Void {}
private function _renderCircle (p:Number):Void {
var mask:MovieClip = this._mask;
mask.clear();
mask.beginFill (0xFF0000);
if (this._startPoint == 5) {
// iris from center
var maxRadius:Number = .5 * Math.sqrt (this._width*this._width + this._height*this._height);
this.drawCircle (mask, 0, 0, p*maxRadius);
} else {
if (this._cornerMode) {
// iris from corner
var maxRadius:Number = Math.sqrt (this._width*this._width + this._height*this._height);
this._drawQuarterCircle (mask, p*maxRadius);
} else {
// iris from edge
if (this._startPoint == 4 || this._startPoint == 6) {
// half-circle from left or right edge
var maxRadius:Number = Math.sqrt (this._width*this._width + .25*this._height*this._height);
} else if (this._startPoint == 2 || this._startPoint == 8) {
// half-circle from top or bottom edge
var maxRadius:Number = Math.sqrt (.25*this._width*this._width + this._height*this._height);
}
this._drawHalfCircle (mask, p*maxRadius);
}
}
mask.endFill();
}
private function _drawQuarterCircle (mc:MovieClip, r:Number):Void {
var x=0, y=0;
mc.lineTo (r, 0);
mc.curveTo (r+x, Math.tan(Math.PI/8)*r+y, Math.sin(Math.PI/4)*r+x, Math.sin(Math.PI/4)*r+y);
mc.curveTo (Math.tan(Math.PI/8)*r+x, r+y, x, r+y);
}
private function _drawHalfCircle (mc:MovieClip, r:Number):Void {
var x=0, y=0;
mc.lineTo (0, -r);
mc.curveTo (Math.tan(Math.PI/8)*r+x, -r+y, Math.sin(Math.PI/4)*r+x, -Math.sin(Math.PI/4)*r+y);
mc.curveTo (r+x, -Math.tan(Math.PI/8)*r+y, r+x, y);
mc.curveTo (r+x, Math.tan(Math.PI/8)*r+y, Math.sin(Math.PI/4)*r+x, Math.sin(Math.PI/4)*r+y);
mc.curveTo (Math.tan(Math.PI/8)*r+x, r+y, x, r+y);
mc.lineTo (0, 0);
}
//this._maxDimension = Math.max (this._width, this._height);
private function _renderSquareEdge (p:Number):Void {
var mask = this._mask;
mask.clear();
mask.beginFill (0xFF0000);
var s = this._startPoint;
var w = p*this._width;
var h = p*this._height;
var z = p*this._maxDimension;
if(s == 4 || s == 6){
this.drawBox (mask, 0, -.5*h, w, h);
}else if(this._height < this._width){
this.drawBox (mask, 0, -.5*z, h, w);
}else{
this.drawBox (mask, 0, -.5*z, z, z);
}
mask.endFill();
}
private function _renderHeart(p:Number):Void {
var d:Number = Math.min(this._width,this._height)*p;
var k:Number = -d/2;
var mask = this._mask;
mask.clear();
mask.beginFill (0xFF0000);
mask.moveTo(k,k+d/4);
mask.curveTo(k,k,k+d/4,k);
mask.curveTo(k+d/2,k,k+d/2,k+d/4);
mask.curveTo(k+d/2,k,k+d*3/4,k);
mask.curveTo(k+d,k,k+d,k+d/4);
mask.curveTo(k+d,k+d/2,k+d*3/4,k+d*3/4);
mask.lineTo(k+d/2,k+d);
mask.lineTo(k+d/4,k+d*3/4);
mask.curveTo(k,k+d/2,k,k+d/4);
mask.endFill();
}
private function _renderStar(p:Number):Void {
var d:Number = Math.min(this._width,this._height)*p;
var s:Number = Math.PI*2/this._rays;
var mask = this._mask;
mask.clear();
mask.beginFill(0xFF0000);
mask.moveTo(0,d/2);
for(var i:Number=0; i<this._rays; i++){
mask.lineTo(d*.5*Math.sin(s*i),d*.5*Math.cos(s*i));
mask.lineTo(d*Math.sin(s*(i+.5)),d*Math.cos(s*(i+.5)));
}
mask.endFill();
}
private function _renderSquareCorner (p:Number):Void {
var mask = this._mask;
mask.clear();
mask.beginFill (0xFF0000);
var s = this._startPoint;
var w = p*this._width;
var h = p*this._height;
if (s == 5) {
this.drawBox (mask, -.5*w, -.5*h, w, h);
}else if(s == 3 || s == 7){
this.drawBox (mask, 0, 0, h, w);
} else {
this.drawBox (mask, 0, 0, w, h);
}
mask.endFill();
}
}
__________________
Hell is the possibility of sanity |
|
|||||
|
Вот решил сделать шифратор/дешифратор. Кто-то просил.
Все удовольсвие - 11 строк кода. Шифрует / дешифрует данные. Зашифрованный текст можно вставить, скажем в новый txt файл, сохранить в режиме UTF-8 !!!! и отправить, знакомому агенту )))![]() Кодируем.... |
|
|||||
|
[+4 28.12.07]
Регистрация: Dec 2007
Сообщений: 8
|
Tooltip, он же Hint, он же всплывающая подсказка, на AS 2.0. Рабочий вариант класса, который использован мной в готовом приложении. Выкладываю as is, кому нужно, тот разберется.
class Tooltip
{
private var clientList:Array;
private var currentHintIndex;
private var globalMovieClip; // movieClip to get mouse coordinates from, usually _root?
private var xMouseValue, yMouseValue:Number;
private var delayCounter:Number;
private var hitTestCalled:Boolean;
public static var interval:Number = 50; // ticks interval in millisec
public static var delay:Number = 700; // delay mouse stops and before hint shown
public static var movieClipName; // movieclip himself
private var hint;
public function Tooltip()
{
clientList = [];
globalMovieClip = _root;
xMouseValue = globalMovieClip._Xmouse;
yMouseValue = globalMovieClip._Ymouse;
delayCounter = 0;
hitTestCalled = false;
setInterval(this, 'tick', interval);
}
public function tick()
{
if((xMouseValue == globalMovieClip._Xmouse) && (yMouseValue == globalMovieClip._Ymouse))
{
delayCounter += Tooltip.interval;
if(delayCounter >= Tooltip.delay)
{
if(!hitTestCalled) doHitTest();
hitTestCalled = true;
};
}
else
{
hitTestCalled = false;
delayCounter = 0;
hideCurrent();
}
xMouseValue = globalMovieClip._Xmouse;
yMouseValue = globalMovieClip._Ymouse;
}
private function showHint(i)
{
currentHintIndex = i;
if(!clientList[i].txt) return;
hint = mx.managers.DepthManager.createObjectAtDepth('HintMovieClip', mx.managers.DepthManager.kTooltip);
hint.txt.text = clientList[i].txt;
hint._x = globalMovieClip._Xmouse + 10;
hint._y = globalMovieClip._Ymouse + 10;
hint.setDepthTo(mx.managers.DepthManager.kTooltip);
}
private function hideHint(i)
{
currentHintIndex = undefined;
hint.removeMovieClip();
}
private function hideCurrent()
{
if(undefined == currentHintIndex) return;
hideHint(currentHintIndex);
}
private function doHitTest()
{
var mc = getTopmostVisibleMC(_root._Xmouse, _root._Ymouse, _root);
//trace('topmost='+mc);
var index = clientList.getIndexByProp('mc', mc)
if(undefined != index)
{
showHint(index);
}
else
{
sweep(); //while we're in idle
}
}
public function registerClient(mc, txt:String)
{
var i = clientList.getIndexByProp('mc', mc);
if(undefined == i)
{
clientList.push({mc:mc, txt:txt});
}
else
{
clientList[i].txt = txt;
}
}
public function removeClient(mc)
{
var i = clientList.getIndexByProp('mc', mc);
if(undefined == 1) return;
clientList.splice(i, 1);
}
public function sweep()
{
var sweepedList:Array = [];
for(var i:Number = 0; i < clientList.length; i++)
{
if(clientList[i].mc) sweepedList.push(clientList[i]);
}
clientList = sweepedList;
}
public function get length():Number
{
return clientList.length;
}
private function getTopmostVisibleMC(x, y, papa)
{
var candidate = undefined;
for(var foo in papa)
{
if('movieclip' == typeof(papa[foo]))
{
if(!candidate && papa[foo]._visible)
{
if(papa[foo].hitTest(x, y, true)) candidate = papa[foo];
}
else
{
if((candidate.getDepth() < papa[foo].getDepth()))
{
if(papa[foo]._visible && papa[foo].hitTest(x, y, true))
{
candidate = papa[foo];
//trace('ht='+candidate+'@'+candidate.getDepth());
}
}
}
}
}
return candidate;
}
}
|
|
|||||
|
[+4 28.12.07]
Регистрация: Dec 2007
Сообщений: 8
|
Итератор как в php5
Интерфейс: interface Iterator // this is interface actually, identical to PHP5 iterator
{
// Returns the current value
public function current();
// Returns the current key
public function key();
// Moves the internal pointer to the next element
public function next():Void
// Moves the internal pointer to the first element
public function rewind():Void;
// If the current element is valid (boolean)
public function valid():Boolean;
}
class ArrayIterator implements Iterator
{
private var p:Number;
private var a:Array;
public function ArrayIterator(arr)
{
this.a = arr;
this.p = 0;
}
// Returns the current value
public function current()
{
return a[p];
}
// Returns the current key
public function key()
{
return p;
}
// Moves the internal pointer to the next element
public function next():Void
{
this.p++;
}
// Moves the internal pointer to the previuos element
public function prev():Void
{
this.p--;
}
// Moves the internal pointer to the first element
public function rewind():Void
{
this.p = 0;
}
// Moves the internal pointer to the last element
public function ff():Void
{
this.p = (this.a.length - 1) ;
}
// If the current element is valid (boolean)
public function valid():Boolean
{
return Boolean(this.p < this.a.length);
}
}
|
|
|||||
|
[+4 28.12.07]
Регистрация: Dec 2007
Сообщений: 8
|
Фабрика
class Factory
/*
Factory class
example:
//create factory object for class myClass
// myClass.id - unique identifier of myClass instances
var myFactory = Factory.getFactoryFor('myClass', 'id');
//create myClass object
var myObject = myFactory.create(123);
// myObject is now instance of myClass
// myObject.id == 123
var myObject1 = myFactory.create(123);
// myObject1 is alias of myObject
// myObject1.id == myObject.id == 123
var myObject2 = myFactory.create(321);
// myObject2.id = 321
// myObject2 != myObject1
*/
{
var className:String;
var idName:String;
var cache:Array;
static var selfCache:Array;
private function Factory(className:String, idName:String)
{
this.className = className;
this.idName = idName;
this.cache = new Array;
};
public static function getFactoryFor(className:String, idName:String)
{
if(!selfCache[className])
{
if(!selfCache) selfCache = new Array;
selfCache[className] = new Factory(className, idName);
if(!selfCache[className]) trace('ERROR: can not create Factory');
}
return selfCache[className];
}
private function safeNew(className)
{
var obj = new [className]; // create object
if(!obj) trace("ERROR: can not instantiate '"+className+"' object"); // error
return obj;
}
public function create(initData)
{
var obj:Object;
if(this.idName) // id field specified
{// use cache
if(this.cache[initData[this.idName]]) // found in cache
{ // return cached object
return this.cache[initData[this.idName]];
}
else
{ // create instance
this.cache[initData[this.idName]] = this.safeNew(this.className); // save in cache
};
obj = this.cache[initData[this.idName]];
}
else // id field not specified
{ // no cache
obj = this.safeNew(this.className);
};
var foo:String; // iterator
for(foo in initData)
{
obj[foo] = initData[foo]; // assign property
};
return obj;
}
}
|
![]() |
![]() |
Часовой пояс GMT +4, время: 11:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|