我正在尝试制作用于旋转DisplayObjects的精灵表,似乎gotoAndStop()调用无效。
这是一个正在发生的事情的例子:
function createRotationalSpriteSheet ( displayObject : DisplayObject )
{
findMaxTileDimensions( displayObject );
MovieClip( displayObject ).gotoAndStop( 1 ); // this call does not work.
}
function findMaxTileDimensions ( displayObject : DisplayObject )
{
MovieClip( displayObject ).gotoAndStop( 1 ); // this call works fine
}
对于不起作用的gotoAndStop调用,标签和帧编号会更新,但是当我尝试使用BitmapData.draw绘制DisplayObject时,框架仍然卡在它被告知去的最后一帧上findMaxTileDimensions函数。
这是否发生是因为我在一个输入框架中多次调用gotoAndStop函数?是不是因为我在同一个输入框架中从两个不同的函数调用gotoAndStop?
答案 0 :(得分:2)
这里似乎发生了一些事情。您正在使用gotoAndStop(),但在之后发生其他所有事情之后,才会更新图像。从文档 - http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/MovieClip.html#gotoAndStop() - “将播放头带到影片剪辑的指定帧并在那里停止。这在帧中的所有剩余操作都已完成执行后发生。”因此,如果您希望这样做,那么您需要在多个帧上执行此操作。
其次,你提到这是为了整理DisplayObjects的旋转以将它们绘制为BitmapData - 在MovieClip中是否有动画?或者是MovieClip旋转的动画。如果它是后者,那么通过代码设置旋转并绘制不同的角度将会起到你正在尝试的作用(即在一帧中全部)
还可以通过bit101查看SWFSheet:http://www.bit-101.com/blog/?s=swfsheet。它是为了拍摄动画并导出PNG精灵。那里可能有代码,我不确定。在任何情况下,您都可以保存您的动画,然后将其嵌入/加载到
中答案 1 :(得分:1)
这听起来好像是AIR中的这个已知错误(假设它只发生在AIR中): https://bugbase.adobe.com/index.cfm?event=bug&id=3340012
错误报告提到了一个hacktastic解决方法,我刚验证了它确实有效:在运行之前将MovieClip添加到舞台上。你可以在完成后删除它。
或者,您可以将MovieClip实例化两次(一次获取尺寸,然后一次创建BitmapDatas),或者在MovieClip的开头添加一个空虚拟框架并忽略第一帧。
答案 2 :(得分:-1)
这里发生了两件事。主要问题是gotoAndStop是基于1的,而不是基于0的。 gotoAndStop(0)不会生成错误,因为它期望一个对象(因此它可以采用标签或帧号)。
由于遗留原因,gotoAndStop是基于1的 - 即与Flash IDE中旧的处理方式相关联。如果将此更改为基于1的系统仍然不起作用,则需要添加framescript(基于0),请参阅我的答案
答案 3 :(得分:-1)
作为一个更好的用例,我认为最好使用位图,然后将其缓存在某些数据结构中:
读这个:
http://www.8bitrocket.com/2010/3/3/Tutorial-AS3-How-to-Blit-an-animation-from-a-tile-sheet-embedded-at-compile-time/
另外,也许我不是100%清楚这个问题,但为什么你需要使用enterframe来创建精灵表呢?
您可以旋转位图然后将其捕获为位图数据,或者只是对位图数据使用矩阵变换
http://www.8bitrocket.com/2010/05/01/tutorial-exploring-the-as3-bitmap-class-lesson-3-scale-from-the-center-with-a-matrix/