Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Проекты > Проекты на Blitz3D

Проекты на Blitz3D Обсуждение будущих проектов, демок, набор команды и т.п.

Ответ
 
Опции темы
Старый 05.09.2005, 11:16   #1
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Еще несколько слов о количестве ФПС.
То, что я текст заменил картинками, кому надо было - прочитали.

Но оказалось, что дело было НЕ только в этом
ФПС падал на прорисовке СЕТКИ игрового поля.
Вот как я это делал:

Function fnDrawGrid(clr=110)
Color (clr,clr,clr)

;vertical lines
For i = offsetX To (offsetX+GridInterval*sizeField) Step GridInterval 
	Line i,offsetY,i,offsetY+GridInterval*sizeField
Next 

;horizontal lines
For i = offsetY To (offsetY+GridInterval*sizeField) Step GridInterval
	Line offsetX,i,offsetX+GridInterval*sizeField,i
Next 

End Function
При таком выводе сетки получаю 38-42 ФПС.

А когда заменил эту функцию на вывод картинки, на которой нарисована сетка таким же как выше способом, то ФПС стал 68-75.
Вот так вот


ПС: у меня "пустая" прога вида

Repeat
Cls
;Тут считаем ФПС
Text 10,10,fps
Flip
Forever
выдает 75 ФПС, хоть в 2д, хоть в 3д режиме.
В игре тоже 75, выходит есть какая-то синхронизация с частотой обновления экрана монитора (у меня 75 Гц), которая не позволяет выдавать больше

Кто-нить знает, почему так происходит (ограничение)?
(Offline)
 
Ответить с цитированием
Старый 05.09.2005, 15:21   #2
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Originally posted by Жека@Sep 5 2005, 09:16 AM
выдает 75 ФПС, хоть в 2д, хоть в 3д режиме.
В игре тоже 75, выходит есть какая-то синхронизация с частотой обновления экрана монитора (у меня 75 Гц), которая не позволяет выдавать больше

Кто-нить знает, почему так происходит (ограничение)?
да, на самом деле у команды Flip есть необязательный параметр [vwait] который определяет ждать-ли системе обратного хода луча...

дело в том, что если вдруг допустим ты отключишь ожидание луча и ФПС поднимется одпустим до 80 или 90 ты увидишь моргание на экране (на ЖК не сильно заметно будет) почему это происходит:

луч (прорисовывающий изображение на экране) идет сначала от левого верхнего угла экрана до правого верхнего по одной строке (строчная развертка), после того, как он прошел строку он возвращается на ее начало но теперь сдвигается на одну строку вниз (как типа возврат каретки) (кадровая развертка) и так до конца (низа) экрана... когда луч достигает низ экрана он возвращается обратно (время возврата примерно такое-же как и время прорисовки). А так оно потому, что сетке экрана надо дать остыть до черного цвета. Эти два действия происходят у тебя 75 раз в секунду, дак вот, видеокарта следит за лучем и старается прорисовать экран в тот момент когда сетка остужена (идет обратный ход луча) и экран в это время не прорисовывается, теперь когда луч пойдет заново прорисовывать экран, то будет уже нарисована новая картинка...

Рассмотрим теперь вариант "косого" обновления экрана, луч допустим до середины дорисовал одну часть изображения и тут поступил flip и говорит нужно рисовать другую... здесь зависит от видеокарты:

1. она вообще откажется передавать новое изображение на экран до начала обратного хода луча и оставльная половина экрана будет черной. (что вызовет мигание).

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

такие весчи (flip 0) стоит делать если у тебя ФПС будет примерно 150 или больше.
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 05.09.2005, 15:42   #3
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Спасибо! Теперь ВСЕ ясно. Можно было не так подробно, за что еще раз спасибо.
(Offline)
 
Ответить с цитированием
Старый 05.09.2005, 15:46   #4
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Смех

Originally posted by Жека@Sep 5 2005, 01:42 PM
Можно было не так подробно, за что еще раз спасибо.
Позволю себе повториться: этот пост будет тут долго лежать и мож кому еще почитать захочется, чтоб всем все понятно былО
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 05.09.2005, 16:08   #5
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Собственно, с чего все начиналось? С того, что я начал искать художника (или дизайнера, как кому нравится) и музыканта. Пусть это и выглядит смешно (набирать команду для создания "пятнашек"), но почему бы и нет?
Я И СЕЙЧАС НЕ ОТКАЖУСЬ ОТ ПОМОЩИ, и в титры включу обязательно.

Получилось сзаду-наперед, но все же перекопирайтю некоторые посты со "старого" форума. Дабы внушить уверенность в потенциальных напарников.


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х76, в том числе и оконные.
*/

