Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2010, 20:32   #1
Alex Roth
Пользователь
 
Аватар для Alex Roth
 
Регистрация: 15.05.2010
Сообщений: 11
Вопрос Спрайтовый 2D движок на Borland C++ Builder 6.0

Доброго времени суток, уважаемые форумчане! Я работаю над движком в Borland C++ Builder 6.0 и возникло несколько вопросов:
1. Как из стрипа, хранящегося в отдельном файле, выделить определенный кусок анимации?
Рисую на Canvas, загружаю стрип в TPicture.
2. Как сделать попиксельную проверку столкновений?
3. Возможно ли получить полноэкранный режим БЕЗ использования различных сторонних SDK?

Заранее спасибо ! (прошу прощения, если создал схожую тему, но в поиске ничего подобного не обнаружил )
"Один человек может спасти весь мир. При условии, что один человек может этот мир уничтожить." (c)
"Bad side of mind seize my dreams..." (c)
Alex Roth вне форума Ответить с цитированием
Старый 16.05.2010, 07:42   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

1. (Загружали бы лучше в TBitmap - он сам по себе TGraphic) С помощью функции CopyRect. Создаете новый TBitmap по размеру кадра. Зная размер кадра и номер нужного кадра, копируете прямоугольник CopyRect'ом в TBitmap, потом рисуете Draw его, удаляете TBitmap - это если вам нужна прозрачность. Если прозрачность не нужна, то вообще забываете про TBitmap и выводите CopyRect'ом прямо на экран (или лучше - на буфер)
2. Первым делом находите прямоугольник, по которому пересекаются два объекта. Затем проверяете каждый пиксель этого прямоугольника - т.е. сразу два пикселя из двух прямоугольников двух изображений. Если оба пикселя имеют цвет отличный от цвета прозрачности - вуаля! столкновение есть!
3.
Код:
Form1 -> BorderStyle = bsNone;
Form1 -> ClientWidth = /*Ширина экрана*/;
Form1 -> ClientHeight = /*Высота экрана*/;
Form1 -> Top = 0;
Form1 -> Left = 0;
Form1 -> FormStyle = fsStayOnTop;
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 16.05.2010, 07:54   #3
Alex Roth
Пользователь
 
Аватар для Alex Roth
 
Регистрация: 15.05.2010
Сообщений: 11
По умолчанию

Спасибо большое! С CopyRect'ом еще вчера разобрался, а вот со столкновениями не допер . А есть на форуме какой-нибудь примерчик считывания значений из файла построчно? (за файловую систему только взялся, трудновато )

P. S. А можно ли задать фиксированное разрешение экрана в вашем примере? Просто я так уже делал - это не совсем то, что нужно(
"Один человек может спасти весь мир. При условии, что один человек может этот мир уничтожить." (c)
"Bad side of mind seize my dreams..." (c)

Последний раз редактировалось Alex Roth; 16.05.2010 в 07:57.
Alex Roth вне форума Ответить с цитированием
Старый 16.05.2010, 08:08   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

То есть прочитать отдельно каждую строку файла? Можно, например, так:
Код:
TStringList* TextFile = new TStringList;
FieldFile -> LoadFromFile(FieldFileName);
AnsiString s;
for (int i = 0; i < FieldFile -> Count; i++)
   {
   s = FieldFile -> Strings[i]
   //Здесь вы что-то делаете со строкой
   }
Насчет фиксированного разрешения не знаю, но думаю, через WinAPI как-то можно. А как установите - можно спокойно делать как сказано выше.

Вот, кстати, пара тем на форуме на этот счет - правда, на Delphi. Бегло посмотрел - вроде оно:
http://programmersforum.ru/showthread.php?t=32077
http://programmersforum.ru/showthread.php?t=92147
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же

Последний раз редактировалось Гром; 16.05.2010 в 08:14.
Гром вне форума Ответить с цитированием
Старый 16.05.2010, 08:21   #5
Alex Roth
Пользователь
 
Аватар для Alex Roth
 
Регистрация: 15.05.2010
Сообщений: 11
По умолчанию

Благодарю, попробую так сделать
"Один человек может спасти весь мир. При условии, что один человек может этот мир уничтожить." (c)
"Bad side of mind seize my dreams..." (c)
Alex Roth вне форума Ответить с цитированием
Старый 16.05.2010, 08:33   #6
Alex Roth
Пользователь
 
Аватар для Alex Roth
 
Регистрация: 15.05.2010
Сообщений: 11
По умолчанию

Спасибо, все работает. Только вы имя объекта перепутали
Я подправил, может кому-то пригодиться:
Код:
TStringList *TextFile=new TStringList();
  TextFile->LoadFromFile( TextFileName );
  AnsiString s;
  for (int i=0; i < TextFile->Count; i++ )
  {
    s=TextFile->Strings[i];
    //Действия со строкой
  }
"Один человек может спасти весь мир. При условии, что один человек может этот мир уничтожить." (c)
"Bad side of mind seize my dreams..." (c)
Alex Roth вне форума Ответить с цитированием
Старый 16.05.2010, 09:30   #7
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Ага, забыл подправить!)
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 16.05.2010, 13:04   #8
Alex Roth
Пользователь
 
Аватар для Alex Roth
 
Регистрация: 15.05.2010
Сообщений: 11
По умолчанию

Со стрипами разобрался окончательно . Решил передавать их компоненту TImageList. Скорость работы вполне устраивает. У кого-нибудь есть примеры использования функций ChangeDisplaySettings и EnumDisplaySettings? В справке Windows SDK примеры вообще отсутствуют, а сам понять не могу
"Один человек может спасти весь мир. При условии, что один человек может этот мир уничтожить." (c)
"Bad side of mind seize my dreams..." (c)
Alex Roth вне форума Ответить с цитированием
Старый 16.05.2010, 13:29   #9
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
Решил передавать их компоненту TImageList
Ну не знаю... Мне как-то больше нравится использовать стандартные контейнеры (например, map - проиндексировать TBitmap по строке-идентификатору) и обычные массивы.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 16.05.2010, 13:35   #10
Alex Roth
Пользователь
 
Аватар для Alex Roth
 
Регистрация: 15.05.2010
Сообщений: 11
По умолчанию

Ну... На вкус и цвет, как говорится.
Цитата:
Мне как-то больше нравится использовать стандартные контейнеры (например, map - проиндексировать TBitmap по строке-идентификатору) и обычные массивы.
Можно поподробней? Не совсем (скорее совсем не ) понял, о чем идет речь .
"Один человек может спасти весь мир. При условии, что один человек может этот мир уничтожить." (c)
"Bad side of mind seize my dreams..." (c)
Alex Roth вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Borland C++ Builder m@rusl@12 C++ Builder 1 25.04.2010 15:47
c++ Borland builder 4ika C++ Builder 1 27.11.2009 20:32
работа со StringGrid(borland C++ builder) Greenoren Помощь студентам 4 20.11.2009 22:57
Проблема с установкой Borland C++ Builder 6!!! seeker78 Помощь студентам 4 21.09.2009 20:04
Borland C++Builder 2007 Sota Софт 1 14.03.2008 20:21