Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Не сайты (http://www.flasher.ru/forum/forumdisplay.php?f=82)
-   -   Игрушка про висельников часть 2. (http://www.flasher.ru/forum/showthread.php?t=139629)

Smrad 06.05.2010 14:26

Игрушка про висельников часть 2.
 
Вот, сегодня зарелизились. Прошу попинать.
Собственно игра: http://notdoppler.com/gibbets2.php

Alex Lexcuk 06.05.2010 15:39

Ниче так игруля, однако почти работает
после нажатия на кнопку плей появляется бяка
http://murmadillo.tut.su/m/err-gib.jpg
Потом нажмаю на закрыть все и все закрывается и становится серым-серо.

Smrad 06.05.2010 15:43

Ого, забавный баг, спасибо. Вот в одном только месте play не внутри try и тут же свалилось :).

orcpochta 06.05.2010 15:51

класс!

VVall 06.05.2010 15:52

У меня ошибки не было, смотрел до сообщения Alex Lexcuk. Дошёл до 3 или 4 уровня, надоело. Сделано хорошо.

Волгоградец 06.05.2010 17:50

У меня тоже не было ошибки. Игра классная - все сделано на уровне. Даже шрифт правильный подобран ).

TERRORist 06.05.2010 21:42

Цитата:

Сообщение от Smrad (Сообщение 906357)
Ого, забавный баг, спасибо. Вот в одном только месте play не внутри try и тут же свалилось :).

если у вас есть хоть один play внутри try то вы явно не оч хороший кодер...

Smrad 06.05.2010 21:58

Цитата:

Сообщение от TERRORist (Сообщение 906408)
если у вас есть хоть один play внутри try то вы явно не оч хороший кодер...

Ну, если не сложно, то поясните почему.

Zebestov 06.05.2010 22:33

на прелоадере солнышко не делает =)
хорошая игруля.

Smrad 06.05.2010 22:50

Цитата:

Сообщение от Zebestov (Сообщение 906423)
на прелоадере солнышко не делает =)

Сначала не понял, что под имеется в виду солнышком, потом догадался. Если сделать возможность делать солнышко, то есть вероятность, что веревка "порвется". Т.е. если максимальное напряжение внутри веревки перешагивает некоторый барьер (а-ля всеразрушающий снаряд натыкается на несокрушимую стену) box2d начинает бажить, сцену колбасит и выворачивает. Так что все имеет свой смысл :).

Psycho Tiger 06.05.2010 22:51

try вообще лучше не использовать там, где можно обойтись без него.

Smrad 07.05.2010 02:36

Цитата:

Сообщение от Psycho Tiger (Сообщение 906433)
try вообще лучше не использовать там, где можно обойтись без него.

Без исключений можно обойтись всегда, значит не использовать из совсем ;)? Коды возврата, C-style?

Ну и скриншот из второго поста, как бы говорит что это не тот случай, когда можно обойтись :). Хотя я до сегодняшнего дня даже и не знал, что flash.media::Sound/play может выбросить исключение.

orcpochta 07.05.2010 02:58

а я иногда использую исключение, когда надо быстро выйти из n-вложенной ф-ии (не в смысле, что она определена в другой, а та в третьей и т.д., а в том, что одна вызывает другую, та третью и т.д.) и на нужном уровне перехватываю исключение.

Сабир 07.05.2010 10:56

Увлекательно. Только людей жалко. Надо бы всяких одиозных личностей подвесить.:D

Smrad 07.05.2010 12:58

Цитата:

Сообщение от Сабир (Сообщение 906534)
Увлекательно. Только людей жалко. Надо бы всяких одиозных личностей подвесить.:D

Гитлеров? :D

TERRORist 07.05.2010 14:00

Try нужно использовать, но к месту. Например, насколько я помню, была такая ситуация, что нужно сохранение > 100КБ в шаредОбжект сделать.

Выяснить, установил ли пользователь размер шареда в настройках флеша на >100Kb можно было только через трай\кетч, при этом в трае был so.flush(), а в кетче вызывалось окно System.showSettings(1);.. Как то так примерно

В остальных случаях try почти бесполезен, как правило

Psycho Tiger 07.05.2010 16:14

Цитата:

Без исключений можно обойтись всегда, значит не использовать из совсем ? Коды возврата, C-style?
TERRORist сказал пример, когда использовать можно. Если есть вариант, где его не использовать - значит его не использовать. Даже в одной строчке кода может быть много RTE, обернув её в try мы уже потенциально не узнаем о возможной ошибке там. Это уже не говоря что try жутко медленный.

orcpochta, то что вы сказали называется стек. То что вы делаете - называется хрень, RTE созданы для ошибок, а не для штатных ситуаций. Если вы предполагаете, что у вас в штатной ситуации должно вызваться RTE - у вас явно проблемы с архитектурой. С вами и вашим кодом с такими подходами я бы работать не захотел.

Smrad 07.05.2010 17:35

Цитата:

Сообщение от TERRORist (Сообщение 906589)
Try нужно использовать, но к месту.

Еще раз, flash.media::Sound/play может выбросить исключение, не могу представить как это получилось, но факт. Стало быть обернуть play в try/catch и есть то самое использование к месту. Я полагаю, что когда вы писали свой первый пост в этом топике, то просто не знали об этом, впрочем, я вот тоже не знал. Остальные play обернуты по причине того, что звуки в игре ассоциированы со строками, т.е. что-то в духе SoundManager.plya(sound_name), а собственно flash.media::Sound создается посредством getDefinition, который может выбросить исключение в случае ошибочного sound_name. Так что делать заключения о том хороший кодер или плохой кодер на основании минимальной информации на форуме делают вас не очень хорошим HR :). Последняя фраза шутка, если что.

Добавлено через 3 минуты
Цитата:

Сообщение от orcpochta (Сообщение 906507)
а я иногда использую исключение, когда надо быстро выйти из n-вложенной ф-ии (не в смысле, что она определена в другой, а та в третьей и т.д., а в том, что одна вызывает другую, та третью и т.д.) и на нужном уровне перехватываю исключение.

Использование throw вместо goto, порождает тот же самый спагетти код, что и goto :).

Добавлено через 12 минут
Цитата:

Сообщение от Psycho Tiger (Сообщение 906623)
TERRORist сказал пример, когда использовать можно. Если есть вариант, где его не использовать - значит его не использовать. Даже в одной строчке кода может быть много RTE, обернув её в try мы уже потенциально не узнаем о возможной ошибке там.

Исключения и созданы для более простой обработки ошибок, а не чтобы затруднить отладку.

Цитата:

Сообщение от Psycho Tiger (Сообщение 906623)
Это уже не говоря что try жутко медленный.

Напишите простой тест производительности, откроете для себя много нового ;).

Psycho Tiger 07.05.2010 18:04

Цитата:

Напишите простой тест производительности, откроете для себя много нового .
Это показывали ещё в презентациях старых о производительности. Тесты писать лень, для разницы надо сделать глубокий стек, т.к. при RTE он выгружается.

Цитата:

Исключения и созданы для более простой обработки ошибок, а не чтобы затруднить отладку.
RTE созданы для облегчения отладки. try-catch для мест, в которых ошибки никак не избежать, или избегать её глупо. Если когда фп дал Вам ошибку, которую Вы не состоянии понять и Ваше решение было обернуть это в try-catch - это Ваше и только Ваше право. Только ни о каких гарантиях работоспособности этого кода идти речь не может.

orcpochta 07.05.2010 18:36

Psycho Tiger, smrad, я не соглашусь с вами.

На живом примере: есть лабиринт, который надо обойти, событие "выход найден" возникает раз за несколько сот-тысяч "шагов" в зависимости от размера лабиринта, при этом надо обязательно вернуться на несколько уровней выше, чтобы продолжить стандартные схемы движения, но уже в направлении выхода. Если бы не возможность выбросить ошибку, мне бы пришлось в каждом надметоде определятьне вернул ли вложенный ниже метод нечто, сигнализирующее, что лабиринт найден. В итоге в зависимости от глубины вложенности мы имеем n дополнительных проверок, помноженных на несколько сот-тысяч шагов. Ну и зачем мне это надо?

Smrad 07.05.2010 18:44

Цитата:

Сообщение от Psycho Tiger (Сообщение 906657)
Это показывали ещё в презентациях старых о производительности. Тесты писать лень, для разницы надо сделать глубокий стек, т.к. при RTE он выгружается.

Это будет кривой тест. Исключения на то и исключения, чтобы происходить в исключительных ситуациях. Т.е. в тесте нужно написать участок кода типа
if (Math.random() < 0.001) throw new MyException();

Цитата:

Сообщение от Psycho Tiger (Сообщение 906657)
RTE созданы для облегчения отладки. try-catch для мест, в которых ошибки никак не избежать, или избегать её глупо. Если когда фп дал Вам ошибку, которую Вы не состоянии понять и Ваше решение было обернуть это в try-catch - это Ваше и только Ваше право. Только ни о каких гарантиях работоспособности этого кода идти речь не может.

RTE созданы для того, чтобы обработку ошибок можно было централизовать и упростить. Дальше спорить не стану, со временем вы все поймете сами :).

Psycho Tiger 07.05.2010 20:17

orcpochta, плохо спроектировано. Думать лень, текст не читал, но если такая нужда есть - спроектировано хреново.

Smrad, юношеский максимализм?)
Цитата:

Это будет кривой тест. Исключения на то и исключения, чтобы происходить в исключительных ситуациях. Т.е. в тесте нужно написать участок кода типа
if (Math.random() < 0.001) throw new MyException();
Ага, и такую редкую ошибку нужно просто подавить. Отличный подход - пофигу, что в этих 0.001% программа будет работать совсем не так как надо, а тестеры не увидят окно ошибки.
Цитата:

RTE созданы для того, чтобы обработку ошибок можно было централизовать и упростить.
Ошибки были созданы для того, чтобы обработку ошибок можно было упростить. Окээ.. )
Вообще у нас 2 разные позиции - у меня: случилась ошибка - я делаю так, чтобы ошибки не возникало и всё работало правильно. У вас - вроде подавили ошибку, ну вроде не повлияло ни на что, продолжаем...
Расскажите мне лучше про централизацию ошибок.