Народ, кто до какого размера поля доходил?
Это я к тому пишу, чтобы вы не удивлялись, почему таблица рекордов ТАК СДВИНУТА ВНИЗ. Дело в том, что положение этой таблицы я выбирал исходя из того, чтобы можно было НОРМАЛЬНО отображать рекорды ВПЛОТЬ до поля 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)
img = CreateImage (p_w,p_h)
SetBuffer (ImageBuffer (img))

Color (p_rcR,p_rcG,p_rcB)
Rect (0,0,p_w,p_h)

If (p_font<>0) SetFont (p_font)

Color (p_tcR,p_tcG,p_tcB)
Text p_w*0.5,p_h*0.5,p_text$,1,1

If (p_midhandle<>0) MidHandle (img)

SetBuffer (BackBuffer ())

Return img

End Function

Примитив, конечно, но не в том суть! Зато внешние ресурсы грузить не надо

В демке версии 1.1 в ИГРЕ у меня было 38 кадров (очень странное число, почти во всех проектах оно проглядывается), а ТЕПЕРЬ стало 75!

В меню как было, так и осталось, причем рекорды я вывожу ОДНОЙ картинкой.
Если выводится 6 рекордов, то ФПС в районе 70-ти, а если 13, то 37! :>
(Offline)
 
Ответить с цитированием
Старый 05.09.2005, 16:27   #6
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Сообщение

приаттач сюда что уже готово, чтоб можно было отсюда скачать
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 06.09.2005, 00:26   #7
alcosholik
 
Сообщений: n/a
Не забудь исходники
 
Ответить с цитированием
Старый 06.09.2005, 10:10   #8
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Надо сначала цифры на игровом поле сделать тоже КАРТИНКАМИ, но это быстро, значит скоро выложу.

Насчет исходников: я планирую написать тутор типа "Как это было: Пятнашки", в котором опишу процесс создания (может в журнал попадет даже), но сначала доделаю! Сразу по ходу писать не хочется...

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

alcoSHoLiK, нафига тебе исходник сдался?
(это может комерческий проект будет! )
(Offline)
 
Ответить с цитированием
Старый 07.09.2005, 19:10   #9
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Надо сначала цифры на игровом поле сделать тоже КАРТИНКАМИ
Сделал!

Также вынес параметр VWait функции Flip() в файл system.txt. Советую попробовать разные параметры вписать (0 и 1).


ПС: На таком компе игра выдает 50 ФПС, а если убрать синхро с монитором, то 80.

AMD Sempron 2600+ (1.88 ГГц)
Radeon 9550 128Mb
RAM 512Mb

Почему так мало?

Чего еще добавить? - Качаем новую демку.

Размер 490 кб.

Упс! ???
А как файл приаттачивать сюда?
(Offline)
 
Ответить с цитированием
Старый 07.09.2005, 19:13   #10
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Проверил.... можно выливать файлы до 5 метров, только где прописывать разрешения для выливаемых файлов так и не нашел, но уже точно знаю, екзешники не идут.
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 08.09.2005, 20:39   #11
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Вот демка последняя

490 кб
(Offline)
 
Ответить с цитированием
Старый 08.09.2005, 20:41   #12
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
пробовал RAR - сказал нельзя такой тип файлов заливать, но при этом ЗАЛИЛ его!...
(Offline)
 
Ответить с цитированием
Старый 11.09.2005, 12:48   #13
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
я посмотрел канеШна демку!

мне понравилось)
я первый уровень прошел

все нормуль! Классная задумка, но, сам понимаешь, что такая игра на своеобразный круг людей рассчитана, а так-интересно даж оч. прикольно!
(Offline)
 
Ответить с цитированием
Старый 12.09.2005, 07:54   #14
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Спасибо за отзыв!

А вообще, ВСЕ игры на своеобразный круг....
(Offline)
 
Ответить с цитированием
Старый 12.09.2005, 10:27   #15
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
А работа над пятнашками продолжается???
Буду ли еще улучшения? (или только дорадатывается то, что уже есть)
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли сделать так чтобы при нажатии "вверх" и "вниз" двигалась одна картинка, а при нажатии "вправо" и "влево" - другая Total_Nube_&_Lamo Основной форум 2 13.12.2009 22:00
"Кодирование/декодирование изображений", или "Давайте попробуем скрыть ресурсы мидлетов" Richik Библиотеки 17 03.06.2009 14:18
"DarkWing Duck" aka "Черный Плащ" Chrono Syndrome Болтовня 19 04.12.2007 16:05
Игра "Три слова". Рассказ "Время планет" Ilyich Юмор 77 02.04.2007 17:49
"Пополнение рядов" или "Слава роботам!" impersonalis Юмор 1 15.08.2006 23:54


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com