Comunidad de diseño web y desarrollo en internet online

Problema con el tamaño de stage dictado por un menu dinamico

Citar            
MensajeEscrito el 24 May 2009 08:36 am
Hola Cristaleros!!!!!

Tengo un verdadero quebradero de cabeza con el tamaño stage y su escala en tiempo de ejecución. He visto varios hilos/tutoriales pero no me han servido de mucho(no se si habrá mas hilos de esto):

http://www.cristalab.com/tutoriales/flash-que-se-ajusta-a-la-ventana-con-diagramacion-liquida-+--stage-c174l/
http://foros.cristalab.com/cambiar-tamano-de-swf-incrustado-con-swfobject-en-ejecucion-t56141/

Os cuento mi problema:
-tengo un menu vertical dinámico en AS3 en el cual las opciones se definen leyendo una base de datos y cargando las N opciones q haya, eso supone un problema cuando el número de opciones supera el alto total del navegador o web o etiqueta, ya que dichas opciones son gestionadas desde un BACK-END por un usuario, entonces al construirse la pagina debería poder hacer algo como esto:

package {

import flash.display.Sprite;

public class MainWeb extends Sprite
{

public function MainWeb ()
{
stage.stageHeight += 400; // aki deberia poder incrementar el alto del tamaño de stage

}
}
}


- La referencia de Stage.stageHeight dice:
stageHeight property
stageHeight:int [read-write]

-tengo los estilos y offset de la web a 100%

¿ EXISTE ALGUNA FORMA DE HACER ESTO SIN USAR JAVASCRIPT, EL PRIMER FRAME DE STAGE O SIN KEDARSE CALVO EN EL INTENTO ? gracias espero vuestras respuestas... :cool:

Por AGCanibano

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 May 2009 02:24 pm
le estas pasando a la clase por el constructor alguna referencia del stage?

Por madescoces

15 de clabLevel



 

msie7
Citar            
MensajeEscrito el 25 May 2009 01:57 pm
No se desde donde... pero porque es un proyecto ActionScript en Flex Builder y no tengo ni dea desde donde llama Flex al constructor de mi clase... fijo que van por hay los tiros...

Por AGCanibano

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 May 2009 02:35 pm
También he probado a llevarme el proyecto a flash y desde el primer frame import la clase y llamo al constructor de mi clase main pasando la referencia stage como me has sugerido tal que asi:

import StageLiquida;

var web:StageLiquida = new StageLiquida(stage.stageHeight); // esta no me da error tipo estatic
-------------------------------------------------------------------------------------------------------------------------------------
var web:StageLiquida = new StageLiquida(Stage.stage.stageHeight); // con esta me da error de referencia como tipo estatico
var web:StageLiquida = new StageLiquida(Stage.stageHeight); // con esta me da error de referencia como tipo estatico

NO FUNCIONA NADA Jajajajajaj .... ¿ He puesto algo mal , se me escapa algo ?
Cosa es que no tendria que por que ser asi, ya que por la instacia de clase Stage.stage deberia dejarme, pienso que debe haber algun rollo estático en la construcción de la stage que no deja modificar en tiempo de ejecuion ... o bien me falta un brazo ajajaj ...

Por AGCanibano

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2009 01:41 am
Con la segunda te da error por que estas tratando de usar una propiedad de la clase Stage que no es estatica, siempre que empieza con mayúscula se refiere a la clase, por convención de AS3 (bah de todo lo que es programación).

Para aclarar esto facil es asi, las propiedades estaticas son solo disponibles a la clase, y pertenecen a la clase no a instancias

por eso si pones Stage.stageWidht te tira el error por que en ralidad stageWidht no es una propiedad static, sino que es una public comun y corriende, por lo cual se referencia en base a la propiedad stage, que es una asignacion del displayobject base, el root en dicha variable y es de tipo public comun y corriente, o sea no de la clase. para que te des una idea desde flash como pasar la referencia es asi:

la clase sería

package {
import flash.display.MovieClip;
import flash.display.Stage;

public class test extends MovieClip{
//constructor
private var _stageRef:Stage
public function test(stageRef:Stage){
_stageRef = stageRef;
trace(_stageRef.stageWidth);
}
}
}

