Туториалы по Alternativa 3D на сайте The Tech Labs
На сайте
На сайте
Как всегда буду краток. Для сортировки можно использовать следующий механизм:
public var faces:Array; . . .
public function ReorderChildren()
{
for(var i:uint = 0; i < 6; i++)
{
faces[i].z = faces[i].child.transform.getRelativeMatrix3D(root).position.z;
this.removeChild(faces[i].child);
}
faces.sortOn("z", Array.NUMERIC | Array.DESCENDING);
for (i = 0; i < 6; i++)
{
this.addChild(faces[i].child);
}
}
Для ознакомления с другими возможностями Flash Player 10
Андрей Горбатов написал
Честно говоря, для меня было откровением, что, например, при вычислении абсолютного значения конструкция
i = x < 0 ? -x : x;
работает на 250% быстрее чем
i = Math.abs(x);
Короче говоря, настоятельно рекомендую
Я решил еще немного поработать с
В продолжение
Класс Surfaces
:
package lib3d {
import lib3d.Object3D;
/**
* @author Michael
*/
public class Surfaces extends Object3D {
private var _exampleNum : int = 1;
public function set exampleNum(n : Number) : void {
_exampleNum = n;
setTilesArray();
}
public function get exampleNum() : Number {
return _exampleNum ;
}
private const cubeSize : Number = 100;
public function Surfaces() {
super();
}
override public function setTilesArray() : void {
var i : int;
var j : int;
var istep : Number;
var jstep : Number;
var tmin : Number;
var tmax : Number;
var smin : Number;
var smax : Number;
var curt : Number;
var curs : Number;
tmin = 0;
smin = 0;
switch (_exampleNum) {
case 1:
tmax = Math.PI;
smax = 7 / 4 * Math.PI;
break;
case 2:
tmax = 2 * Math.PI;
smax = 2 * Math.PI;
break;
case 3:
tmax = 1.5 * Math.PI;
smax = 2 * Math.PI;
break;
case 4:
tmax = Math.PI;
smax = 1.5 * Math.PI;
break;
case 5:
tmax = Math.PI;
smax = 2 * Math.PI;
break;
case 6:
tmax = Math.PI;
smax = 1.5 * Math.PI;
break;
case 7:
tmax = 1;
smax = 2 * Math.PI;
break;
case 8:
tmax = 1.5 * Math.PI;
smax = 2 * Math.PI;
break;
case 9:
tmax = 1.5 * Math.PI;
smax = 2 * Math.PI;
break;
case 10:
tmax = Math.PI;
smax = 2 * Math.PI;
break;
case 11:
tmax = Math.PI;
smax = 3 * Math.PI;
break;
}
istep = (smax - smin) / nMesh;
jstep = (tmax - tmin) / nMesh;
tilesArray = new Array();
for(i = 0;i <= nMesh; i++) {
curs = istep * i + smin;
tilesArray[i] = new Array();
for(j = 0;j <= nMesh;j++) {
curt = jstep * j + tmin;
switch (_exampleNum) {
case 1:
tilesArray[i][j] = [cubeSize * Math.cos(curs) * Math.sin(curt),cubeSize * Math.sin(curs) * Math.sin(curt),cubeSize * Math.cos(curt)];
break;
case 2:
tilesArray[i][j] = [cubeSize / 4.4 * (curt) * Math.cos(curs + Math.PI) * Math.sin(Math.cos(curt)),cubeSize / 4.4 * (curt) * Math.sin(curs + Math.PI) * Math.sin(Math.cos(curt)),cubeSize / 3.7 * (curt) * Math.cos(Math.cos(curt)) - 0.8 * cubeSize];
break;
case 3:
tilesArray[i][j] = [cubeSize / 4.3 * Math.cos(curs) * (2 + Math.cos(curt) * 2),cubeSize / 4.3 * Math.sin(curs) * (2 + Math.cos(curt) * 2),cubeSize / 2.6 * (3 - curt) - 0.3 * cubeSize];
break;
case 4:
tilesArray[i][j] = [cubeSize / 1.6 * Math.sqrt(curt) * Math.sin(2 * curt) * Math.cos(curs - Math.PI),cubeSize / 1.6 * Math.sqrt(curt) * Math.sin(2 * curt) * Math.sin(curs - Math.PI),cubeSize / 1.6 * Math.sqrt(curt) * Math.cos(2 * curt) - 0.15 * cubeSize];
break;
case 5:
tilesArray[i][j] = [cubeSize / 3.5 * Math.cos(curs) * (Math.cos(4 * curt) + 2),cubeSize / 3.5 * Math.sin(curs) * (Math.cos(4 * curt) + 2),cubeSize / 2 * curt - 0.8 * cubeSize];
break;
case 6:
tilesArray[i][j] = [3.2 * cubeSize * Math.sin(curt) * Math.cos(Math.PI / 2 * Math.sin(curt) * Math.cos(curs)) / 2 * Math.sin(curt) * Math.cos(curs),2.2 * cubeSize * Math.sin(curt) * Math.cos(Math.PI / 2 * Math.sin(curt) * Math.cos(curs)) / 2 * Math.sin(curt) * Math.sin(curs),2.2 * cubeSize * Math.sin(curt) * Math.cos(Math.PI / 2 * Math.sin(curt) * Math.cos(curs)) / 2 * Math.cos(curt)];
break;
case 7:
tilesArray[i][j] = [cubeSize / 2.4 * (2 * Math.cos(curs) + (curt - 0.5) * Math.cos(curs / 2)),cubeSize / 2.4 * (2 * Math.sin(curs) + (curt - 0.5) * Math.cos(curs / 2)),cubeSize / 2.4 * 4 * (curt - 0.5) * Math.sin(curs / 2) - 0.1 * cubeSize];
break;
case 8:
tilesArray[i][j] = [cubeSize / 4.3 * (curt) * Math.cos(curs + Math.PI) * Math.sin(curt),cubeSize / 4.3 * (curt) * Math.sin(curs + Math.PI) * Math.sin(curt),cubeSize / 4.3 * (curt) * Math.cos(curt)];
break;
case 9:
tilesArray[i][j] = [cubeSize / 2.8 * (curt) * Math.cos(curs + Math.PI) * Math.sin(Math.cos(curt)),cubeSize / 2.8 * (curt) * Math.sin(curs + Math.PI) * Math.sin(Math.cos(curt)),cubeSize / 2.8 * (curt) * Math.cos(Math.cos(curt)) - cubeSize];
break;
case 10:
tilesArray[i][j] = [cubeSize / 1.15 * Math.cos(curs) * Math.sin(2 * curt),cubeSize / 1.15 * Math.sin(curs) * Math.sin(2 * curt),cubeSize / 1.15 * Math.cos(curt)];
break;
case 11:
tilesArray[i][j] = [cubeSize / 2.7 * Math.pow(4 / 3, curs - 5) * Math.sin(curt) * Math.sin(curt) * Math.cos(curs - 5),cubeSize / 2.7 * Math.pow(4 / 3, curs - 5) * Math.sin(curt) * Math.sin(curt) * Math.sin(curs - 5) + 0.2 * cubeSize,cubeSize / 2.7 * Math.pow(4 / 3, curs - 5) * Math.sin(curt) * Math.cos(curt) - 0.2 * cubeSize];
break;
}
}
}
}
}
}
Небольшие изменения для управления альфа-каналом пришлось сделать в классе View3D
. Попробуйте сами его "доработать лобзиком" 🙂 Ну а нетерпеливые могут
Прочитав
Смотреть
Вспомним, что нам нужно было для того, чтобы воспроизвести FLV файл с помощью Flash. В ActionScript 2.0 нужно было выполнить следующую последовательность действий:
1. Создать новый объект Video в вашей библиотеке (выбрать New Video в меню опций библиотеки);
2. Перетащить объект Video на сцену и дать имя экземпляру;
3. Добавить в первый кадр код.
//Создадим AMF используя ByteArray
import flash.utils.ByteArray;
//Создание байтовой последовательности
var bytes:ByteArray = new ByteArray();
//Запись объекта в виде байтовой последовательности
bytes.writeObject({myString:"Hello World", myNumber:21, myBool:true});
В то время как Вы записываете объект в ByteArray, он сериализуется в байтовую последовательность, используемую форматом AMF. Теперь можно эту последовательность передать посредством сети или сохранить в файловой системе для последующего использования путем десериализации. Простейший пример десериализации AMF:
//Создаем объект и десериализуем из байтовой последовательности
var myObject:Object = bytes.readObject();
//Проверяем результат
trace( myObject.myString ) // Hello World
Во Flash Player-е AMF используется в таких классах, как SharedObject, RemoteObject, LocalConnection, ByteArray, RTMP (во всех вариантах) и во всех удаленных RPC-операциях. Выгодность использования AMF на данный момент сильно недооценена, несмотря на то что имеет ряд преимуществ:
И еще... Тед обещает нам большую новость об AMF в декабре... будем ждать.
Прочитав статью
Итак,
Проанализировав свои предыдущие публикации я понял, что как то не с того начал. Может быть стоило рассказать о языке с самого начала? Но, лучше поздно, чем... очень поздно 🙂
В целях знакомства приведу выдержки из
Что же такое ActionScript?
ActionScript 3.0 - это объектно-ориентированный язык программирования, обладающий большими возможностями и знаменующий собой важный шаг в эволюции Flash Player Runtime.
ActionScript - это язык программирования, основанный на ECMAScript и используемый для написания сценариев кинофрагментов и приложений на Adobe Flash. Впервые ActionScript 1.0 (его полностью программируемая версия) появился в составе Flash 5. Во Flash 6 было добавлено несколько встроенных функций, а также появилась возможность осуществлять более эффективное программное управление анимированными элементами. Во Flash 7 был введен ActionScript 2.0, который был строго типизирован и предоставлял возможности программирования, связанные с использованием классов, такие как наследование, интерфейсы и строгая типизация данных.