![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#91 |
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
![]()
А вот ещё недочёт. С первым уроком, как я уже говорил всё понятно, НО прикол в том что если использовать Form1.Canvas.Draw(130,50,Buf); потом свернуть и развернуть экран - картинка исчезнет...
|
![]() |
![]() |
![]() |
#92 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
![]()
Да! Такой глюк присутствует.При изменении размеров окна запускается процедура TForm4.FormPaint(Sender: Object);
Самый простой способ избавиться от этого, дабы не бороться программно, это в Object Inspector в свойствах Form 4 - BorderIcons все четыре параметра установить в False, отключив тем самым системные кнопки управления окном. Пойдем дальше знакомиться с программой. Теперь начнем непосредственно работать с программой. Первое: составим алгоритм взаимодействия между формами в виде блок – схемы. Вообще составление блок-схем очень важная часть программирования. Приучите себя постоянно пользоваться этим инструментом. Это генеральный план разработки программы. Он позволяет постоянно видеть процесс создания программы, незаменим при отладке и поисках ошибок. Все переходы между формами у нас происходят по событиям OnClick кнопок меню, за исключением вывода заставки и справки по On Paint на Form 1 и Form 2. Блок – схема 1 во вложении. Позже составим алгоритм работы программы непосредственно в Form 4 - основная программа.
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
![]() |
![]() |
![]() |
#93 |
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
![]()
С этим ясно, возможно нам следует уже начать программировать сам игровой мир?
|
![]() |
![]() |
![]() |
#94 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
![]()
Хорошо, Денис! Идем дальше.Правда, что-то Алекса не видно.Подозреваю он еще учится.
Смотрим загрузку новой игры. Теперь основное - весь алгоритм программы в Unit4 и Form4. Начнем с построения уровня. Итак : склад – это 15 на 15 блоков по 50 на 50 пикселей. Каждый блок сначала надо нарисовать (ручками-ручками).Впрочем можно и слямзить откуда нибудь и доработать под свои нужды. Я лично рисую в Paint-е.Далее – каждый блок имеет свой индекс ( см. выше цифры в скобках).Файл каждого блока записываем в файл ресурсов Unit4.res. Структуру каждого уровня, т. е. индексы блоков будем хранить в двухмерном массиве: mas : TIndex = array [0..14,0..14] of integer; а все уровни в одномерном массиве двухмерных массивов TIndex: all_mas: array[0..59] of TIndex; - начальные значения, как const, а текущие в mem_mas: array [0..59] of TIndex ; - как переменная (текущие значения по ходу игры будут изменяться с каждым ходом). Все начальные значения индексов каждого уровня заносим в массив all_mas опять же рученьками. Да-да, только так.Представте – 60 уровней по 15*15=225 .А если уровней еще больше? Вот так! Частенько программирование – это рутинная работа. Далее просто – см. процедуры StroySklad и StroySegement . В первой используем два цикла for, а во второй уже знакомый метод с буфером TBitMap. Карта уровней . Изначально при любом включении игры карта загружается из файла ресурсов Unit4.res уже известным нам методом Draw через буфер TBitMap. Смотри процедуру StroyMap. Сама карта показывающая начальное состояние всех уровней, рисуется вручную(опять!).Говорю же , что рутины тут навалом. Потом только надо выделить текущий уровень - делаем желтую окантовку по периметру уровня . Для этого используем метод заливки области FloodFill ( x,y – координаты точки внутри (обязательно замкнутой) области; color – цвет заливки; fsSurface – тип заливки). Смотри процедуру FillBorderMap. При переходах между уровнями убираем окантовку на старом уровне и отрисовываем на новом. Когда по ходу игры все сундуки установлены на свои места , уровень выделяется - изменяется картинка (схематично показано собранный уровень) и устанавливается ярко-зеленый фон. Каждый такой собранный уровень вырисовывался отдельным файлом 46 х 46 пикселей и затем записаны в ImageList. Индекс файла в ImageList совпадает с номером уровня (склада). Затем по необходимости каждый такой файл накладывается на основную карту процедурой SkladSobran c использованием координат уровней на карте - KoordMap. Атрибуты индикации - визуальные компоненты, брошенные на форму с использованием их свойств. Здесь , мне кажется, также все просто и понятно. Но если это не так – спрашивайте. Я постарался отразить структуру программы со всеми вложениями процедур, как они происходят по мере их вызовов. В квадратах отдельные процедуры с некоторыми пояснениями сути процессов.Блок-схема поможет разобраться с последовательностью работы начальной части программы. В след. раз разберем загрузку сохраненной Игры. Во вложении блок-схема 2 начала с новой Игры.
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
![]() |
![]() |
![]() |
#95 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
![]()
Да! Формат JPEG нормально не прочитаешь.Сам проверил.Повторю вложение блок-схемы 2 в другом формате.
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
![]() |
![]() |
![]() |
#96 | |
Телепат с дипломом
Старожил
Регистрация: 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)
Проверь себя! Онлайн тестирование | Мой блог |
|
![]() |
![]() |
![]() |
#97 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
![]()
И это, конечно, правильно.НО!Если быть точным, то картинка не исчезает,
а перерисовывается и появляется Игра с начального уровня. Т.е. теряем все то что мы "набегали".Получится, что надо будет периодически после каждого хода или через какие-либо промежутки времени сохранять экран в буфер, чтоб при перерисовке по OnPaint восстановить именно последний текущий сюжет. Это, конечно вполне возможно, но будет громоздко. Поэтому считаю вариант с исключением системного управления более рациональным. Но я же повторяю - вносите любые изменения в проект. Это только на пользу.
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
![]() |
![]() |
![]() |
#98 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]() Цитата:
А если нужно на минуту открыть другую программу, куда игру девать? Мое изменение в проект - либо рисовать в TImage, либо обрабатывать перерисовку.
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)
Проверь себя! Онлайн тестирование | Мой блог |
|
![]() |
![]() |
![]() |
#99 | |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
![]() Цитата:
15 х 15 = 225 Image, т. к. алгоритм построен на принципе работы с каждым блоком отдельно.
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
|
![]() |
![]() |
![]() |
#100 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
Отрисовка в Image:
Код:
Код:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
"Калькулятор в Delphi" в теоретические аспекты??? | jenja | Общие вопросы Delphi | 1 | 25.05.2008 23:23 |
основные цели и задачи студенческого форума? | ALEXBAZ | Свободное общение | 1 | 14.05.2008 22:24 |
комп. для программирования | фамил | Компьютерное железо | 4 | 09.05.2008 12:11 |
Неделя программирования | Stiker | Свободное общение | 2 | 10.02.2008 21:15 |