在 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 class 绘制所有内容,然后将所有内容复制到屏幕缓冲区:
screenBuffer.copyPixels(myBitmap, new Rectangle(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), new Point(0,0));
(这只是相关的代码-我尽量删减了留下一个"Minimal, Complete, and Verifiable example")
现在我在项目中显示文本时遇到问题。我知道 TextField
是 flash.display.Sprite
的子 class,可以添加到 canvas。每当我尝试使用类似
的东西时
var txtHello:TextField = new TextField();
txtHello.text = "Hello World";
gamePanel.addChild(txtHello)
这要么没有任何改变(如果在 setup()
中使用,我假设我正在绘制它,否则它永远不会显示)或者导致黑屏(如果在 [=21= 中的任何地方使用) ], 我假设我正在创建无限精灵)。
我试过,创建一个名为 "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 class 派生的相同 addChild 方法,但实际上无法添加常规 Flash 内容 - Shape、Sprite、MovieClip , TextField, Bitmap - 直接。更重要的是,它们不会产生任何运行时错误,我个人认为它们完全可以避免混淆新人。
Flex 组件只能 addChild class 扩展基本 UIComponent class 的元素。同时,UIComponent可以addChild常规的Flash内容。因此,您可以按以下方式进行操作:
var proxyContainer:UIComponent = new UIComponent;
var txtHello:TextField = new TextField;
txtHello.text = "Hello World";
proxyContainer.addChild(txtHello);
gamePanel.addChild(proxyContainer);
我一直在使用 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 class 绘制所有内容,然后将所有内容复制到屏幕缓冲区:
screenBuffer.copyPixels(myBitmap, new Rectangle(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), new Point(0,0));
(这只是相关的代码-我尽量删减了留下一个"Minimal, Complete, and Verifiable example")
现在我在项目中显示文本时遇到问题。我知道 TextField
是 flash.display.Sprite
的子 class,可以添加到 canvas。每当我尝试使用类似
var txtHello:TextField = new TextField();
txtHello.text = "Hello World";
gamePanel.addChild(txtHello)
这要么没有任何改变(如果在 setup()
中使用,我假设我正在绘制它,否则它永远不会显示)或者导致黑屏(如果在 [=21= 中的任何地方使用) ], 我假设我正在创建无限精灵)。
我试过,创建一个名为 "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 class 派生的相同 addChild 方法,但实际上无法添加常规 Flash 内容 - Shape、Sprite、MovieClip , TextField, Bitmap - 直接。更重要的是,它们不会产生任何运行时错误,我个人认为它们完全可以避免混淆新人。
Flex 组件只能 addChild class 扩展基本 UIComponent class 的元素。同时,UIComponent可以addChild常规的Flash内容。因此,您可以按以下方式进行操作:
var proxyContainer:UIComponent = new UIComponent;
var txtHello:TextField = new TextField;
txtHello.text = "Hello World";
proxyContainer.addChild(txtHello);
gamePanel.addChild(proxyContainer);