AS3 (Adobe AIR / Flash) gotoAndPlay вызывает огромное отставание, даже если он вызывается только один раз? - PullRequest
0 голосов
/ 31 декабря 2011

Я создаю игру в 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

1 Ответ

0 голосов
/ 31 декабря 2011

Не похоже, что в вашем коде есть проблемы. Похоже, у вас есть довольно тяжелые изображения, загружаемые в некоторые кадры, или есть сценарий действий, который создает объекты в определенных кадрах. Трудно поделиться FLA, но есть ли онлайн-пример, который вы можете показать?

Независимо от того, если вы еще этого не сделали, в «Настройках публикации» установите флажок «Создать отчет о размере». Эта опция создает текстовый файл в том же каталоге, что и ваш FLA (или SWF, может быть?). В этом отчете содержится множество данных, которые разбивают фреймы, объекты, время и т. Д.

Кроме того, не объявляйте переменные в цикле for. Кроме того, присвойте всем вашим переменным тип. Это просто хорошая практика.


EDIT: Хорошо, глядя на отчет, у вас есть огромная нагрузка (7792727 байт) в кадре 1 и ничего в остальных. Это выглядит в основном как background.flv видео, а также куча других изображений PNG. Вы можете попытаться уменьшить размер PNG, но я думаю, что основной причиной является видео FLV. Вы, вероятно, ищете внутри и SWF искать в FLV. Это должен быть быстрый процесс, но вы можете попробовать удалить FLV для тестирования.

Если это не решение, вы можете перепроверить встраивание на progress_meter.jpg.

Кроме того, мне нужно было бы увидеть код AS3. То, что вы ищете, - это создание объектов, удаление объектов и удаленная загрузка объектов (URLLoader и т. Д.). Это будут крупнейшие потребители времени.


Редактировать: Я думаю, мне нужно будет увидеть файл, чтобы понять его Вы можете отправить письмо на созданный мною мусорный аккаунт: testdee@yahoo.com.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...