我正在使用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
答案 0 :(得分:0)
看起来代码中的任何内容都不是问题。听起来你有一些相当重的图像加载到某些帧上,或者有一些动作脚本在某些帧上创建对象。很难分享FLA,但有一个在线示例可以显示吗?
无论如何,如果您还没有这样做,请在“发布设置”中选中“生成大小报告”框。此选项会在与FLA相同的目录中生成一个文本文件(或者可能是SWF)。该报告中有大量数据,它可以分解帧,对象,时间等。
另外,不要在for循环中声明变量。另外,为所有变量赋予类型。这只是一种很好的做法。
编辑:
好的,看一下这个报告,你在第1帧中有一个巨大的加载(7792727字节),而在其他文件中没有任何内容。这看起来很像background.flv
视频,以及一堆其他PNG图像。你可以尝试减小PNG的大小,但我认为最大的罪魁祸首是FLV视频。您可能正在寻求内部和SWF在FLV内寻求。这应该是一个快速的过程,但您可以尝试删除FLV进行测试。
如果这不是解决方案,那么您可能需要重新检查progress_meter.jpg
上的嵌入。
除此之外,我必须看到AS3代码。您正在寻找的是对象实例化,对象删除和对象的远程加载(URLLoader等)。这将是消费者最大的时间。
编辑:我想我必须看到该文件才能理解它。您可以通过电子邮件发送到我创建的垃圾帐户:testdee@yahoo.com。