y desde flash le pasas la referencia asi

var testeo:test = new test(stage);

si la pasaras asi

var testeo:test = new test(Stage);

pummmm error, yo le paso el stage entero como podes ver, despues desde la clase uso las propiedades que quiera

en flex ni idea como se hace esto mismo pero si no pasas la referencia desde la clase Stage de la propiedad stage no te va a funcionar nunca y ojo, poner Stage.stage es incorrectisisimisimimo

tenes que crear una variable de tipo Stage asi var myStage:Stage = new Stage(); y ahi haces esto myStage.stage.stageWidht, ojo que tampoco podes poner myStage.stage.widht por que te tira cualquier cosa, el ancho y alto del stage son por medio de stageWidht y stageHeight, espero que esto te sea útil.

Por madescoces

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2009 11:48 am
Antes de nada gracias por la ayuda :cool:

Si añades:
_refStage.stageWidth +=300;
... el alto de la stage se sigue manteniendo predefinidamente( he probado con StageScaleMode.SHOW_ALLy con todos por si acaso )

Tengo 2 posible soluciones:
1. Intentar modificar mediante JavaScript el tamaño del Objeto embebido con la escala que desee el codigo AS3.(lo que no queria hacer)
2. Intentar los mismo pero con una etiquites HTML (desde ya pienso que no va a funcionar esta)
3. Poner una bomba en Adobe System ejejejejej

ya te contaré... sigo indagando

Por AGCanibano

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2009 01:25 pm
Sabes que creo que el problema es el html que te hace con publish el flash, donde pone el widht y el height del objeto insertado de flash, estube jodiendo un rato con eso y vi que cambia el tamaño del reproductor flash, pero tambien cambia el zoom, habria que hacer algo en la aplicacion flash como para evitar ese problema. A lo que voy es que al estar seteado el alto y el ancho que deberia tener la aplicación flash en el html no te deja crecer de tamaño por que ella misma bloquea el crecimiento o el decrecimiento no se si me explique

Por madescoces

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 May 2009 08:14 am
Te has exlicado con suficiente claridad .... y CONSEGUIDO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

1. añade esto a tu archivo index.html,donde este el <object classid> que contiene al swf ,este javascript:

var tamano_stage = 600; // este por defecto

function definirTamanoStage(value)
{
confirm(tamano_stage); // tamaño por defecto
document.getElementById('stageLiquida').height = tamano_stage; // asingo
confirm("byID: " + document.getElementById('stageLiquida').height); // stageLiquida es el id que aparecerá en AC_FL_RunContent y <object classid>
}


2. en el mismo index.html busca y reeemplaza todo lo sea ...

"width", "100%",
"height", "100%";


... por (que te aperecerá en los AC_FL_RunContent y <object classid> ):

"width", "300", // esto es opcional
"height", tamano_stage,


3. Deja que se construya la página y despues añades:

ExternalInterface.call("definirTamanoStage",2000); // 2000px es el valor con el que te creeará el alto de página preferido


Conclusion: No quería hacerlo con javascript por que pierde portabilidad y no se hacerlo sin un html: desde una ejecución desde AIR quizás pudiera funcionar solo el swf con stage += 2000 ... y con FPlayer necesite de un html... QUIZAS ... jejejeejej gracias por la ayuda!!!!!!!!!!!!

_____________

CUENTAME QUE TAL TE FUE , ESPERO QUE NO TENGAS NIGÚN PROBLEMA :cool:

Por AGCanibano

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 May 2009 12:12 pm
PERDON, ME EQUIVOQUE EN UNA COSITA Y PUEDE SER QUE NO FUNCIONE

function definirTamanoStage(value)
{
confirm(tamano_stage); // tamaño por defecto
document.getElementById('stageLiquida').height = tamano_stage; // asingo
confirm("byID: " + document.getElementById('stageLiquida').height); // stageLiquida es el id que aparecerá en AC_FL_RunContent y <object classid>
}

es:

document.getElementById('stageLiquida').height = value; // es el parametro de la funcion definirTamanoStage(value)
que se le pasa.

Por AGCanibano

3 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.