Форум 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=175276)

pivnoibaron 13.02.2012 19:52

Игра начинает тормозить. Помогите разобраться.
 
Вложений: 1
Привет. Сделал игру. Точнее делаю. Но вот игра при запуске, начинает есть все ресурсы системы. Если у кого есть желание, посмотрите что там не так. Сам не могу разобраться.

Игра напоминает игру "Жизнь". Нижний квадрат с права "Play" с лева "stop"

stweet 13.02.2012 20:03

Ужасно!

1. переменные и методы должны явно указывать тип данных, в противном случае возвращать войд(:void).
2. при каждой попытке, в коде, изменить делай таймера у вас создаёться новый не удаляя стары, а это очень жрёт оперативную память.
3. Дикий ужас происходит в архитектуре кода, отсутствие инициализации блоков памяти, типов, читабильность на нуле. Повтор однозадачных методов, массовый! Сложно уловить мысль разработчика.

Приведите исходники в порядок!

pivnoibaron 15.02.2012 23:20

" 2. при каждой попытке, в коде, изменить делай таймера у вас создаёться новый не удаляя стары, а это очень жрёт оперативную память. "
Получается что игра тормозит из за таймера?

Можно более подробней написать. Что поменять, что переделать?

Inet_PC 16.02.2012 00:05

[quote]public function timePlayGo ( )
{
tmr = new Timer ( 1000, timeGo );
tmr.addEventListener(TimerEvent.TIMER, masiw );
tmr.start();
}[/QUOTE
Вы думаете, что потеряли ссылку на таймер и все он перестал работать?
Ну поменяйте хотябы так:
Код AS3:

public function timePlayGo ( )
{
        if (tmr == null)
        {
                tmr = new Timer ( 1000, timeGo );
                tmr.addEventListener(TimerEvent.TIMER, masiw );       
        }
        else
        {
                tmr.reset();
        }
        tmr.start();
}

А вообще Вам бы книгу какуюнить прочитать.

pivnoibaron 16.02.2012 00:30

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

private function masiw (e:TimerEvent ):void   //пробегает по массиву arayViz заменяет 1 и 0 на визуальные обекты.
                {
                        for ( var i:uint = 0; i < arayViz.length; i++ )
                        {
                                for ( var j:uint  = 0; j < arayViz [ i ].length; j++ )
                                {
                                        if (  arayViz [ i ] [ j ] == 0  )
                                        {
                                                var newBoxTwo = new Box ( arayGrid, arayViz, masivReload ); // Может обекты Box сумируются и начинают забирать память?
                                                newBoxTwo.x = j * 20;
                                                newBoxTwo.y = i * 20;
 
                                                newBoxTwo.ii = i;
                                                newBoxTwo.jj = j;
 
                                                arayViz [ i ] [ j ] = newBoxTwo;
 
                                                addChild ( arayViz [ i ] [ j ] );
                                        } 
                                        if ( arayViz [ i ] [ j ] == 1 )
                                        {
                                                var newMoveBoxTwo = new MoveBox ( arayGrid, arayViz, masivReload );
                                                newMoveBoxTwo.x = j * 20;
                                                newMoveBoxTwo.y = i * 20;
 
                                                newMoveBoxTwo.ii = i;
                                                newMoveBoxTwo.jj = j;
 
                                                arayViz [ i ] [ j ] = newMoveBoxTwo;
 
                                                addChild ( arayViz [ i ] [ j ] );
 
                                        }
                                }
                        }                                           
                        moveBox ( );
                }


venziver 17.02.2012 00:26

Каждый раз в таймере Вы ставите ребёнка в очередь: addChild(arayViz[ i ][ j ]); и все они остаются в памяти и продолжают работать. Попробуйте вставить:
Код AS3:

removeChild(arayViz[ i ][ j ]);
arayViz[ i ][ j ]=null;

а после уже снова ставте в очередь.

pivnoibaron 18.02.2012 16:12

Цитата:

Сообщение от venziver (Сообщение 1063535)
Каждый раз в таймере Вы ставите ребёнка в очередь: addChild(arayViz[ i ][ j ]); и все они остаются в памяти и продолжают работать. Попробуйте вставить:
removeChild(arayViz[ i ][ j ]);
arayViz[ i ][ j ]=null;
а после уже снова ставте в очередь.

Куда их в коде поставить?

venziver 18.02.2012 23:02

У вас есть функция:
function masiw (e:TimerEvent ):void
её выполняет таймер с заданной частотой и на экране получается движение. Поэтому в начале этой функции надо сначала удалить в цикле всех детей из очереди:
removeChild(arayViz[ i ][ j ]);
arayViz[ i ][ j ]=null;
а потом в цикле их снова создать и поставить в очередь

СлаваRa 18.02.2012 23:12

А еще лучше объекты не пересоздавать. Вам по сути нужно просто менять их состояние, как я понял.

pivnoibaron 19.02.2012 21:45

Игра тянет все ресурсы.
 
Вложений: 1
Переделал игру. Но опять начинает тормозить :-( Я кажется что то в ней не понимаю. Кому несложно. Посмотрите пожалуйста и объясните что не так.


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

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