AS3(Adobe AIR / Flash)gotoAndPlay造成巨大的延迟,即使它只被调用一次?

时间:2011-12-30 22:44:17

标签: flash actionscript-3 air flash-cs4

我正在使用Adobe AIR在Flash CS4中创建一个AS3游戏。游戏变得太大而复杂,让我在这里分享完整的东西,但我会尝试解释我的问题。

我的游戏背景是动画水,它是游戏角色与游戏中其他实体分开的符号。当角色执行某些任务时,水动画需要跳到某个帧。这应该很简单:

water_background.gotoAndPlay(the_frame);

然而,由于某种原因,这会造成很多延迟,无论我使用它的机器如何。当gotoAndPlay发射时,大约有700毫秒的延迟,一切都冻结,然后当它出来时,所有的动画已经完成,水正在从适当的帧播放,但是用户错过了所有的漂亮的动画,因为游戏在它期间冻结。

我一直试图弄清楚这几个小时。我用谷歌搜索了我能想到的一切,但还没有找到答案。

我有点担心它可能是因为我的符号有大量帧...它是850帧。

有人能为我解释一下吗?

这是相关代码。这是为了响应用户的键盘操作而运行:

//the nearest frame to jump to in FRONT of the current frame, when something is succesfully eaten.
var nearest_clear_frame:int = 1; 
var curr_frame = water_background.currentFrame;
var i;
var skipped_frames:int = 0;
for(i = 0; i < clear_frames.length -1; i++) {


        var new_delta = (clear_frames[i]-curr_frame);
        var old_delta = (nearest_clear_frame-curr_frame);

        if((new_delta<old_delta || old_delta<0)&& new_delta >= 1){

            nearest_clear_frame = clear_frames[i];
            skipped_frames = nearest_clear_frame -curr_frame;

        }

}

water_background.gotoAndPlay(nearest_clear_frame);              

water_background是水背景的movieClip,大概是一个30秒的循环视频。

clear_frames的定义如下:

public var clear_frames:Array = [1, 109, 272, 413, 529, 690, 830];

clear_frames在一个单独的类中定义,但主代码所在的类是该单独类的扩展,所以我相信我应该有完全访问权限

非常感谢任何帮助,谢谢。

修改


gotoAndPlay(1)函数完全平滑,但其他一些框架没有,即使我手动输入它们而不是使用数组。

以下是该事物的大小报告:

turtle_game.swf Movie Report
-----------------------------

Metadata
--------
Bytes    Value
-----    -----
 1290    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/"> <xmp:CreatorTool>Adobe Flash CS4 Professional</xmp:CreatorTool> <xmp:CreateDate>2011-11-14T14:28:55-08:00</xmp:CreateDate> <xmp:MetadataDate>2011-12-31T12:34:19-08:00</xmp:MetadataDate> <xmp:ModifyDate>2011-12-31T12:34:19-08:00</xmp:ModifyDate> </rdf:Description> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"> <xmpMM:InstanceID>xmp.iid:DCA89ABBEE33E1119D5DF3032563A207</xmpMM:InstanceID> <xmpMM:DocumentID>xmp.did:DCA89ABBEE33E1119D5DF3032563A207</xmpMM:DocumentID> <xmpMM:OriginalDocumentID>xmp.did:2F1CC129100FE111B280DE374C2F22D4</xmpMM:OriginalDocumentID> <xmpMM:DerivedFrom rdf:parseType="Resource"> <stRef:instanceID>xmp.iid:B51A6ED0190FE111B280DE374C2F22D4</stRef:instanceID> <stRef:documentID>xmp.did:B51A6ED0190FE111B280DE374C2F22D4</stRef:documentID> <stRef:originalDocumentID>xmp.did:2F1CC129100FE111B280DE374C2F22D4</stRef:originalDocumentID> </xmpMM:DerivedFrom> </rdf:Description> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:format>application/x-shockwave-flash</dc:format> </rdf:Description> </rdf:RDF> 

Frame #    Frame Bytes    Total Bytes    Scene
-------    -----------    -----------    ----------------
      1        7792727        7792727    Scene 1 (AS 3.0 Classes Export Frame)
      2              2        7792729    
      3              2        7792731    
      4              2        7792733    
      5              2        7792735    
      6              2        7792737    

      ... i checked all of these and they are roughly identical ...

    837              2        7794399    
    838              2        7794401    
    839              2        7794403    
    840              2        7794405    

