Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Почему виснет флешка? (http://www.flasher.ru/forum/showthread.php?t=98577)

Gh >k 16.07.2007 19:47

Почему виснет флешка?
 
Я создаю игру, пока получается всё кроме 1 вещи - почемуто виснет флэш при выполнении некоторых кодов, пишет И"з-за скрипта, флэш ролик будет выполняться очень медленно. Остановить выполнение сценария?" . Причем в них совершенно нет ничего такого, отчего флэш могбы виснуть.
По теории так быть недолжно.Посмотрите пожалуйста исходник.
http://upload2.net/page/download/mGc...tform.fla.html
Коды при которых виснет флэш я выделил серым. 1 код в главной временной шкале, а 2 в клипе "enemy11".

DJ_ManiaC 16.07.2007 20:01

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

ToXICus 16.07.2007 20:18

Возможно также, что твой комп не в состоянии обработать цикл определеного кол-ва. Я, например на пне третьем циклом прибавлю к переменной +1 10000 раз, то увижу такое же сообщение.

Gh >k 16.07.2007 21:25

Флэш у меня 8. Азу на компе стоит 512, да и дело не в нём.
Циклов у меня нет. Всё работает идеально, до того как в действие вступает 1 из 3 кодов.
1)
Код:

if (hit(bс, level)) {
                _root._y -= gravity/1.3;
                bc._y -= gravity/1.3;
                bu._y -= gravity/1.3;
                bd._y -= gravity/1.3;
                br._y -= gravity/1.3;
                bl._y -= gravity/1.3;
                panel._y -= gravity/1.3;
                fon1._y -= gravity/1.3;
        }

Hit это функция проверки пересечения, bc.br.bl и т.д. - ролики, этот же код работает, но вместо bc вначале стоит bd.
2)
Код:

        if (this.hitTest(_root.bc)) {
                _root.gotoAndPlay(2);

        }

На втором кадре только stop и всё. Без gotoAndPlay всё работает.
3)
Код:

if (hit(bd, enemy11)) {
        enemy11.swapDepths(1001);
        enemy11.removeMovieClip();
        }*/

Причом дело не в удаленни клипа enemy11, я убирал эти строки, оставлял только проверку(таких у меня 4, и все работают хорошо), всё равно висло.
В чом дело немогу понять.

А кстати, что пишет когда неоткрывается? Я сделал "сохранить и сжать" может из-за этого?

expl 17.07.2007 00:18

Первая мысль - в твоей программе под 200000 hitTest-ов за раз вызывается (в функции hit) Пом это дохрена - пошоруди в этой функции

Torero 17.07.2007 03:46

Диспетчер задач показывает загрузку процессора 99% - это жэсть.. Вероятно тот блок просто-напросто добивает систему..))

iNils 17.07.2007 04:23

200000 я не нашел, от 442 до 999 за раз, но все равно это много, а учитывая фпс 120, вобще ужас. Флешка на моем Core 2 Duo 6700 конечно не виснет, но подтормаживает, и одно ядро грузит по полной.

Torero 17.07.2007 05:49

попытался вникнуть в код... мама рОдная...
1.panel.power.text обновлять 120 раз в секунду не стоит.(равно как и все остальное)

2.Все эти bc,br,bl... нужно запихнуть внутрь thisball_mc и писать thisball_mc._x+=** вместо того чтобы двигать их по отдельности. А вообще, лучше избавься от них.

3.нафига нужна ф-я hit я вообще не понимаю. по-моему никто еще не отменил конструкции типа if (thisball.hittest(level)){ здесь в неск строчек без всяких bc,br..можно проверить: какая из сторон столкнулась с level-ом }
3а)если уж используешь bl/br, то замени их на простые дуги, вместе образующие круг.

4.Пропиши функции moveThisBallRight(),moveThisBallLeft()... и используй их при столкновениях и нажатиях, либо вообще ужми код до 1й ф-ии moveThisBall

5,6,7,.........∞ :)

З.Ы.2iNils: ответь пожалуйста на мой вчерашний вопрос по поводу шрифтов и памяти - понять хочу.

Gh >k 17.07.2007 23:04

Цитата:

