📄 model.as
字号:
/*******************ENGLISHproject: 3d engineby: ivan ivanoff (www.i2off.org)based on the work made by : stuart schoneveld (www.illogicz.com) email: avatar@i2off.orgapologies: to my wife and kids for supporting me. to jorge, valerialaura & mariano, for bothering them all the time. thx to valerialaura for the english translation--------------------ABOUT THIS CLASSit is instanciated to create a model--------------------ABOUT IT'S PUBLIC METHODS-setFreezable(f, mf, df, pf, pp) sets whether this model can be freezed when the freeze mode is activated or not. f: boolean indicating if it may be freezed mf: modifier of the global chances to be freezed df: not used now pf: not used now pp: not used now-setFX1(d, c, m) sets if FX1 can be performed on this model d: boolean. whether it is affected or not c: array. list of coord. indices affected by the FX1 (i.e: [0,1,3,6]) m: modifiier of the effect-setFX2(d, m) sets if FX2 can be performed on this model d: boolean. whether it is affected or not m: modifiier of the effect-setModColor(i, a, b) models allow every polygon to have a little colour variation. this method activates or deactivates this variation. i: boolean. activates or deactivates the variation. a: modifier of A colour b: modifier of B colour-setColor(r, g, b) colour setting for the model. r, g, b values for the three colour channels (0-255)-setAlpha(a) alpha setting for the model.-setCoordinates(px, py, pz) sets model coords. px, py and pz are the coords. over every axis.-getCoordinates() returns the coords. of the model on an object with x, y, and z properties.-setRotation(xr, yr) sets the model rotation. xr and yr are values for the rotation on both axis, in radians.-getRotation() returns rotation (in radians) of the model on an object with x and y properties.-rotateBy(xr,yr) increments rotation on xr and/or yr radians of the model.-addCoord(coord) adds a coord to the model. The coords. are the points to construct the polygonds. coord is an insatnce of the Coord class. returns the added coord. !every coord has an index of the order in which it was added. these indexes are zero based.-removeCoord(coord) removes a coord from the model. coord is an instance of Coord class.-addPolygon(poli) adds a polygon to the model. poli is an instance of Polygon class. polygons are lists of commands taking the coords as it's reference. they are like a description of how they should be drawn. returns the added polygon.-removePolygon(poli) removes a polygon that was added. poli is an instance of Polygon class.-onTicker () event to be overwritten. this event is called on each loop of the render. to activate the capture of this event is necesary to set doOnTicker property on true. --------------------ABOT IT'S PUBLIC PROPERTIES-isFreezable whether it's freezable or not.-modPorFrezar modifier of the global chances for being freezed.-doFX1 whether it is affected by FX1 or not.-coordsFX1 list of coords indexes affected by the FX1.-modFacFX1 modifier of the FX1-doFX2 whether it is affected by FX2 or not.-modFacFX2 modifier of the FX2-_layer layer to draw on models can be assigned to different layers. If a model is set in front of another but on an lower layer, it will be shown behind. layers are great for working with textures. (see addTexture on engine3D class)-modDepth lets you modified the depth index. this lets you have models above that should be seen below.-isColorVar whether every polygon may have colour variations or not.-modColorA modifier of A colour.-modColorB modifier of B colour.-doOnTicker whether it will receive the onTicker event or not.-properties if you want to have other properties on this method, they should be placed in this object. --------------------HOW TO USE-it's reccomended to make a method to create the model, set it's properties, add coordinates and polygons.function square(){ var mo = new Model() //coord 0 mo.addCoord(new Coord(0, 0, 0)); //coord 1 mo.addCoord(new Coord(50, 0, 0)); //coord 2 mo.addCoord(new Coord(50, 50, 0)); //coord 3 mo.addCoord(new Coord(0, 50, 0)); var ld = []; ld.push([0, 'moveTo']); ld.push([1, 'lineTo']); ld.push([2, 'lineTo']); ld.push([3, 'lineTo']); ld.push([0, 'lineTo']); mo.addPolygon(new Polygon(ld)); return mo}////////////////////////ESPANOLproyecto: engine 3dpor: ivan ivanoff (www.i2off.org)basado en el trabajo de: stuart schoneveld (www.illogicz.com) email: avatar@i2off.orgperdones: A mi mujer e hijos por aguantar. A jorge, valeria y mariano, por joderlos a cada rato. --------------------ACERCA DE ESTA CLASEEsta es instanciada para crear un modelo.--------------------ACERCA DE SUS METODOS PUBLICOS-setFreezable(f, mf, df, pf, pp) si este modelo puede ser freezado cuando esta activado el modo correspondiente. f: booleano que indica si puede ser freezado o no mf: modificador de las posibilidades globales de ser freezado df: inhabilitado pf: inhabilitado pp: inhabilitado-setFX1(d, c, m) si sobre este modelo se puede efectuar el efecto FX1 d: booleano que indica si puede ser afectado o no c: lista con los indices de coordenadas a las que afecta el FX1 (ej: [0,1,3,6]) m: modificador del factor de efecto-setFX2(d, m) si sobre este modelo se puede efectuar el efecto FX2 d: booleano que indica si puede ser afectado o no m: modificador del factor de efecto-setModColor(i, a, b) los modelos permiten que cada uno de sus polygonos tengan una pequenia variacion de color. Este metodo activa o desactiva esa variacion i: booleano que activa o desactiva la variacion de color a: modificador de color A b: modificador de color B-setColor(r, g, b) seteo de color del modelo. R G B son los valores de cada canal de color (0-255)-setAlpha(a) seteo del alpha del modelo.-setCoordinates(px, py, pz) setea las coordenadas del modelo. PX PY PZ son las coordenadas sobre cada eje-getCoordinates() devuelve las coordenadas del modelo en un objeto modelado asi {x,y,z}-setRotation(xr, yr) setea la rotacion del modelo. XR YR es la rotacion sobre los ejes en radianes-getRotation() devuelve la rotacion (en radianes)del modelo en un objeto modelado asi {x,y}-rotateBy(xr,yr) incrementa la rotacion en XR y/o YR radianes del modelo-addCoord(coord) agrega una coordenada al modelo. Las coordenadas son los puntos sobre los que se arman los poligonos. Coord es una instancia de la clase Coord(). devuelve la coordenada ya agregada. !Cada coordenada, tiene un indice generado por el orden en el que son agregadas. Asi la primera coordenada es el indice 0-removeCoord(coord) remueve una coordenada. Coord es una instancia de la clase Coord()-addPolygon(poli) agrega un poligono al modelo. Poli es una instancia de Polygon(). Los poligonos son listas de comandos que toman como referencia a las coordenadas. Se podria decir que son una descripcion de como deben dibujarse. Devuelve el poligono ya agregado-removePolygon(poli) remueve un poligono previamente agregado. Poli es una instancia de Polygon().-onTicker () evento para ser sobreescrito. Este evento es llamado con cada vuelta del render del engine. Para activar la captura de este evento hay que setear la propiedad doOnTicker en true --------------------ACERCA DE SUS PROPIEDADES PUBLICAS-isFreezable si es freezable o no-modPorFrezar modificador de las posibilidades globales de ser freezado-doFX1 si puede ejecutar el efecto FX1-coordsFX1 lista de indices de coordenadas que se ven afectadas por el FX1-modFacFX1 modificador del factor de efecto de FX1-doFX2 si puede ejecutar el efecto FX2-modFacFX2 modificador del factor de efecto de FX2-_layer layer en el que es dibujado Uno puede asignar modelos a distintos layers. Teniendo en cuenta que a si un objeto esta ubicado delante de otro, pero en un layer inferior, se ve por detras. Los leyers son optimos para el trabajo con texturas (ver addTexture de la clase engine3d())-modDepth permite modificar el indice de depth. Esto permite tener modelos delante que en verdad deberian ir detras-isColorVar si cada poligono puede variar su color-modColorA indice de modificacion de color A-modColorB indice de modificacion de color B-doOnTicker si recive el evento onTicker()-properties si quiero que este metodo contenga propiedades propias se las debo volcar aqui. --------------------MODO DE USO-es recomendable crear un metodo que cree el modelo, setee todas sus propiedades, agregue las coordenadas y agregue los poligonos. Por ejemplo:function cuadrado(){ //creo la instancia de modelo var mo = new Model() //creo las coordenadas //coord 0 mo.addCoord(new Coord(0, 0, 0)); //coord 1 mo.addCoord(new Coord(50, 0, 0)); //coord 2 mo.addCoord(new Coord(50, 50, 0)); //coord 3 mo.addCoord(new Coord(0, 50, 0)); //seteo propiedades isColorVar = true modColorA = 10 modColorB = 10 //creo el poligono var ld = []; ld.push([0, 'moveTo']); ld.push([1, 'lineTo']); ld.push([2, 'lineTo']); ld.push([3, 'lineTo']); ld.push([0, 'lineTo']); mo.addPolygon(new Polygon(ld)); return mo}*******************/class Model { var _id; var coords:Object; var polygons:Array; var isFreezable:Boolean = false; var isFreezado:Boolean = false; var modPorFrezar:Number = 5; var doPoligonoF:Boolean = false; var polygonF:Object = null; //poligonF no existe mas, no es necesario, porque ahora usa comandos dentro del poligono var porPoligF:Number = 1; var doFX1:Boolean = false; //: si puede verse afectado por el FX1 var coordsFX1; //: que coordenadas se ven afectadas por el FX1, debe ser un array var modFacFX1 = 30; //: modificador para el indice de FX1 var doFX2:Boolean = false; //: si puede verse afectado por el FX2 var modFacFX2 = 30; //: modificador para el indice de FX2 var isDisplayed:Boolean = false; //: si esta visible o no, es para saber de una vuelta a otra del render var _layer:Number = 0; //: a que layer pertenece, si al normal o a uno de mascara, esto es para cuando se hace el attach para el poligono var modDepth:Number = 100000; //: por si quiero modificar con un indice el depth en el que va a estar el objeto var isColorVar:Boolean = false; //:si el color es varible var modColorA:Number = 10; //: var modColorB:Number = 5; //:los dos indices para ver si varia color var doOnTicker:Boolean; //: funcion a hacer en cada ticker (u on enterFrame) var _centro:Object; //no va esto, en verdad van el x y z //: la coordenada del centro, para hacer los calculos de posicion (y mas adelante de colicion) var x; var y; var z; var xrot; var yrot; var red; var green; var blue; var alpha; var contenedor; var CoordsIds = 0; var PolygonsIds = 0; var properties:Object //un contenedor para setear variables function Model(isf, mpf, dof, pf, ppf, df1, cf1, mf1, df2, mf2, l, md, isc, mca, mcb, dot) { coords = new Object() //_id = _global.3DengineRun//.idModels++ _id = _global.engine3DRun.idModels++; polygons = new Array(); setCoordinates(0, 0, 0); setRotation(0, 0); setColor(255, 0, 0); setAlpha(100); properties = new Object() isf != undefined && isf != null ? isFreezable=isf : null; mpf != undefined && mpf != null ? modPorFrezar=mpf : null; dof != undefined && dof != null ? doPoligonoF=dof : null; pf != undefined && pf != null ? polygonF=pf : null; ppf != undefined && ppf != null ? porPoligF=ppf : null; df1 != undefined && df1 != null ? doFX1=df1 : null; cf1 != undefined && cf1 != null ? coordsFX1=cf1 : null; mf1 != undefined && mf1 != null ? modFacFX1=mf1 : null; df2 != undefined && df2 != null ? doFX2=df2 : null; mf2 != undefined && mf2 != null ? modFacFX2=mf2 : null; l != undefined && l != null ? _layer=l : null; md != undefined && md != null ? modDepth=md : null; isc != undefined && isc != null ? isColorVar=isc : null; mca != undefined && mca != null ? modColorA=mca : null; mcb != undefined && mcb != null ? modColorB=mcb : null; dot != undefined ? doOnTicker=dot : null; } function setFreezable(f, mf, df, pf, pp) { if (typeof (f) == "boolean") { isFreezable = f; } if (typeof (df) == "boolean") { doPoligonoF = f; } if (mf != null && mf != undefined) { modPorFrezar = mf; } if (pf != null && pf != undefined) { polygonF = pf; } if (pp != null && pp != undefined) { porPoligF = pp; } } function setFX1(d, c, m) { if (typeof (d) == "boolean") { doFX1 = d; } if (c != null && c != undefined) { coordsFX1 = c; } if (m != null && m != undefined) { modFacFX1 = c; } } function setFX2(d, m) { if (typeof (d) == "boolean") { doFX2 = d; } if (m != null && m != undefined) { modFacFX2 = m; } } function setModColor(i, a, b) { if (typeof (i) == "boolean") { isColorVar = i; } if (a != null && a != undefined) { modColorA = a; } if (b != null && b != undefined) { modColorB = b; } } function setColor(r, g, b) { red = r; green = g; blue = b; } function setAlpha(a) { alpha = a; } function onAdd(parent) { contenedor = parent.depositoGrafico; for (var i in polygons) { var p = polygons[i]; var l = contenedor["layer"+_layer]; var idn = l.ids++; p.mc = l.attachMovie("PolygonBase", "p"+idn, idn); p.mc.model = this } for (var i in polygonF) { var p = polygonF[i]; var l = contenedor["layer"+_layer]; var idn = l.ids++; p.mc = l.attachMovie("PolygonBase", "p"+idn, idn); p.mc.model = this } //despues hacerlo sobre polygonF var c = coords; for (var i in c) { c[i].update(); } } function onRemove() { var f = polygons; for (var i in f) { removeMovieClip(f[i].mc); } var f = this.polygonF; for (var i in f) { removeMovieClip(f[i].mc); } } function setCoordinates(px, py, pz) { x = px; y = py; z = pz; for (var i in coords) { coords[i].modelMoved(); } } function getCoordinates() { return {x:x, y:y, z:z}; } function setRotation(xr, yr) { xrot = xr; yrot = yr; for (var i in coords) { coords[i].modelRotated(); } } function getRotation() { return {x:xrot, y:yrot}; } function rotateBy(xr, yr) { setRotation(xrot+xr, yrot+yr); } function addCoord(coor) { coor._id = CoordsIds++; coords[coor._id] = coor; coor.parent = this; coor.update(); return coor; } function removeCoord(coor) { delete coords[coor._id]; } function addPolygon(poli) { poli._id = PolygonsIds++ polygons[poli._id] = poli; poli.parent = this; return poli; } function removePolygon(poli) { delete polygons[poli._id]; } function addPolygonF(poli) { poli._id = PolygonsIds++; polygonF[poli._id] = poli; poli.parent = this; return poli; } function removePolygonF(poli) { delete polygonF[poli._id]; } function onTicker () {}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -