Просмотр полной версии : Почему виснет флешка?
Я создаю игру, пока получается всё кроме 1 вещи - почемуто виснет флэш при выполнении некоторых кодов, пишет И"з-за скрипта, флэш ролик будет выполняться очень медленно. Остановить выполнение сценария?" . Причем в них совершенно нет ничего такого, отчего флэш могбы виснуть.
По теории так быть недолжно.Посмотрите пожалуйста исходник.
http://upload2.net/page/download/mGcUN8wj13QFS9R/platform.fla.html
Коды при которых виснет флэш я выделил серым. 1 код в главной временной шкале, а 2 в клипе "enemy11".
DJ_ManiaC
16.07.2007, 20:01
У меня почему-то не хочет открываться твой файл. Какая версия Флеша? Флешки и вообще программы виснут в основном из-за бесконечных циклов. Ты проверь если у тебя в коде есть циклы, то выполняются ли условия для них. Если условия не будут выполняться, то это будет бесконечный цикл и соответственно зависание.
Возможно также, что твой комп не в состоянии обработать цикл определеного кол-ва. Я, например на пне третьем циклом прибавлю к переменной +1 10000 раз, то увижу такое же сообщение.
Флэш у меня 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, и все работают хорошо), всё равно висло.
В чом дело немогу понять.
А кстати, что пишет когда неоткрывается? Я сделал "сохранить и сжать" может из-за этого?
Первая мысль - в твоей программе под 200000 hitTest-ов за раз вызывается (в функции hit) Пом это дохрена - пошоруди в этой функции
Диспетчер задач показывает загрузку процессора 99% - это жэсть.. Вероятно тот блок просто-напросто добивает систему..))
200000 я не нашел, от 442 до 999 за раз, но все равно это много, а учитывая фпс 120, вобще ужас. Флешка на моем Core 2 Duo 6700 конечно не виснет, но подтормаживает, и одно ядро грузит по полной.
попытался вникнуть в код... мама рОдная...
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: ответь пожалуйста на мой вчерашний вопрос по поводу шрифтов и памяти - понять хочу.
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 пикселей, а там явно не дотягивает.
Я хотел чтобы шар спускался со скоростью но плавно
setInterval
и они будут только прямоугольной формы
согласен - моя неправда
не может проверять пересечение клипа 1-го уровня и 2-го уровняне проверял, но детектор направления столкновений можно и на 1й уровень поместить - накладывать его на координаты thisball при столкновении.
1.Код от этого меньше не станет. 2.Покрайней мере я пытался.1.станет 2.Москва не сразу строилась.
и объясни пожалуйста остальные -4 ,5 ,6 ,....повторного разбора этого кода не выдержу - сперва сделай его читабельным.
просто удалил код и написал его же заново-точно такойже, и ЭВРИКАты уж извини, в чудеса не верю.))
Fps по прежнему 120, и кстати, почему он так медленно падает? по скрипту он должен палать на 480 пикселей, а там явно не дотягивает.setInterval
З.Ы.С прискорбием убедившись в достоверности цитаты №2, залез в гугл (hitTest shape) и, не поверишь, по 1й-же ссылке нашел нормально работающий класс, определяющий пересечение шейпов, и точку вышеупомянутого пересечения.:) глянь на него - мож пригодится.http://www.gskinner.com/blog/archives/2005/10/source_code_sha.html
Даже если будешь юзать свой рукотворный хиттест, попробуй нарисовать в 1 клип - круг и еще 1 клип - hairline-дуга примерно в 1/10 круга, после чего, с определенной дискретностью(скажем 100), приравнивай координаты центра дуги координатам центра круга, в цикле(1->10) поворачивай дугу и хит-тести ее с уровнем.
все.. устал писать.. всем хорошего дня.
Tolero, setInterval не может обеспечить плавность движения чего-либо. setInterval нужен там, где требуется определенные промежутки времени между итерациями, которые заведомо больше, чем промежутки между сменой кадров. В противном случае надо использовать onEnterFrame.
стоп.
1.Выполнение команды в интервале равном 1000/fps даст тот-же результат.
2.Интервал дает возможность привязываться к реальному времени вне зависимости от fps.
если я неправ, то почему?
З.Ы. Torero
Потому что onEnterFrame срабатывает как раз в момент прорисовки кадра, а setInterval — необязательно.
Более того, интервал зависит от частоты кадров. Поэтому не имеет смысла что-то гонять по экрану с частотой бОльшей, чем реальная частота кадров (а onEnterFrame как раз выполняется с реальной частотой кадров).
Ничего, помимо дополнительных тормозов интервал в данном случае не приносит.
Ясненько. спасибо за ликбез.
Абсолютно не понял суть проблемы. На моем ноутбуке НИ МАЛЕЙШЕГО признака задержки работы или каких бы то ни было тормозов. Проверяйте компьютеры, наверное. :taunt:
сообщение отTorero
ты уж извини, в чудеса не верю.))
А ты сам попробуй заново напсать, у тебя тоже должно перестать виснуть.
сообщение отTorero
не проверял, но детектор направления столкновений можно и на 1й уровень поместить - накладывать его на координаты thisball при столкновении.
Уж извини я ничего не понял:wacko:
сообщение отTorero
повторного разбора этого кода не выдержу - сперва сделай его читабел
Посоветуй как это сделать, я сделал как мог, досих пор я не натыкался на исходники с нормальными коментариями, покажи хоть 1 читабельный код, и я исправлюсь.:rolleyes:
Ответьте пожалуйста на мой вопрос по fps , почему он стоит 120 а работает точно также как 12??? Меньше получается, а больше 12 неработает. (
сообщение отCкептик
Абсолютно не понял суть проблемы. На моем ноутбуке НИ МАЛЕЙШЕГО признака задержки работы или каких бы то ни было тормозов. Проверяйте компьютеры, наверное.
А ты убрал знаки коментариев? Я проблемные места кодов поставил в коментарии.
Тут исправил все глюки , почти доделал всю игру, но вылезла какаято непонатная фигня - виснет от обычного gotoAndPlay , просто нехочет переходить на другой кадр, даже если пишу в самом начале еода, а всё остальное нормально.
Вот исходник :
http://upload2.net/page/download/NzXzWNz1UZQwJ5Y/platform.fla.html
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.