Я создаю игру в AS3, во Flash CS4, с помощью Adobe AIR. Игра стала слишком большой и сложной, чтобы я мог рассказать о ней в полной мере, но я попытаюсь объяснить мою проблему.
Фон моей игры - анимированная вода, и он является символом, отдельным от игрового персонажа и других существ в игре. Когда персонаж выполняет определенные задачи, водная анимация должна перейти к определенному кадру. Это должно быть действительно легко:
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
- это мувиклип с фоновым изображением воды, примерно 30-секундный цикл.
clear_frames
определяется следующим образом:
public var clear_frames:Array = [1, 109, 272, 413, 529, 690, 830];
clear_frames
определено в отдельном классе, но класс, в котором находится основной код, является расширением этого отдельного класса, поэтому я считаю, что у меня должен быть полный доступ к нему
Любая помощь очень ценится, спасибо.
EDIT
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