1.panel.power.text обновлять 120 раз в секунду не стоит.(равно как и все остальное)
Ну насчот fps я объясню. Я хотел чтобы шар спускался со скоростью но плавно, без прлетаний в землю. Но сколько бы я не увеличивал fps, шар спускался медленно, я поставил макс - бестолку, а потом я просто забыл его вернуть в нормальное состояние.
Цитата:

2.Все эти bc,br,bl... нужно запихнуть внутрь thisball_mc и писать thisball_mc._x+=** вместо того чтобы двигать их по отдельности. А вообще, лучше избавься от них.
Функция Hit не может проверять пересечение клипа 1-го уровня и 2-го уровня, я даже создал тему http://www.flasher.ru/forum/showthread.php?t=98578 чтобы узнать почему так .
Цитата:

3.нафига нужна ф-я hit я вообще не понимаю. по-моему никто еще не отменил конструкции типа if (thisball.hittest(level)){ здесь в неск строчек без всяких bc,br..можно проверить: какая из сторон столкнулась с level-ом }
Чтобы пользоваться hitTest-ом нужно описывать пересечение с каждым объектом, и они будут только прямоугольной формы, а с этой функцией можно просто рисовать что хочешь и не добавлять каждый раз код.
Цитата:

4.Пропиши функции moveThisBallRight(),moveThisBallLeft()... и используй их при столкновениях и нажатиях, либо вообще ужми код до 1й ф-ии moveThisBall
Код от этого меньше не станет. Покрайней мере я пытался.
и объясни пожалуйста остальные -4 ,5 ,6 ,.... может чтонибудь исправлю.
Проблема была не в fps и множественных провеках.У меня 512 азу и 2.4 проц, невиснет совсем когда я исправил глюки:
в 1 случае я просто удалил код и написал его же заново-точно такойже, и ЭВРИКА!!!! - перестало виснуть.
во 2 случае место gotoAndPlay я стал убавлять переменную lives и потом уже использовал gotoAndPlay и тоже перестало виснуть, хотя в причинах я неразобрался досихпор. Fps по прежнему 120, и кстати, почему он так медленно падает? по скрипту он должен палать на 480 пикселей, а там явно не дотягивает.

Torero 18.07.2007 08:58

Цитата:

Сообщение от Gh >k
Я хотел чтобы шар спускался со скоростью но плавно

setInterval
Цитата:

Сообщение от Gh >k
и они будут только прямоугольной формы

согласен - моя неправда
Цитата:

Сообщение от Gh >k
не может проверять пересечение клипа 1-го уровня и 2-го уровня

не проверял, но детектор направления столкновений можно и на 1й уровень поместить - накладывать его на координаты thisball при столкновении.
Цитата:

Сообщение от Gh >k
1.Код от этого меньше не станет. 2.Покрайней мере я пытался.

1.станет 2.Москва не сразу строилась.
Цитата:

Сообщение от Gh >k
и объясни пожалуйста остальные -4 ,5 ,6 ,....

повторного разбора этого кода не выдержу - сперва сделай его читабельным.
Цитата:

Сообщение от Gh >k
просто удалил код и написал его же заново-точно такойже, и ЭВРИКА

ты уж извини, в чудеса не верю.))
Цитата:

Сообщение от Gh >k
Fps по прежнему 120, и кстати, почему он так медленно падает? по скрипту он должен палать на 480 пикселей, а там явно не дотягивает.

setInterval

З.Ы.С прискорбием убедившись в достоверности цитаты №2, залез в гугл (hitTest shape) и, не поверишь, по 1й-же ссылке нашел нормально работающий класс, определяющий пересечение шейпов, и точку вышеупомянутого пересечения.:) глянь на него - мож пригодится.http://www.gskinner.com/blog/archive..._code_sha.html
Даже если будешь юзать свой рукотворный хиттест, попробуй нарисовать в 1 клип - круг и еще 1 клип - hairline-дуга примерно в 1/10 круга, после чего, с определенной дискретностью(скажем 100), приравнивай координаты центра дуги координатам центра круга, в цикле(1->10) поворачивай дугу и хит-тести ее с уровнем.
все.. устал писать.. всем хорошего дня.


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

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