TERRORist 07.05.2010 22:31

Цитата:

Сообщение от Smrad (Сообщение 906652)
собственно flash.media::Sound создается посредством getDefinition, который может выбросить исключение в случае ошибочного sound_name.

А зачем вы используете ошибочные sound_name?

Если представить что в ваши исходники влезает какой нить негодяй и удаляет из них звуки пока никто не смотрит, то я б использовал простой if:
Код AS3:

var mySoundClass:Class = getDefinitionByName('soundName')
if(mySoundClass)
{
    var mySound:Sound = new mySoundClass() as Sound;
    mySound.play();
}


Smrad 07.05.2010 23:53

Цитата:

Сообщение от TERRORist (Сообщение 906731)
А зачем вы используете ошибочные sound_name?

Если представить что в ваши исходники влезает какой нить негодяй и удаляет из них звуки пока никто не смотрит, то я б использовал простой if:
Код AS3:

var mySoundClass:Class = getDefinitionByName('soundName')
if(mySoundClass)
{
    var mySound:Sound = new mySoundClass() as Sound;
    mySound.play();
}


Сделайте тестовый проект и потестируйте то, что вы тут написали, т.к., судя по всему, вы просто не совсем понимаете как работают исключения. Ну или создайте соответствующий топик в разделе "программирование as3".

Добавлено через 10 минут
Цитата:

Сообщение от Psycho Tiger (Сообщение 906705)
Smrad, юношеский максимализм?)

Хехе, если у меня юношеский, то у вас детский :D. А вообще, давайте не переходить на личности, это вредно, ok?

TERRORist 08.05.2010 00:41

да, чето не то)

Alex Lexcuk 08.05.2010 02:23

Опять затестил, счас работает.

Smrad 08.05.2010 02:50

Цитата:

Сообщение от Alex Lexcuk (Сообщение 906797)
Опять затестил, счас работает.

Я как-то уже натыкался на такой баг. Как лечить понятно. Не совсем понятна сама причина возникновения.

maklaus 08.05.2010 11:31

Игрушка класс! =)

Сабир 08.05.2010 13:34

Цитата:

Сообщение от Smrad (Сообщение 906573)
Гитлеров? :D

Да. А еще Чикатилов там всяких. Джеков-потрошителей, Пол Потов и прочая, прочая, прочая. :D

VVall 08.05.2010 13:42

Спасать Гитлеров, Чикатилов и прочих - это будет концептуально.

Smrad 08.05.2010 13:52

Цитата:

Сообщение от Сабир (Сообщение 906824)
Да. А еще Чикатилов там всяких. Джеков-потрошителей, Пол Потов и прочая, прочая, прочая. :D

Джек потрошитель остался непойманным, собственно никто его не видел. Так что не прокатит :).

Psycho Tiger 08.05.2010 17:33

Да, вы угадали. У меня детский максимализм, я верю в идеалы и светлое будущее. Я ребёнок, мне пиво через раз продают. Что это меняет?

Мне просто действительно непонятно, зачем допускать возможность возникновения ошибки, а потом её отлавливать.

Кстати, если компилируете mxmlc - вполне может сойти за баг, попробуйте скомпилировать другой версией. В одном из моих проектов была такая ерунда - у меня была фишка в том, что RTE вылетала из блока try.

И кстати, я глупость написал, а вы меня поддержали. При отловленной RTE стек не выгружается.

Smrad 08.05.2010 20:39

Цитата:

Сообщение от Psycho Tiger (Сообщение 906851)
Да, вы угадали. У меня детский максимализм, я верю в идеалы и светлое будущее. Я ребёнок, мне пиво через раз продают. Что это меняет?

Ну как что меняет, это меняет мотивацию ваших постов. Т.е. бескомпромиссно следовать чему либо или отвергать что-либо, например исключения, и есть максимализм. Обычно через некоторое время это проходит, и отношение к вещам становится более философским :).

Цитата:

Сообщение от Psycho Tiger (Сообщение 906851)
Мне просто действительно непонятно, зачем допускать возможность возникновения ошибки, а потом её отлавливать.

Ну потому что такая структура языка. getDefinition бросает исключение, а не возвращает error code или null. Sound::play, как оказалось тоже, может выбросить exception на определенных конфигурациях. Просто в языке нет других средств, чтобы обработать такую ошибку. У Alex Lexcuk'а была ошибка из за необработанного исключения. Я сделал update, ошибка пропала. Все счастливы. В игре код типа SoundManager.play(wrong_name) напишет в trace, что вот мол такого-то звука нет, а не свалит программу, и это хорошо.

Цитата:

Сообщение от Psycho Tiger (Сообщение 906851)
И кстати, я глупость написал, а вы меня поддержали. При отловленной RTE стек не выгружается.

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

Eric Gurt 13.05.2010 12:21

Классная игра - очень понравилось когда стрела застряла в голове и при этом оборвала веревку) в результате я не проиграл а висельник счастливый упал на землю со стрелой в голове)

Алиль 16.05.2010 21:36

до 45 дошёл!!!


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

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