Pergunta

Eu tenho vindo a fazer uma aplicação simples e eu tenho um problema que eu não posso encontrar a solução (nem por que está acontecendo)

A coisa que eu quero fazer é adicionar dinamicamente uma tela contendo um botão para o aplicativo e, em seguida, eu quero a tela para ser movido a partir do lado esquerdo da tela para a direita.

Então, eu fiz o seguinte código

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

<mx:Script>
    <![CDATA[
        import mx.containers.Canvas;
        import mx.controls.Button;

        var ccanvas:Canvas = new Canvas();
        var canvasButton:Button = new Button();

        public function init():void{
            canvasButton.label="canvas Button";
            ccanvas.x=100;
            ccanvas.y=200;
            ccanvas.addChild(canvasButton);
            addChild(ccanvas);

            addEventListener(Event.ENTER_FRAME, onEnterFrame);

        }

        public function onEnterFrame(event:Event):void{
            ccanvas.x+=1;
        }

    ]]>
</mx:Script>


 </mx:Application>

E ele funciona muito bem. O próximo passo é em vez de usar os Canvas eu uso uma lona feita sob encomenda .. aqui é o componente CustomCanvas.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
     <mx:Button label="ccccButton" />
</mx:Canvas>

então eu alterar a seguinte linha de código

  var ccanvas:Canvas = new Canvas()  

      to

  var ccanvas:CustomCanvas = new CustomCanvas();

O resultado é que não há nenhuma tela exibida na tela ... o programa não faz nada ....

A coisa mais estranha é que, se eu não tenho uma função onEnterFrame e eu só adicionar minha tela personalizada para o método init () é sido exibidos corretamente. Mesmo se eu tiver um onEnterFrame, mas sem alterar o valor x das customCanvas que está sendo exibido corretamente. Mas o momento em que escrevo no

onEnterFunction o ccanvas.x código + = 1 o programa does not exibir qualquer coisa .... Mas se eu fizer isso com o objeto original da lona é tudo ok ,,,

O que está acontecendo aqui? Como eu posso fazer um objeto lona feita sob encomenda e, em seguida, ser capaz de movê-lo em um método onEnterFrame?

Obrigado !!!!!!

Foi útil?

Solução

problema pouco agradável. Parece que o processo de criação do componente está sendo curto-circuito de alguma forma, embora para ser honesto, eu não sei exatamente como.

No entanto, à espera dos CustomCanvas para despachar um evento creationComplete antes de tentar agir sobre suas propriedades de exibição (o que é uma boa prática, de qualquer maneira) corrige o problema. Veja abaixo, modificado para adicionar o ouvinte para creationComplete, e esperar até que o ouvinte é chamado para adicionar o enterFramelistener:

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

 <mx:Script>
  <![CDATA[

   import mx.events.FlexEvent;
   import mx.containers.Canvas;
   import mx.controls.Button;

   private var ccanvas:CustomCanvas  = new CustomCanvas();
   private var canvasButton:Button = new Button();

   public function init():void
   {
    canvasButton.label="canvas Button";
    ccanvas.x = 100;
    ccanvas.y = 200;
    ccanvas.addChild(canvasButton);

    ccanvas.addEventListener(FlexEvent.CREATION_COMPLETE, ccanvas_creationComplete);
    addChild(ccanvas);
   }

   private function ccanvas_creationComplete(event:FlexEvent):void
   {
    addEventListener(Event.ENTER_FRAME, onEnterFrame);
   }

   public function onEnterFrame(event:Event):void
   {
    ccanvas.x += 1;
   }

  ]]>
 </mx:Script>

 </mx:Application>

A verdade seja dita, porém, eu não tenho certeza qual é a diferença entre um mx: Canvas e seus derivados CustomCanvas neste caso, em termos de tempo; talvez alguém poderia dialogar sobre esse. Mas espero que a solução vai ser útil para você, e, novamente, é boa prática para Flex fazer a sua coisa componente de ciclo de vida antes de tentar trabalhar com seus componentes.

Espero que ajude!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top