Еще несколько слов о количестве ФПС.
То, что я текст заменил картинками, кому надо было - прочитали. Но оказалось, что дело было НЕ только в этом :blink: ФПС падал на прорисовке СЕТКИ игрового поля. Вот как я это делал: Код:
Function fnDrawGrid(clr=110) А когда заменил эту функцию на вывод картинки, на которой нарисована сетка таким же как выше способом, то ФПС стал 68-75. Вот так вот :dontknow: ПС: у меня "пустая" прога вида Код:
Repeat В игре тоже 75, выходит есть какая-то синхронизация с частотой обновления экрана монитора (у меня 75 Гц), которая не позволяет выдавать больше :?? Кто-нить знает, почему так происходит (ограничение)? |
Цитата:
дело в том, что если вдруг допустим ты отключишь ожидание луча и ФПС поднимется одпустим до 80 или 90 ты увидишь моргание на экране (на ЖК не сильно заметно будет) почему это происходит: луч (прорисовывающий изображение на экране) идет сначала от левого верхнего угла экрана до правого верхнего по одной строке (строчная развертка), после того, как он прошел строку он возвращается на ее начало но теперь сдвигается на одну строку вниз (как типа возврат каретки) (кадровая развертка) и так до конца (низа) экрана... когда луч достигает низ экрана он возвращается обратно (время возврата примерно такое-же как и время прорисовки). А так оно потому, что сетке экрана надо дать остыть до черного цвета. Эти два действия происходят у тебя 75 раз в секунду, дак вот, видеокарта следит за лучем и старается прорисовать экран в тот момент когда сетка остужена (идет обратный ход луча) и экран в это время не прорисовывается, теперь когда луч пойдет заново прорисовывать экран, то будет уже нарисована новая картинка... Рассмотрим теперь вариант "косого" обновления экрана, луч допустим до середины дорисовал одну часть изображения и тут поступил flip и говорит нужно рисовать другую... здесь зависит от видеокарты: 1. она вообще откажется передавать новое изображение на экран до начала обратного хода луча и оставльная половина экрана будет черной. (что вызовет мигание). 2. все нормально проработается и будет выводиться следующая картинка, теперь смортим: получается на половине экрана одна картинка а на другой половине другая мы конечно этого не заметим, это все будет сильно быстро мы заметим маленькое и весьма раздражающее дергание экрана. такие весчи (flip 0) стоит делать если у тебя ФПС будет примерно 150 или больше. :) |
Спасибо! Теперь ВСЕ ясно. Можно было не так подробно, за что еще раз спасибо.
|
Цитата:
|
Собственно, с чего все начиналось? С того, что я начал искать художника (или дизайнера, как кому нравится) и музыканта. Пусть это и выглядит смешно (набирать команду для создания "пятнашек"), но почему бы и нет?
Я И СЕЙЧАС НЕ ОТКАЖУСЬ ОТ ПОМОЩИ, и в титры включу обязательно. Получилось сзаду-наперед, но все же перекопирайтю некоторые посты со "старого" форума. Дабы внушить уверенность в потенциальных напарников. 25 August 2005 года Работа кипит. нота: Выкладывать код пока не стану Сделано: ФУНКЦИИ: 1. fnDraw2D() - отвечает за вывод всего на экран. 2. fnDrawGrid(clr=110) - рисует сетку заданным цветом: от черного до белого через серые тона (там Color (clr,clr,clr) стоит). 3. fnDrawCells() - рисует игровое поле: клетки с надписями-цифрами. 4. fnChoiceCell() - проверяет, на какую цифру нажали. 5. fnInitCells() - заполняет игровое поле цифрами слева-направо в порядке возрастания. 6. fnMoveCell(numX,numY,flagCheck=1) - двигает клетку с "координатами" (numX,numY) на пустое место, если это возможно. Флаг flagCheck определяет надо ли делать проверку на "законченность композиции". После упорядочивания цифр делает поле на 1 клетку шире по Х и по У. 7. fnCheckComplete() - проверяет все ли цифры упорядочены: если да, то говорит правду, нет - лжёт. нота: Хочу на неё же повесить определение упорядоченности в процентном соотношении, т.е. на сколько процентов поле упорядочено. 8. fnRandomMix(kolvo=1000) - перемешивает цифры. Параметр kolvo считаю по формуле, учитывающей размер игрового поля. 9. fnClearField() - "удаляет" игровое поле (пока не востребована). 10. fnTimeProshlo$(millis) - получает миллисекунды и возвращает время в виде строки формата "{мин} : {сек} . {сотые от сек}" 11. fnCreateStar(kolvo=1,maxKolvo=300) - создаёт звезду (выводится белой точкой). kolvo - сколько звёзд создавать maxKolvo - ограничитель, позволяющий поддерживать постоянное конечное число звёзд на экране. 12. fnUpdateStars(enable=1) - рисует звёзды и удаляет те из них, которые улетели за экран. enable - флаг, если 1, то функция выполняется, если НЕ 1, то не выполняется. Может пригодиться для отрисовки звёзд 1 раз из N (ФПС увеличится прилично. А скорость полёта можно увеличить, чтобы не было "замедления времени"). нота: Звёзды летят из центра экрана к его краям - выглядит будто бы мы играем на лобовом стекле летящего космического корябля. 13. fnStartGame(size=2) - настройка необходимых для игры параметров. Содержит функции fnInitCells() и fnRandomMix(50*sizeField*sizeField). (sizeField = size) size - это размер игрового поля. Также тут происходит обнуление прошедшего времени и количества ходов. Программа довольно универсальна - в том плане, что: 1. Можно сделать поле ЛЮБОГО размера, только поиграть получится НЕ в любое (оно за экран вылезет, о переполнении переменных молчу). ПРИЧЁМ: код при этом править НЕ нужно! 2. Не привязана к конкретному разрешению экрана, а это ОЧЕНЬ важно, если настройки видео делать! 27 August 2005 года Изменена работа функции fnCheckComplete() - теперь она возвращает степень упорядоченности чисел в процентном соотношении. 28 August 2005 года Новое: ФУНКЦИИ: 1. fnMainMenu() - отвечает за внешний вид (графику) и обработку ГлавногоМеню игры. В него игрок попадает после запуска игры и из самой игры. 2. fnMainMenu() - отвечает за внешний вид (графику) и обработку ИгровогоМеню игры. Оно рисуется ВСЕГДА наряду с остальными игровыми элементами в режиме Игры. 3. fnDeleteDecimal$(number#,kolvodecim=1) - http://www.boolean.name/post.php?cat...7&pid=6&page=1 4. fnDrawScore(kolvo=4,x,y,shagX=0,shagY=0) - выводит на экран лучшие результаты. 5. fnReadScore(size=4) - читает лучшие результаты из файла. 6. fnWriteScore(name$,time$,hody) - записывает результат игры в файл при условии, что этот результат ЛУЧШЕ какого-либо результата из таблицы рекордов. 7. fnSortScore(scoreKolvo) - сортирует рекорды. 8. fnDrawVerticalText(p_text$,p_x,p_y,p_dx=0,p_dy=0) - рисует вертикальный текст. Я с её помощью вывожу имя игрока в игре. 9. fnInputName() - альтернатива функции Input(), но она НЕ ОСТАНАВЛИВАЕТ НА СЕБЕ выполнение программы Правда за ЭТО пришлось заплатить глобальной переменной, но ОНО того стоит, по-моему С её помощью прога спрашивает имя игрока. Плюс всякие изменения по мелочи в ранее созданных функциях. Совсем запамятовал: теперь можно "управлять" скоростью движения звёзд! На числовой клаве: "+" - увеличить скорость движения звёзд "-" - уменьшить скорость движения звёзд Теперь можно настроить её по своему вкусу... Скорость движения звёзд не зависит от производительности железяки, на которой запущена игра. ПС: менюшки ПРИВЯЗАНЫ к разрешению экрана 1024х768 Но это временно 29 August 2005 года Свершилось ДОЛГОЖДАННОЕ событие: ПЕРВЫЙ релиз программы 30 August 2005 года Я завел файл истории history.txt, в него пишу изменения начиная с первого релиза. Вот его сегодняшнее состояние: Исправлено: 1. Если при вводе имени игрок нажимал клавишу F, то флаг показа ККС (FPS) менялся на противоположный. 2. Невозможно было ввести имя русскими буквами. Оказалось, что функция Trim(), которая должна удалять пробелы вначале и в конце слова, русские символы считает пробелами. Написал свою функцию fnTrim$(). Добавлено: 1. Показ ЧИСЛА, которое должно стоять на месте клетки, на которую наведён указатель мыши. Чтобы увидеть это число, необходимо навести указатель мыши на нужную клетку и нажать клавишу Ctrl. При этом другие числа исчезнут. Такая возможность особенно полезна при игре на большом поле. Оптимизация: -делалась с учётом текущих изменений программы -ККС - это количество кадров в секунду 1. Для определения числа, которое должно стоять на месте клетки, на которую наведён указатель мыши, использовался отдельный цикл, пробегающий по всем клеткам поля. Убрал отдельный цикл: сделал проверку в цикле, рисующем клетки. К своему разочарованию прироста ККС не получил. Причина: рассматривалось игровое поле 15х15 клеток, то есть цикл проверки делал бы максимум 225 операций, но это достаточно мало для современных компьютеров. 2. Можно было сделать таблицу значений синуса (массив), и использовать её вместо самой функции. Но значение угла дробное, и к тому же зависит от текущего значения ККС, поэтому и пишу "можно было" (реализация невозможна). Расширение экрана 1024х768, много режимов делать не стал... 31 August 2005 года Исправлено: ОЧЕНЬ СИЛЬНО облегчил себе жизнь введением 2х глобальнах переменных для хранения состояния нажатости кнопок мыши. В начале главного цикла (и только в начале): Mouse1Hit = MouseHit (1) Mouse2Hit = MouseHit (2) Все условия типа if (MouseHit(1)) заменил на if (Mouse1Hit=1). Проблема была в том, что щелчок мыши проверяется несколько раз за 1 проход цикла, НО после 1-йпроверки буфер мыши обнуляется, и получается, что надо либо жать несколько раз, либо при нажатии на "пустом месте" и наведении на меню меню срабатывало. в первой демке ТАКОГО не было, но я времени прилично потратил на устранение Добавлено: 1. Звёзды теперь летят с ускорением. 2. Сделал статичные звёзды картинкой. 3. В Главном меню добавил пункт "Новый игрок". Теперь после выхода из игры в Главное меню для того, чтобы заново сыграть или загрузить игру НЕ НУЖНО заново вводить имя - будет использовано ранее введённое имя. Если при вводе новогоимени игрок нажал Esc, чтобы отменить ввод имени, текущем именем будет то, которое было ДО ввода. 4. Добавил сохранение / загрузку. Можно включить режим автосохранения (по умолчанию), при этом после составления всех чисел игра будет сохранена, причём размер поля будет записан на 1 больше чем то, цифры на котором игрок только что составил. Клавиша A - вкл. / выкл. автосохранение. /* В следующей версии кроме всего прочего будет поддержка разных граф. режимов (640х480, 800х600, 1024х768), в том числе и оконные. */ Народ, кто до какого размера поля доходил? Это я к тому пишу, чтобы вы не удивлялись, почему таблица рекордов ТАК СДВИНУТА ВНИЗ. Дело в том, что положение этой таблицы я выбирал исходя из того, чтобы можно было НОРМАЛЬНО отображать рекорды ВПЛОТЬ до поля 25х25 клеток. После поля 7х7 прямоугольники с надписями размера поля сдвигаются вниз, и в ИТОГЕ получаем 4 СТРОКИ рекордов, последняя закончится на 25х25. Если дойдёте до 26х26 или дальше (на экран столько не влезет пока), ВСЕ отобразится правильно, НО надписи "залезут" на баблицу рекордов... Насчёт звёзд: ускорение заметно? Просьба особое внимание уделить СОХРАНЕНИЮ / ЗАГРУЗКЕ. Что-то может работать неправильно... 04 September 2005 года Заменил ТЕКСТ на аналогичные КАРТИНКИ везде, где смог. Вывожу Text'ом только имя игрока, время, ходы, процент собранности, числа на игровом поле, и подсказки, которые выводятся при наведении на пункт меню. Картинки делал вот так: imgTitle = fnTextToImg("z a DOOM k a",200,30) А сама функция такая: Код:
Function fnTextToImg(p_text$,p_w,p_h,p_rcR=0,p_rcG=0,p_rcB=200,p_tcR=200,p_tcG=200,p_tcB=0,p_font=0,p_midhandle=0) Примитив, конечно, но не в том суть! Зато внешние ресурсы грузить не надо В демке версии 1.1 в ИГРЕ у меня было 38 кадров (очень странное число, почти во всех проектах оно проглядывается), а ТЕПЕРЬ стало 75! В меню как было, так и осталось, причем рекорды я вывожу ОДНОЙ картинкой. Если выводится 6 рекордов, то ФПС в районе 70-ти, а если 13, то 37! :> |
приаттач сюда что уже готово, чтоб можно было отсюда скачать :)
|
Не забудь исходники ;) :@
|
Надо сначала цифры на игровом поле сделать тоже КАРТИНКАМИ, но это быстро, значит скоро выложу.
Насчет исходников: я планирую написать тутор типа "Как это было: Пятнашки", в котором опишу процесс создания (может в журнал попадет даже), но сначала доделаю! Сразу по ходу писать не хочется... Еще нужно сделать "сбор по образцу" (щас только по порядку) + сетевая игра хотя бы на 2х человек (на перегонки, кто быстрее). Сеть - по учебе задали прогу написать, работающую с сетью - думаю вполне сойдет. alcoSHoLiK, нафига тебе исходник сдался? (это может комерческий проект будет! ;) ) |
Цитата:
Также вынес параметр VWait функции Flip() в файл system.txt. Советую попробовать разные параметры вписать (0 и 1). ПС: На таком компе игра выдает 50 ФПС, а если убрать синхро с монитором, то 80. AMD Sempron 2600+ (1.88 ГГц) Radeon 9550 128Mb RAM 512Mb Почему так мало? Чего еще добавить? - Качаем новую демку. Размер 490 кб. Упс! ??? А как файл приаттачивать сюда? |
Проверил.... можно выливать файлы до 5 метров, только где прописывать разрешения для выливаемых файлов так и не нашел, но уже точно знаю, екзешники не идут. :)
|
Вложений: 2
Вот демка последняя
490 кб |
пробовал RAR - сказал нельзя такой тип файлов заливать, но при этом ЗАЛИЛ его!...
|
я посмотрел канеШна демку!!!!
мне понравилось) я первый уровень прошел!!! все нормуль! Классная задумка, но, сам понимаешь, что такая игра на своеобразный круг людей рассчитана, а так-интересно!!! даж оч. прикольно! |
Спасибо за отзыв!
А вообще, ВСЕ игры на своеобразный круг.... |
А работа над пятнашками продолжается???
Буду ли еще улучшения? (или только дорадатывается то, что уже есть) |
Часовой пояс GMT +4, время: 05:20. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot