Hola, estoy intentando hacer un calendario semanal usando POO. De momento sólo estoy haciendo pruebas de visualización en pantalla de una semana, sin funcionalidad ni nada, pero ya estoy tropezándome.
He creado dos clases: Dia, que dibuja un recuadro con un ancho dado y un campo de texto con el día de la semana especificado, y Semana, que debe calcular su ancho al 90% con respecto al clip que lo contiene (el clip ppal), crear 7 objetos de la clase Dia y colocarlos secuencialmente de forma horizontal.
Os pongo el código que he hecho a ver si podeis ayudarme:
Código PHP:
class Dia {
private var ancho:Number;
private var recuadro:MovieClip;
private var campoTexto:TextField;
public function Dia(textoDia:String, ancho:Number, posX:Number, posY:Number, padre:MovieClip) {
recuadro = padre.createEmptyMovieClip("dia", padre.getNextHighestDepth());
recuadro._x = posX;
recuadro._y = posY;
dibujarRecuadro(ancho);
anyadirCampoTexto(textoDia);
}
private function dibujarRecuadro(ancho:Number) {
recuadro.lineStyle(1,0x0000cc,100);
recuadro.beginFill(0xcccccc,100);
recuadro.moveTo(0,0);
recuadro.lineTo(ancho,0);
recuadro.lineTo(ancho,50);
recuadro.lineTo(0,50);
recuadro.lineTo(0,0);
recuadro.endFill();
}
private function anyadirCampoTexto(texto:String) {
var anchoCampoTexto:Number = recuadro._width*90/100;
trace('Ancho dia: ' + recuadro._width + ', Ancho Campo Texto: ' + anchoCampoTexto);
var posicionX:Number = (recuadro._width - anchoCampoTexto) - (recuadro._width - anchoCampoTexto)/2;
campoTexto = recuadro.createTextField('textoDia', recuadro.getNextHighestDepth(), posicionX, 20, anchoCampoTexto, 20);
campoTexto.text = texto;
campoTexto.background = true;
campoTexto.backgroundColor = 0xffffff;
}
}
Código PHP:
class Semana {
private var ancho:Number;
private var listaDias:Object;
public function Semana(padre:MovieClip) {
var arrayDeDias:Array = new Array('lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo');
ancho = calcularAncho(padre);
trace('Ancho semana: ' + ancho);
var anchoDia:Number = calcularAnchoDia(arrayDeDias.length);
trace('Ancho dia: ' + anchoDia);
poblarSemana(anchoDia, arrayDeDias, padre);
}
private function calcularAncho(padre:MovieClip):Number {
return padre._width*90/100;
}
private function calcularAnchoDia(numDias:Number):Number {
return ancho/numDias;
}
private function poblarSemana(anchoDia:Number, dias:Array, padre:MovieClip) {
listaDias = new Object();
var diaActual:Dia;
listaDias.dias = dias;
listaDias.contenedorDias = new Object();
for (var i:Number = 0; i < dias.length; i++) {
var nombreDiaActual:String = dias[i];
diaActual = new Dia(nombreDiaActual, anchoDia, anchoDia*i, 0, padre);
listaDias.contenedorDias[nombreDiaActual] = diaActual;
}
trace(listaDias);
}
}
Línea tiempo ppal, donde comienza la ejecución:
Código PHP:
var miSemana:Semana = new Semana(this);
El error parece que empieza casi desde el principio, al intentar calcular el ancho que deberá tener el objeto de clase Semana en base al ancho del clip que lo contiene, en este caso el clip principal o _root que le paso como argumento mediante this. El ancho obtenido me da 0.
Sólo teneis que fijaros en el constructor de Semana y el método calcularAncho() porque el error debe estar ahí.
Por lo demás, he hecho pruebas con la clase Dia unicamente, y me funciona bien. P.ej:
Código PHP:
var miDia:Dia = new Dia("sabado",100,0,0,this);
funciona perfectamente.