Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphics 如何在OpenFL中应用图形转换_Graphics_Transformation_Haxe_Openfl - Fatal编程技术网

Graphics 如何在OpenFL中应用图形转换

Graphics 如何在OpenFL中应用图形转换,graphics,transformation,haxe,openfl,Graphics,Transformation,Haxe,Openfl,我正在将JavaScript库转换为Haxe。在此库中,有一个由许多形状构成的动画效果。所以我用这个库来渲染形状 但是现在我遇到了一个关于转换的技术问题。 某些形状具有子形状,因此其变换也应应用于子形状。 例如,请想象shapeC连接在shapeB上,shapeB和shapeD也连接在shapeA上。在这种情况下,shapeB、shapeD应通过transformA和它们自己的变换进行变换,shapeC也应通过transformA、transformB和transformC进行变换 要实现这一点

我正在将JavaScript库转换为Haxe。在此库中,有一个由许多形状构成的动画效果。所以我用这个库来渲染形状

但是现在我遇到了一个关于转换的技术问题。 某些形状具有子形状,因此其变换也应应用于子形状。 例如,请想象shapeC连接在shapeB上,shapeB和shapeD也连接在shapeA上。在这种情况下,shapeB、shapeD应通过transformA和它们自己的变换进行变换,shapeC也应通过transformA、transformB和transformC进行变换

要实现这一点,在一个图形中渲染相同级别的形状并将父图形的变换应用于该图形是否是一个好的解决方案?(在上面的示例中,将shapeB和shapeB渲染为一个图形,并将transformA应用于该图形)

我认为从所有父变换计算最终变换并将其应用于该形状的所有顶点不是一个好的优化解决方案。请告诉我渲染的最佳优化解决方案。 欢迎提出任何建议


如果在这个问题上有什么不明白的地方,请原谅,让我检查一下。

您可以使用
Sprite
类:

var parentShape=newsprite();
parentShape.graphics.beginll(0xFF0000);
parentShape.graphics.drawRect(0,0,100,100);
var childShape=newsprite();
childShape.graphics.beginll(0x00FF00);
childShape.graphics.drawCircle(0,0,50);
childShape.x=200;
childShape.y=200;
parentShape.addChild(childShape);
addChild(parentShape);
每个形状都将使用自己的画布元素,因此,如果您创建了许多形状,您可能会在准备就绪时决定将其展平为单个图像。这可以使用
cacheAsBitmap
bitmapData.draw

parentShape.cacheAsBitmap=true;
…或


嗨,约书亚。谢谢你的回答。但我想应用完全变换,而不仅仅是位置。另一方面,移动位置,缩放和旋转矩阵。另外,我也不确定使用这么多精灵来实现动画效果是否有效。这将被用来显示一些效果,只有一个精灵像烟花爆炸,打开礼品盒,动画标志等。很抱歉让人困惑,你能再帮我编辑一下答案吗?Regardsy您可以使用
childShape.rotation
属性(除了
scaleX
/
scaleY
),也可以使用
childShape.transform.matrix=new matrix()使用您需要的任何变换。另一个选项(性能)是使用
bitmapData.draw
,然后是
Tilemap
Hi,Joshua。我已经成功地用Sprite类实现了转换。因此,所有形状都设置在正确的位置。但现在我仍然有GPU内存泄漏问题,即使我尝试了你的两个建议(缓存和位图数据)。因为这是动画,所以所有形状都将在每个帧中重新绘制(0.03秒内一帧)。因此,它将GPU内存增加到200MB以上,动画看起来被卡住了。但在原来的JS库中,对于相同的示例,它的容量只有15MB。所以我相信有一个确切的方法来优化GPU内存使用。你有什么建议吗?RegardsOpenFL目前在软件中绘制形状。在HTML5上,这就是画布。每个
sprite.graphics
都有自己的画布元素(如果可以绘制)。是否可以将形状组合成一个图形对象?这仍然不会对形状使用WebGL,但项目的其余部分(至少)可以加速。我认为,GPU内存泄漏的主要原因是在短时间内生成了如此多的精灵。我将尝试直接在父图形上绘制子图形。在这种情况下,在图形上应用变换的主要问题将再次出现,但我认为这是最好的解决方案。
removeChild (parentShape);

var bitmapData = new BitmapData (Math.ceil (parentShape.width), Math.ceil (parentShape.height), true, 0);
bitmapData.draw (parentShape);
var bitmap = new Bitmap (bitmapData);
addChild (bitmap);