Retroceder   Foros del Web > Diseño de Sitios web > Flash y Actionscript > Flex

Respuesta
 
Herramientas Desplegado
Antiguo 08-nov-2007, 18:21   #1 (permalink)
sabgto ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2007
Mensajes: 2
graphics dibuja fuera de área

He estado probando flex y creo que es un buen producto, sin embargo me he encontrado con un problema. Cuando hago un dibujo vectorial, por ejemplo una línea o un círculo, si el dibujo es muy grande o le hago un zoom, se sale del contenedor y se dibuja arriba de otros controles. He estado buscando en la red pero no he encontrado información sobre este problema, lo que me lleva a pensar que estoy haciendo algo mal. He aqui un ejemplo:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns="*"
xmlns:gr="pru.gr.*"
layout="absolute" creationComplete="initApp()">

<mx:Script>
<![CDATA[
import pru.gr.*;

public var fig:SSprite = new SSprite();;

public function initApp():void {

myCanvas.init();
myCanvas.addChild(fig);

}
]]>
</mx:Script>

<mx:HDividedBox x="10" y="10" width="678" height="427">
<mx:Panel width="193" height="426" layout="absolute">
<mx:Button x="19" y="21" label="Button" width="144"/>
</mx:Panel>
<gr:SCanvas width="200" height="426" id="myCanvas">
</gr:SCanvas>
</mx:HDividedBox>

</mx:Application>

************************************************** **
package pru.gr
{
import mx.core.UIComponent;
import flash.text.*;
import flash.geom.Matrix;

public class SCanvas extends UIComponent
{

public function SCanvas()
{
super();
}

public function init():void {
drawBounds();
}

public function drawBounds():void {
this.graphics.clear();

this.graphics.lineStyle(1.0, 0x000000, 1.0);
this.graphics.beginFill(0x808080, 1.0);
this.graphics.drawRect(0, 0, this.width, this.height);
this.graphics.endFill();
}
}
}
************************************************** **
package pru.gr
{
import flash.display.Sprite;

public class SSprite extends Sprite
{
public function SSprite()
{
super();

this.graphics.lineStyle(1.0, 0x000000, 1.0);
this.graphics.moveTo(-100, 50); // aquí hago la línea
this.graphics.lineTo(100, 100);
}
}
}
************************************************** **
La figura que dibujo, es una simple línea que se dibuja en un Sprite (fig) y luego se agrega a myCanvas (derivado de UIComponent).
Al lado izquierdo hay un panel con un botón y al lado derecho "myCanvas". La línea se dibuja sobre el botón y el panel. Se sale del sprite y se sale de myCanvas.

Si alguien me puede ayudar, se lo agradesco de antemano.
Saludos a todos.
sabgto está desconectado   Responder Citando
Antiguo 09-nov-2007, 15:55   #2 (permalink)
sabgto ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2007
Mensajes: 2
Re: graphics dibuja fuera de área

He descubierto algo.

1.- El objeto que se inserta a "Canvas", debe derivarse de UIComponent.
2.- El objeto debe tener ancho y alto (width/height).
3.- No se debe dibujar fuera de estos límites.

ejemplo:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
creationComplete="initApp()">

<mx:Script>
<![CDATA[

public var myObj:MObj;

public function initApp():void {
myObj = new MObj();
myObj.width = 200;
myObj.height = 200;
myObj.draw();

myCanvas.addChild(myObj);
}

public function movX():void {
myObj.x = sX.value;
}

]]>
</mx:Script>

<mx:Panel x="10" y="10" width="206" height="427" layout="absolute">
<mx:HSlider x="10" y="79" width="166" id="sX"
minimum="0" maximum="300" snapInterval="1" change="movX()"/>
</mx:Panel>
<mx:Canvas x="224" y="10" width="454" height="427" id="myCanvas" backgroundColor="#d5fffd">
</mx:Canvas>

</mx:Application>
************************************************** ***********
package
{
import mx.core.UIComponent;

public class MObj extends UIComponent
{
public function MObj() {
super();
}

public function draw():void {
this.graphics.clear();
this.graphics.lineStyle(2.0, 0xFF0000, 1.0);
this.graphics.drawRect(0, 0, this.width-1, this.height-1);
}
}
}
sabgto está desconectado   Responder Citando
Antiguo 30-nov-2007, 13:34   #3 (permalink)
SinguerInc está en el buen camino
 
Avatar de SinguerInc
 
Fecha de Ingreso: octubre-2007
Ubicación: Barcelona, España
Mensajes: 512
Re: graphics dibuja fuera de área

sabgto, no tiene nada que ver, un consejo nada mas, evita la palabra clave "this", no tiene sentido usarla en estos casos, dentro de una classe es inutil y fuerza al runtime a comprobar "this".
en el unico lugar donde tiene sentido es:

Código:
private function(a:String):void
{
this.a = a;
}
como la propiedad de la classe se llama igual al parametro de la funccion se necesita la palabra "this" para hacer la referencia al objeto en cuestion.

espero que sea de ayuda. saludos.
__________________
AS3 Blog / SinguerInc - Ningún derecho reservado - Nahuel Scotti
SinguerInc está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 03:23.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93