Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Рост используемой памяти (http://www.flasher.ru/forum/showthread.php?t=208458)

artem2033 15.07.2014 23:44

Рост используемой памяти
 
Вложений: 1
Подскажите, это нормально когда память используемая игрой очень медленно нарастает?
Проверял в скауте там увеличивается занимаемая память только у action script Objects.

artem2033 15.07.2014 23:45

Консоль открывается на ~, команда для просмотра памяти system 1.

Nooob 16.07.2014 00:06

если ничего не очищаешь то естественно расти будет. проверь очистку пуль, фона и тд

artem2033 16.07.2014 00:13

фон у меня не пересоздаётся, а просто координаты меняются. + я пробовал отключать стрельбу и управление. Память всё равно растёт.

Nooob 16.07.2014 00:24

код нужен, чтоб сказать

artem2033 16.07.2014 00:41

Вот код из backgroundManager'a :

Код AS3:

package code.game.background
{
        import code.feather.Antimation.FeatherClip;
        import code.feather.ScreenManager.ScreenManager;
        import flash.display.Sprite;
        import code.featherEngine.featherConsole.Console;
 
        public class BackgroundManager extends Sprite
        {
                private static var _instance:BackgroundManager;
                private var _screen:ScreenManager;
                private var backgrounds:Array;
 
                public function BackgroundManager()
                {
                        if(_instance != null)
                        {
                                throw("Error use instance in BackgroundManager");
                        }
                        _instance = this;
 
                        _screen = ScreenManager.instance;
                        backgrounds = new Array();
                }
 
                public static function get instance():BackgroundManager
                {
                        return (_instance == null) ? new BackgroundManager() : _instance;
                }
 
                /**
                * Добавление заднего статичного фона по умолчанию в центре экрана.
                * @param        name - имя закэшированного feather клипа.
                * @param        type - тип фона статичный или динамичный.
                * @param        speed - если динамичный укажите скорость.
                * @param        num - число динамических фонов на экране (1 по умолчанию).
                * @param        _x - положение по х на сцене.
                * @param        _y - положение по у на сцене.
                */

                public function addBackground(name:String, type:String, speed:Number = 0, koef:Number = 1, num:int = 1, _x:Number = 320, _y:Number = 240):void
                {
                        if (num == 1)
                        {
                                createBackground(name, type, speed, koef, _x, _y, _x);
                        }
                        else
                        {
                                for (var i:int = 0; i < num; i++)
                                {
                                        createBackground(name, type, speed, koef, _x + (640 * i), _y, _x);
                                }
                        }
 
                        Console.getInstance().message("Game: Added " + num + " new background.", Console.INFORMATION);
                }
 
                private function createBackground(name:String, type:String, speed:Number, koef:Number,  _x:Number, _y:Number, oldX:Number):void
                {
                        var background:Object = new Object();
                        background.name = name;
                        background.koef = koef;
                        background.graf = new FeatherClip();
                        background.graf.setAnim(name);
                        background.speed = speed;
                        background.graf.x = _x;
                        background.graf.y = _y;
                        background.X = oldX;
 
                        if (type == "dynamic")
                        {
                                backgrounds.push(background);
                                _screen.addToScene(background.graf);
                        }
                        else if (type == "static")
                        {
                                _screen.addToScene(background.graf);
                        }
                }
 
                private function moveBackground():void
                {
                        if (backgrounds.length > 0)
                        {
                                for (var i:int = 0; i < backgrounds.length; i++)
                                {
                                        //Может быть из - за этого?
                                        var obj:Object = backgrounds[i];
 
                                        if (obj.speed != null)
                                        {
                                                obj.graf.x -= obj.speed;
                                        }
                                        else
                                        {
                                                Console.getInstance().message("Error: не указана скорость фона", Console.ERROR);
                                        }
                                }
                        }
                }
 
                private function redrawBackgrounds():void
                {
                        if (backgrounds.length > 0)
                        {
                                for (var i:int = 0; i < backgrounds.length; i++)
                                {
                                        var obj:Object = backgrounds[i];
 
                                        if (obj.graf.x <= -obj.graf.width / 2 + obj.speed)
                                        {
                                                obj.graf.x = obj.X + obj.graf.width - obj.speed - obj.koef;
                                        }
                                }
                        }
                }
 
                public function update():void
                {
                        moveBackground();
                        redrawBackgrounds();
                }
        }
}


caseyryan 16.07.2014 07:36

Цитата:

Подскажите, это нормально когда память используемая игрой очень медленно нарастает?
Нет, не нормально. На лицо утечка. То, что происходит без стрельбы, вполне нормальный прирост. Когда сборщик мусора все очистит, расход памяти опять снизится, а вот при стрельбе она явно растет нездоровым образом. Есть подозрение, что каждый раз создаются новые пули


Часовой пояс GMT +4, время: 18:17.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.