我正在尝试做一个像这样消失的星球大战类型的事情,但是以编程方式。
他们所做的大部分工作都很容易编程(制作补间动画),但我也希望以编程方式生成基于文本的图形(例如,使用动态文本 obj 从文本生成)。
问题,正如我所看到的(但我当然愿意以其他方式看待它)是:有没有办法从我的动态文本对象中获得一个斜边矩形?这里提到的scale9grid不会这样做,我很确定。我想指定四个点来获得一个菱形(如果这就是它的名字)。
我正在尝试做一个像这样消失的星球大战类型的事情,但是以编程方式。
他们所做的大部分工作都很容易编程(制作补间动画),但我也希望以编程方式生成基于文本的图形(例如,使用动态文本 obj 从文本生成)。
问题,正如我所看到的(但我当然愿意以其他方式看待它)是:有没有办法从我的动态文本对象中获得一个斜边矩形?这里提到的scale9grid不会这样做,我很确定。我想指定四个点来获得一个菱形(如果这就是它的名字)。
如果您正在为 flash player 10 编译(需要 CS4 或最近的 flex sdk),您可以在 3d 中旋转文本字段:
text.rotateX = -45;
这还有一些问题,例如您需要使用字体嵌入,以及在字段中心获取消失点。
如果您是自虐狂,并且不介意一些垂直锯齿,那么在小于 10 的 Flash 播放器中使用位图执行此操作也是可能的。这个想法是使用 BitmapData.draw() 来绘制每条线,高度为 1 的剪切矩形和一个变换来进行透视分割。例如(弹性):
class Main extends Sprite
{
[Embed(systemFont="Arial", fontName="embedFont", mimeType="application/x-font")]
var embedFont:Class;
public function Main()
{
var text:TextField = new TextField();
text.defaultTextFormat = new TextFormat("embedFont", 30);
text.embedFonts = true;
text.autoSize = TextFieldAutoSize.LEFT;
text.text = "Hello, world\nHow nice\nto have\nmultiple\nlines!";
var bmp:BitmapData = new BitmapData(150, 100);
for (var i:int = 0; i != bmp.height; ++i) {
var m:Matrix = new Matrix();
// x-division, change 0.8, 0.2 to change scale increase, scale at top
m.a = i*(0.8/bmp.height)+0.2;
// horizontal center
m.tx = bmp.width * (1-m.a) / 2;
// y-division, and align text to bottom
m.ty = (bmp.height-i)/m.a - bmp.height;
bmp.draw(text, m, null, null, new Rectangle(0, i, bmp.width, 1));
}
addChild(new Bitmap(bmp));
}
}
I haven't done the maths, so I don't know if that's physically accurate, but it should give you an idea.
您可能会考虑将文本对象转换为图像,然后对图像执行此操作。
-亚当
在 Flash Player 9 和更早的版本中,您无法以简单的方式真正做到这一点。
Flash player 10 和 Flash CS4 引入了对 3D 转换的一些基本支持,但这些都非常简单,我想这种“极端”视角可能很难正确处理。但是我没有使用 CS4 创作工具,所以在那里可能更容易。
还有像papervision和away3d这样的完整 3D 引擎,尽管它们有点矫枉过正。
我认为最好的方法是使用DisplacementMapFilter,我很难在网上找到任何好的例子,而且我自己从来没有真正做过,但我认为文档中的例子应该让你开始就好了。
如果您愿意,您也可以将所有像素绘制到位图并一个一个地处理它们,这可能是编码最有趣的事情,但它可能会很慢而且看起来不太好;)