Ура! Вот и наступил тот день, когда этот проект выходит за рамки моего компьютера. =)
В двух словах: ТЛКшный screenmate. ;) Но он пока еще в стадии разработки. =)
Здесь собсно, хочу видеть фсякие вопросы/предложения/пожелания/просто реакции по поводу проекта. =)
А также, может быть, кто-нибудь хочет присоединиться к разработке? :)
Первое впечатление: мама рОдная!.. 8-О (Жаль смайлика нет с выпученными глазами :) ) Ты не перемудрил са-а-амую малость? ;)
Парочка замечаний:
В INI-файле пути можно писать относительные, дабы не мучаться:
GraphPath=.ResourcesFrames
AnimPath=.ResourcesAnimations
Почему грузится так долго? BMPшки должны грузится моментом, регионы тоже... Вот если б ты регионы на ходу генерировал, тогда это еще можно было бы объяснить...
Чисто удовлетворить любопытство – первые 16 байт в файлах регионов для чего? :)
Кадры плохо накладываются друг на друга — Симба дергается туда-сюда. И у них слишком большие черные края, да и мусор встречается – надо бы немного почистить.
Для удобства надо добавить перетаскивание мышью. А то Симба имеет привычку убегать. :) И окно надо бы сделать "поверх всех".
count={unsigned int}
Это потенциальное место для ошибок. Лучше просто проверять наличие секции.
Анимации, я так понял, не могут прерываться на середине? Есть некоторые (стояние на месте, бег), которым бы это не помешало. К примеру, чтобы Симба не убегал за границу экрана.
move.y = -rnd()*(screenY-200) надо заменить на что-нибудь вроде move.y = -rnd()*(screenY-400) + 200, а то прыжки нулевой высоты смотрятся неестественно. ;)
Так все же - зачем у тебя в планах (пусть и далеких) gdiplus? :)
Справка, конечно, хорошая, но ей не достает описания основ – что такое "анимация", зачем нужна очередь анимаций (или я не так понял?) и т.п.
На данный момент Симба очень любит зарываться ниже экрана, а также в некоторых случаях взлетать за верхнию границу экрана.
Может это из-за ошибок округления — ты ведь все в процентах считаешь? Чисто предположение. :) Как реализовано разрешение таймера, я не понял. Если его увеличить, то Симба начинает пропускать кадры, выскакивать за границу экрана... Наверное, второе – следствие первого. В пользу этого говорит то, что ошибка округления при высоком разрешении таймера должна увеличиваться. А вообще, ИМХО, сколько кадров – столько движений, ни больше, ни меньше. Сразу куча проблем отпадает, да и смотрится лучше.
Жаль полные исходники не прилагаются – без них разбираться сложновато. Да и посоветовал бы, может, чего.
"DeskSimba" - это программа-скринмейт. Выводит на экран и заставляет бегать по Вашему рабочему столу всяких персонажей, в данном случае - Симбу. Однако проект не ограничивается одним лишь Симбой, программа пишется максимально широко и по задумке будет уметь работать с любой графикой, любой анимацией и любым искусственным интеллектом (AI).
Итак, это первая версия, которая выложена в Инет. Часть информации о ней можно узнать на главной странице проекта в разделе "На данный момент". Так что она умеет?
1. Грузить графику из битмапов, регионов и кфг (читайте соответствующие разделы)
2. Грузить анимацию из соотвествующих кфг
3. Имеется также сколько-нибудь убогий AI.dll :) , который:
4. Заставляет Симбу бегать туда-сюда по рабочему столу, вилять хвостом и прыгать на разную высоту. :)
5. На данный момент Симба очень любит зарываться ниже экрана, а также в некоторых случаях взлетать за верхнию границу экрана.
6. Наилучшим образом отлажена анимация "бег", остальные - так себе. :)
7. Статусное окно (как впрочем и окно Симбы) может реагировать на следующие кнопки:
Цифры на основной клавиатуре - масштабирование Симбы. Оно не делалось для многократного масштабирования, а делалось только для начальной подгонки графики под конкретное разрешение монитора. Пока что для прикола вывел - на цифры, играйтеся. =)
"a" - перезагружает подключенную AI.dll. Собсно можно даже менять параметры в инишке, его она тоже перезагружает.
"d" - отключает подключенную AI.dll. В этот момент ее можно как угодно трогать, рекомпилировать, подменять, все что угодно. Подключить заного - "a". По-моему это очень удобно при разработке библиотек искусственного интеллекта. ;)
"Pause" - Пауза :)
"Space" (Пробел) - собсно, когда стоит "Пауза" продвигает состояние игры на 1 "тик" вперед.
"Gray +/-" (+/- на вспомогательной клавиатуре) - увеличивает/уменьшает период срабатывания таймера.
8. Кстати, глюки с уходом в нижнее и в верхнее заэкранье каким-то образом связаны с разрешающей способностью таймера... Странно.
9. MouseClick левой по статус-окну выдергивает Симбу на передний план.
10. ВНИМАНИЕ! НЕ ЗАБУДЬТЕ прописать Ваши пути в файл DeskSimba.ini. =^.^=
Это моя проблемма. =) Если я что-то начинаю делать, то стараюсь сделать помаксимуму и воплатить все идеи... ;)
Тут же что главное? Чтобы прога не зашла в тупик, когда ее нужно будет переписывать с 0. Вот этого не хочется, поэтому сразу пишу много и сложно. :))
В INI-файле пути можно писать относительные
Пофиксил, альфа1.1 будет уже с относительными. =)
Почему грузится так долго?
Битмапы грузятся через LoadBitmap, она возможно и быстро работает, но там технология такая, что он формирует два массива с графикой: один, где у Симбы морда вправо, другой - где влево. :) Так вот функция отражения реализована вручную двумя циклами. Это - первый тормоз. А второй тормоз только что заметил: отраженный регион генериться заново на лету, ибо в
файлах - регионы только "в одну сторону". Можно переделать через трансформацию регионов, будет знаительно быстрее, так и сделаю. Раньше - просто не умел. :)
перетаскивание мышью. и поверх всех
Перетаскивание... ну можно сделать - для тестовых задач, а в релизе думаешь надо? Там AI будет всем заправлять... или юзверь с клавы или джойстика. =)
А "поверх всех" делается просто, но надо ли? Ведь тогда он будет носится везде, а не только на рабочем столе. :) - работать не даст точно. :) Ладно, воткну опцию в ini. :)
потенциальное место для ошибок
Согласен, но в дальнейшем будут выпущены CFG-мейкеры для всех этих файлов. Так ли оно нужно? Сейчас он при отсутствии секции грузит файл 404.bmp, которого, кстати, тоже нет. :)
Анимации, я так понял, не могут прерываться на середине?
Могут! [поправил файл "О классах"]. Для этого последним параметром в функции AddAnim должно быть передано true, тогда текущая анимация прерывается и сразу начинается вновь-добавленная.
прыжки нулевой высоты смотрятся неестественно.
Хм. :) Ну можно, вот и замени, там все файлы для компиляции AI.dll есть. :) Я ж для этого все это и делал, чтобы юзвери могли забавляться с программой, приделывая собственные AI. :) Потом можно даже будет конкурс забабахать. :)
зачем у тебя в планах (пусть и далеких) gdiplus? :)
Он позволяет делать разную степень прозрачности окна для разных пикселей. =) Это позволит аккуратно сгладить кромку персонажа... но на проц будет вешаться... ой ё ёй... :)
"анимация"
Там в "О ресурсах" я попытался объяснить, что это такое. Попробую еще раз здесь. :)
Анимация - последовательность заранее определенных кадров и изменений координат (например: "прыжок", "бег"...). Причем, для каждого кадра в анимации прописана его длительность и изменения координат по обоим осям за время показа данного кадра. Эти значения там указаны в процентах от общего времени и изменений координат всей анимации. Это позволяет в AI.dll гибко применять эти анимации. Например, бег может быть на 100 пикселей, а может и на 700. То же - с прыжком и с остальными. Так же в функцию AddAnim передается и время, за которое анимация должна совершиться.
Может это из-за ошибок округления — ты ведь все в процентах считаешь?
Очень может быть, но вот я например заметил, если изменить значение интервала срабатывания таймера, погрешность меняется. Думаю, это как-то связано с системой определения текущего кадра и сдвигов (GetState()), в т.ч. и с окрглениями внутри них...
Была мысля вместо процентов туда сделать просто float'ы... Тогда можно будет достигать там любой точности желаемой...
А вообще, ИМХО, сколько кадров – столько движений, ни больше, ни меньше.
Я об этом думал и даже делал. Но смотриться это ХУЖЕ. Потому что вот например "прыжок" - там всего 11 кадров, причем взлет происходит за 2(!) кадра, посадка - за 3. Если делать сдвиги координат при смене кадров - получиться слишком рваное движение ИМХО. А так, обновление координат идет при каждом Tick'е.
Да. TimerResolution - это ни что иное как интервал срабатывания таймера. Возможно, кстати, еще и из за этого проблеммы, потому что в функцию Tick тупо передается значение TimerResolution в то время, как реальное время между срабатываниями таймера может несколько отличаться... можно в принципе через GetSystemTime() это дело отслеживать... Попробую.
Жаль полные исходники не прилагаются.
Не хочешь в соразработчики? :D Смотрю С ты знаешь, а это очень гуд. :)
PS. Кое-что подредактировал на страничке - "О классах" (про функцию AddAnim) и добавил "Написание AI". Где что непонятно, спрашивайте. :) Все-равно нужно будет написать инструкцию, которая была бы понятна всем,.. с вашей помощью. :)
PPS. Сейчас пока разработку подтормаживаю в связи с началом учебного семестра, а также подвалившей работы по написанию софта для микроконтроллера ATmega16. :) Так, буду иногда ковырять, следить за этой темой, объяснять все всем желающим. =) А также навправлять жаждущих в плане писания своих AI.dll. :)
Вот этого не хочется, поэтому сразу пишу много и сложно. :))
А по-моему, чем меньше кода, тем легче исправлять. ;) И главное стереть не жалко. :))
Перетаскивание... ну можно сделать - для тестовых задач, а в релизе думаешь надо?
Обязательно! Все известные мне скринмейты (да и оффисовские помощники) таскаются мышью. Будет Симба мешать – ты будешь включать управление с клавиатуры и уводить его в сторону? ;)
Ведь тогда он будет носится везде, а не только на рабочем столе. :) - работать не даст точно. :)
А в этом вся затея. ;))
Ладно, воткну опцию в ini. :)
Как временное решение, конечно, сойдет, но хотелось бы переключаться побыстрее.
Ну можно, вот и замени, там все файлы для компиляции AI.dll есть. :)
Плохой подход. Кто здесь программирует?!
Потом можно даже будет конкурс забабахать. :)
Бабахай-бабахай, но сначала свой AI до ума доведи. ;) А что, уже толпы желающих собрались?
Кстати, тебе несколько звуков из игрушки не надо? Было дело, ковырял архив игрушки... В общем, незапакованными в нем:
у чтож давайте сделаем продолжение мульта на флэше? или нарисуем мультик КОРОЛЬ ЛЕВ 4 - Гордость России,))))))))) Над нами весь мир потом смеяться будет, нарисуем Симбу в валенках, телогрейке, с бутылкой самогона, он ходит по заснеженной саванне и курит....
А так програмка прикольная, удачи.
2kotenok_gaff
DeskSimba.ini, открывай блокнотом и стирай в этих строчках лишнее. Сами строчки можно найти через поиск (F3).
Таким образом абсолютные пути превратятся в относительные :)