![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
В этой теме я расскажу, как написать на Delphi модель солнечной системы. Заодно читатель узнает как можно применить тригонометрию, в частности синус, на практике. Модель будет простая, утрированная, цель урока не сама солнечная система, а заюзать синус.
Система будет в 2D на чистом VCL, т.е. на чистом Delphi. Уровень подготовки - для начинающих. Все желающие могут задавать вопросы. Также можно оставлять комментарии. Пост со следующей частью урока я буду обозначать лампочкой.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
![]() |
![]() |
![]() |
#2 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
Итак приступим. Как вам наверное известно, солнечная система представляет собой солнце и вращающиеся вокруг него 9 планет. Каждая из них имеет свою орбиту, свою скорость, массу и т.д. Я сильно не буду придерживаться реализма, и попытаюсь умесить всю нашу систему так, чтобы все планеты были видны, и при этом различимы. То же касается размера солнца. Единственный параметр к-рый я хочу соблюсти это период обращения, при этом программа будет определять парад планет, если я не ошибаюсь это когда все планеты выстраиваются в ряд. К тому же орбиты планет представляют собой не круг, а вытянутый эллипс, у меня будет круг, опять же для простоты. Параметры планет я взял отсюда, желающие могут ознакомиться
http://www.astronet.ru/db/msg/eid/FK86/planets Заканчиваем с астрономией, переходим к программированию. Готовый исходник я давать не буду по двум причинам, во первых его еще нет, а во вторых в целях лучшего понимания материала, код буду давать постепенно по частям, но весь. Кроме синуса, также будут рассмотрены структуры (они же записи), битмапы (TBitmap), анимация (передвижение планет), массивы, работа с массивами в цикле, все это используется в программировании игр.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
![]() |
![]() |
![]() |
#3 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
Создайте проект. Свойствам формы в инспекторе объектов задайте значения:
Left 0 Top 0 ClientWidth 800 ClientHeight 600 Теперь киньте на форму таймер. Задайте ему интервал 20 мс. Interval 20 Теперь немного попишем код. Сначала определимся с планетами. Создадим структуру TPlanet с полями содержащими свойства планеты. Код:
Затем объявим нужные глобальные переменные. Нам понадобятся два битмапа, один для фона — cosmos, второй для буфера — buffer. Буфер — это область памяти в к-рой будет строиться изображение перед выводом его на экран. Еще нам понадобится массив планет — planets. Пока все. Код:
Код:
Создаем космос, это у нас фон. Задаем ширину меньшую на 200, чем ширина формы, в правой части формы у нас будут несколько элементов управления, но это потом. Задаем высоту равную высоте формы. Задаем кисти канвы фона черный цвет. Заливаем фон целиком черным цветом. И рисуем 100 белых пикселей в случайных местах, это будут звезды. Затем создаем буфер. Теперь нам нужно задать размеры буферу, и скопировать в него изображение из фона. Вместо того, чтобы писать несколько строк кода, просто скопируем его функцией Assign. Она копирует не только изображение, но и все другие свойства битмапа, делает полную его копию. Осталось немного, и наш космос можно будет увидеть. В обработчике таймера (чтобы его создать кликните дважды по таймеру на форме) запишите одну строку Код:
Код:
В ней мы копируем фон (космос со звездами) в буфер. И второй строкой выводим буфер на канву формы, т.е. на экран. Спросите, зачем нужен буфер? Потом узнаете. Теперь жмите F9. На форме должен появиться космос со звездами, и справа свободное место.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
![]()
А перед закрытием программы не надо очищать буферы? А то мы так всю
системную память засорим.
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]()
В Delphi не нужно. Там есть уборщик мусора.
|
![]() |
![]() |
![]() |
#6 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
![]()
А во многих учебниках настоятельно рекомендуют после вывода из буфера типа TBitMap информации на форму включать очистку буфера
Buffer.Free; И по программе: а не проще ли создать черный фон, указав в Object Inspector в свойстве формы Color - clBlack ?
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
![]() |
![]() |
![]() |
#7 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
Чистить нужно только если вы самостоятельно выделили память для своего буфера (есть такие способы, для быстрой работы), ...в стандарте Delphi сам уберет свои "потроха", если не произойдет какой-либо сбой в программе, который не позволит выполнить освобождение памяти, ...именно поэтому рекомендация принудительного очищения описана всюду.
ИМХО задник со звездами - фотография с Хабла гораздо интереснее черного экрана с самодельными звездочками ) ... синусов тут нету, поэтому может сразу приучать к качеству? ...ну, не знаю, ...у меня руки всегда чешутся как-то придать реализму. На заметку: планет всего 8, а 9-я - это астероид прилетевший с астероидного пояса ) ...называйте вещи своими именами ), ...ну, да Бог с этим, мы же не астрономы, и хорошо что таковых тут нет, иначе нас бы просто убили за 9 планет ))))
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 21.08.2008 в 15:16. |
![]() |
![]() |
![]() |
#8 | |||
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]() Цитата:
А если учитывать возможность сбоя, то и свой код освобождения памяти может так же не выполниться из-за сбоя, на то он и сбой. Вы со мной несогласны? Это как недавно был спор по поводу инициализации нулями. На мое высказывание что при создании объекта память под него заполняется нулями, мне ответили что полагаться на это не стоит, и лучше самому присвоить полю ноль. Но ведь само создание объекта эти же люди доверяют Дельфи, не пишут ведь свой код создания, а вот нули не доверяют, нужно руками вписать. Цитата:
Цитата:
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
|||
![]() |
![]() |
![]() |
#9 | |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
![]() Цитата:
По поводу мнений о фоне и т.п. вопросам, думаю, раз каждый кто по ходу урока пишет сам код в соответствии с рекомендациями mutabor, то можно вносить какие-то сои изменения в проект, не касающиеся глобального изменения идеи проекта.Более того потом интересно сравнить разные варианты реализации проекта.
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
|
![]() |
![]() |
![]() |
#10 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
Думаю, тут особо вариантов не наделать, все предельно просто и однозначно с системой Солнца, 8-и планет и одного астероида )))) ... тут только на нюансы вывода графики и оформления, ...через таймер смена ула и радиуса для всех планет и астероида ))) ...с задержкой через счетчик.
Дождемся официальной версии от автора, собственно, он создал урок и делится опытом, ...а потом все изменения, если таковые потребуются, в чем я лично сомневаюсь.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 21.08.2008 в 19:39. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Знакомство с одноклассниками | Alar | Свободное общение | 10 | 03.07.2008 22:20 |
Файловая система | student_63 | Win Api | 1 | 12.04.2008 20:29 |
Система координат | SunKnight | Общие вопросы Delphi | 2 | 05.02.2008 19:42 |