Scene                        Shape Bytes    Text Bytes    ActionScript Bytes
-------------------------    -----------    ----------    ------------------
Scene 1                                0             0                 49218

Symbol                       Shape Bytes    Text Bytes    ActionScript Bytes
-------------------------    -----------    ----------    ------------------
water_background2                      0             0                     0
water_background                       0             0                     0
background                             0             0                     0
gauge                                  0             0                     0
stage_mask                             0             0                     0
lose_screen                            0            68                     0
win_screen                             0            66                     0
gauge_mask                            38             0                     0
gauge                                  0             0                     0
gauge_shell                            0             0                     0
main_turtle2                           0             0                     0
Floating Turtle Frames 2               0             0                     0
Floating Turtle Frames                 0             0                     0
Floating Turtle Tweens                 0             0                     0
Floating Turtle Frames3                0             0                     0
item                                   0             0                     0
blf                                    0             0                     0
brf                                    0             0                     0
tlf                                    0             0                     0
trf                                    0             0                     0
body                                   0             0                     0
Tween 1                                0             0                     0
Tween 2                                0             0                     0
main_turtle                            0             0                     0

Font Name                 Bytes        Characters    
----------------------    ---------    --------------
TimesNewRomanPSMT              1633     !LWYnostu

ActionScript Bytes    Location
------------------    --------
             49218    Scene 1:Frame 1

Bitmap                     Compressed    Compression
-----------------------    ----------  --------  -----------
jelly.png                       4546      133056   JPEG Quality=80
bag.png                         6289      176148   JPEG Quality=80
6pack.png                       4730       57936   JPEG Quality=80
turtle.png                     40215     2743296   JPEG Quality=80
back left flipper               3524       56144   JPEG Quality=80
back right flipper              4664       63448   JPEG Quality=80
top left flipper                6228      123300   JPEG Quality=80
top right flipper               4407       69552   JPEG Quality=80
body                           18132      242740   JPEG Quality=80
Gauge-shell.png                10399      236160   JPEG Quality=80
portal.png                    215640     8294400   JPEG Quality=80
Outside Template              140809     7542720   JPEG Quality=80
Finish                          3510       39432   JPEG Quality=80
Start                           3303       39008   JPEG Quality=80
Shark A                         6454      115320   JPEG Quality=80
Shark B                         6360       96672   JPEG Quality=80
Shark C                         6275       96672   JPEG Quality=80
Red Boat                       10781      226872   JPEG Quality=80
Green Boat                     11601      241664   JPEG Quality=80
Yellow Boat                    12305      245504   JPEG Quality=80
Green Leatherback               3755       38352   JPEG Quality=80
Globe                         248169     5607360   JPEG Quality=80
Shadow                        507039     8294400   JPEG Quality=80
Dimpled Aluminum              489466     8294400   JPEG Quality=80
progress_meter.jpg             17398      558112   Imported JPEG=102

Video                       Compressed
------------------------    ----------
background.flv                  5933617

1 个答案:

答案 0 :(得分:0)

看起来代码中的任何内容都不是问题。听起来你有一些相当重的图像加载到某些帧上,或者有一些动作脚本在某些帧上创建对象。很难分享FLA,但有一个在线示例可以显示吗?

无论如何,如果您还没有这样做,请在“发布设置”中选中“生成大小报告”框。此选项会在与FLA相同的目录中生成一个文本文件(或者可能是SWF)。该报告中有大量数据,它可以分解帧,对象,时间等。

另外,不要在for循环中声明变量。另外,为所有变量赋予类型。这只是一种很好的做法。


编辑: 好的,看一下这个报告,你在第1帧中有一个巨大的加载(7792727字节),而在其他文件中没有任何内容。这看起来很像background.flv视频,以及一堆其他PNG图像。你可以尝试减小PNG的大小,但我认为最大的罪魁祸首是FLV视频。您可能正在寻求内部和SWF在FLV内寻求。这应该是一个快速的过程,但您可以尝试删除FLV进行测试。

如果这不是解决方案,那么您可能需要重新检查progress_meter.jpg上的嵌入。

除此之外,我必须看到AS3代码。您正在寻找的是对象实例化,对象删除和对象的远程加载(URLLoader等)。这将是消费者最大的时间。


编辑:我想我必须看到该文件才能理解它。您可以通过电子邮件发送到我创建的垃圾帐户:testdee@yahoo.com。