繁体   English   中英

在Flex,ActionScript 3中动态显示文本

[英]Dynamically display text in Flex, ActionScript 3

我在使用Flex SDK 4.6在ActionScript 3中显示文本时遇到了问题。 我尝试的任何方法都不会导致更改或黑屏。 这是我的项目代码和尝试。

MyProject.mxml简单来说就是mx:Application标签,其中的相关部分是

<mx:Script>
<![CDATA[
  include "MyProject.as"; //simply running my project file
]]>
</mx:Script>

<mx:Canvas id="gamePanel" x="0" y="0" width="100%" height="100%"/> //defining the canvas

在MyProject.as中

import flash.display.*; 
import flash.events.*;
import mx.events.*;
import mx.controls.*;

import Game;

public static const SCREEN_WIDTH:int = 960;
public static const SCREEN_HEIGHT:int = 720;
private var initializationCompleted:Boolean = false;
public var screenBuffer:BitmapData;
public var game:Game;

public function setup():void {
    screenBuffer = new BitmapData(SCREEN_WIDTH, SCREEN_HEIGHT, false, 0x00000000);
    game = new Game(SCREEN_WIDTH, SCREEN_HEIGHT, screenBuffer);
    initializationCompleted = true;
}

private function updateFrame():void {
    if (!initializationCompleted) {
        return;
    }

    draw();

    gamePanel.graphics.clear();
    gamePanel.graphics.beginBitmapFill(screenBuffer, null, false, false);
    gamePanel.graphics.drawRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
    gamePanel.graphics.endFill();
}

private function draw():void {
    game.update();
}

在Game.as中,我仅使用BitmapData类绘制所有内容,然后将所有内容复制到screenBuffer中:

screenBuffer.copyPixels(myBitmap, new Rectangle(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), new Point(0,0));

(这只是相关的代码-我尽可能地修剪,以留下“最小,完整和可验证的示例”)

现在,我在项目中显示文本时遇到了问题。 我知道TextFieldflash.display.Sprite的子类,可以将其添加到画布。 每当我尝试使用类似

var txtHello:TextField = new TextField();
txtHello.text = "Hello World";
gamePanel.addChild(txtHello)

这要么不改变任何内容(如果在setup() ,我假设我在其上绘制,否则就永远不显示),或者导致黑屏(如果在updateFrame()任何地方使用,我假设我在创建无限精灵)。

我尝试改为使用内容创建一个名为“ TextWithImage.as”的新文件。

//this is ripped off the adobe help page
package { 
    import flash.display.Sprite; 
    import flash.text.*; 

    public class TextWithImage extends Sprite { 
        private var myTextBox:TextField = new TextField(); 
        private var myText:String = "Hello World"; 

        public function TextWithImage() { 
            addChild(myTextBox); 
            myTextBox.text = myText; 
        } 
    } 
}

将其导入MyProject.as,然后将其用作

gamePanel.addChild(new TextWithImage());

和我以前的尝试一样。

在Flex / AS3中显示文本的最简单方法是什么? 感谢您的帮助,并在此先感谢您!

有个把戏。 Flex组件虽然具有从DisplayObjectContainer类派生的相同addChild方法,但实际上不能直接添加常规Flash内容-Shape,Sprite,MovieClip,TextField,Bitmap-。 更重要的是,它们不会产生任何运行时错误,我个人认为它们完全不能使新人感到困惑。

Flex组件只能添加扩展基本UIComponent类的addChild类。 同时, UIComponent可以添加Child常规Flash内容。 因此,您可以执行以下操作:

var proxyContainer:UIComponent = new UIComponent;
var txtHello:TextField = new TextField;

txtHello.text = "Hello World";
proxyContainer.addChild(txtHello);

gamePanel.addChild(proxyContainer);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM