![]() |
|
||||||||||
|
|||||
|
Да... не думал я, что этим паперВизоном так сложно пользоваться.
И так легко будет сделать вращающийся куб с гранями и кликами без нее. http://murmadillo.tut.su/m/Main.swf package {
import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.geom.Vector3D;
import flash.filters.*;
import flash.geom.Matrix3D;
import flash.geom.Point;
import __AS3__.vec.*;
[SWF(width='800', height='600', backgroundColor='#123456', frameRate='12')]
dynamic public class Main extends MovieClip{ ;
private var numVertices:int,
numFaces:int,objRad:Number,vertsVec:Array,facesVec:Array,
fLen:Number,spBoard:Sprite,shBack:Shape,spObject:Sprite,
spObjImage:Sprite,doRotate:Boolean, prevX:Number, prevY:Number,
facesColors:Array, distArray:Array, dispVec:Array,i:int,
newVertsVec:Vector3D,spCircle:Array,spSortFace:Array,txt:TextField,
autoX:int=0, autoY:int=0, mX:Boolean=false,
bX:Boolean = false,
mY:Boolean = false,
bY:Boolean = false;
public function Main() {
numFaces = 6;
objRad = 140;
vertsVec= [];
facesVec = [];
spSortFace = [];
distArray = [];
newVertsVec = new Vector3D();
spBoard = new Sprite();
addChild(spBoard);
spBoard.x=400;
spBoard.y=300;
facesColors = [0xFFFFCC, 0x00FF66, 0x0066FF, 0x33FFFF, 0x9A7DDF, 0xFFCCFF];
spCircle = [];//грани куба
for (i = 0; i < numFaces;i++){
spCircle[i] = new Sprite();
spSortFace[i] = new Sprite;//для сортировки граний
spSortFace[i].graphics.lineStyle(3, 3, 0.5);
spSortFace[i].x = objRad;
spSortFace[i].y = objRad;
spSortFace[i].z = spSortFace[i].rotationX = spSortFace[i].rotationY = spSortFace[i].rotationZ =0;
//spSortFace[i].graphics.drawRect(0, 0, 2, 2);//квадратики в центре (закоментировать)
txt = new TextField();
txt.htmlText = "<font face='Comic Sans MS' color='#"+
int(facesColors[5-i]).toString(16)+"' size='100'>"+i;
txt.autoSize = TextFieldAutoSize.LEFT;
txt.scaleX = txt.scaleY = 2;
txt.selectable = false;
txt.mouseEnabled = false;
txt.mouseWheelEnabled = false;
spCircle[i].addChild(txt);//надписи
spCircle[i].addChild(spSortFace[i]);
//spCircle[i].graphics.lineStyle(3, 3);
spCircle[i].graphics.beginFill(facesColors[i], 1);
spCircle[i].graphics.drawRect(0, 0, objRad*2, objRad*2);
spBoard.addChild(spCircle[i]);
spCircle[i].name = "Клик на грани с номером"+i;
spCircle[i].addEventListener(MouseEvent.CLICK, clickFunck);
if (i == 0) spCircle[i].rotationZ = 0;
if (i == 1) spCircle[i].rotationY = -90;
if (i == 2) spCircle[i].rotationX = 90;
spCircle[i].z = spCircle[i].y = spCircle[i].x = -objRad;
if (i > 2) spCircle[i].z = spCircle[i].y = spCircle[i].x = objRad;
if (i == 3) {
spCircle[i].rotationX = -90;
spCircle[i].rotationY = spCircle[i].rotationZ = 90;
}
if (i == 4) {
spCircle[i].rotationX = spCircle[i].rotationY = 360;
spCircle[i].rotationZ = -180;
}
if (i == 5) {
spCircle[i].rotationX = 90;
spCircle[i].rotationY = 180;
spCircle[i].rotationZ = -360;
}
}
rotateObj(0, 0, 0);
txt = new TextField();
txt.textColor = 0xffffff;
txt.text = "Привет";
txt.autoSize = TextFieldAutoSize.LEFT;
addChild(txt);
stage.addEventListener(MouseEvent.MOUSE_MOVE, stageMove);
addEventListener(Event.ENTER_FRAME, enterFrameFunc);
}
private function rotateObj(rotx:Number,roty:Number,rotz:Number):void {
var curObjMat:Matrix3D;
for (i = 0; i < numFaces; i++) {
spObject = spCircle[i];
spObject.transform.matrix3D.appendRotation(rotx,Vector3D.X_AXIS);
spObject.transform.matrix3D.appendRotation(roty,Vector3D.Y_AXIS);
spObject.transform.matrix3D.appendRotation(rotz,Vector3D.Z_AXIS);
curObjMat = spObject.transform.matrix3D.clone();
spCircle[i].transform.matrix3D = curObjMat;
distArray[i] = [spSortFace[i].transform.getRelativeMatrix3D(this).position.z, i];
//trace(spSortFace[i].transform.getRelativeMatrix3D(this).position.z);
}
distArray.sort(byDist);
for (i=0; i < numFaces; i++) {//сортировка граней
spBoard.setChildIndex(spCircle[distArray[i][1]],i);
}
}
private function byDist(v:Array,w:Array):Number {
if (v[0]>w[0]){
return -1;
} else if (v[0]<w[0]){
return 1;
} else {
return 0;
}
}
private function stageMove(e:MouseEvent):void {
mX=bX=mY=bY=false;
//txt.text=stage.mouseX+" "+stage.mouseY;
if (stage.mouseX<250) mX=true;
if (stage.mouseX>450) bX=true;
if (stage.mouseY<200) mY=true;
if (stage.mouseY>400) bY=true;
}
private function clickFunck(e:MouseEvent):void {
txt.text = e.target.name;
}
private function enterFrameFunc(evt:Event):void {
autoX = autoY = 0;
if (mX==true) autoX+=5;
if (bX==true) autoX-=5;
if (mY==true) autoY-=5;
if (bY==true) autoY+=5;
if(!doRotate) rotateObj(autoY,autoX, 0);
//evt.updateAfterEvent();
}
}
}
|
|
|||||
|
Регистрация: Mar 2006
Сообщений: 141
|
ХАХАХА!
Точно! Но сложные объекты с таким подходом, будет очень сложно делать... PaperVision хорош, когда делаются серьёзные вещи! |
|
|||||
|
Какие сложные? например чайники без нее легче делать...
http://murmadillo.tut.su/fla/10car3D.swf Шары можно http://murmadillo.tut.su/fla/cir10car3D.swf Исходничок (чисто 10 методы) http://murmadillo.tut.su/fla/cirCar3d.rar |
|
|||||
|
Регистрация: Mar 2006
Сообщений: 141
|
Так это away3d! Это же альтернатива paperVision. Но paperVision быстрее! FPS даёт больше!
|
|
|||||
|
ветеран форума
|
Только где такой ужас применить то можно?
Можно (реальный) жизненный пример? Я конечно прошу прощения, может это немного и резковато, понимаю что кто то работал, писал движек свой, но при такой подаче не вижу применения на реальных задачах. PV3D этому движку фору даст в большинстве случаев.
__________________
trace("Остановите Землю, я сойду!!!"); Последний раз редактировалось Mur4ik; 21.01.2009 в 14:56. |
|
|||||
|
Регистрация: Mar 2006
Сообщений: 141
|
http://blog.tartiflop.com/first-steps-in-away3d/ - Away3D - первые шаги
http://blog.tartiflop.com/first-steps-in-papervision3d/ - PaperVision3D - первые шаги. Вот отличный сайт с примерами работ на PV3D http://blog.papervision3d.org/ Более того, на него натягиваются движки физики и трансформации. Вернее их везде приляпать можно, но всё же... http://papervision2.com/ - сайт с отличными примерами для PV3D (Интересные примерно на с 4-й страницы начинаются) Вот отличный сайт - http://blog.zupko.info/ Тут несколько хороших примеров есть - http://www.madvertices.com/ Вот отличный сайт http://pv3d.org/ - все примеры рабочие и можно чисто копировать и вставлять себе. Далее модифицировать |
|
|||||
|
Регистрация: Mar 2006
Сообщений: 141
|
))) Верю, что с логикой у всех всё хорошо, с программированием тоже, но уверен, что движок типа PV3D, Away3D и Alternativa3D так просто не написать даже за месяц. Тем более над ними работаем одновременно много людей, а как говорится "Одна голова хорошо, а 2-е лучше!" Тем более, всегда следует не изобретать велосипед, а использовать готовый... пусть надо будет поставить свои колёса и цепь натянуть другую, но это правильнее! Ибо результативность больше. Пусть не в первом проекте, но во втором или 3-ем - точно! |
|
|||||
|
Самый удачный примерчик (там 9 пальм)
Инструкция: Надо кликнуть где нибуть мышкой, потом нажать стрелочку на клавиатуре назад. http://murmadillo.tut.su/m/PalmDoc.swf Ну и вот туториал как делать куб http://www.dnadillo.dn.ua/flex/3d-text-cube.html >>Так это away3d! Это же альтернатива paperVision. Но paperVision быстрее! FPS даёт больше! Так это не away3d! И вы ж понимаете, что ни о каком FPS и речи быть не может, потому, что все шуршит на бешенной скорости. (10 плеер) А если еще использовать типизированные массивы <vector> то будет еще быстрее Последний раз редактировалось Alex Lexcuk; 21.01.2009 в 15:42. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:29. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|