Форум: "Media";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
ВнизНебольшой и, должно быть, лёгкий вопросик по DelphiX Найти похожие ветки
← →
JohnJ (2003-07-30 01:17) [0]Мастера! Помогите пожалуйста! Изучаю сам DelphiX, и вот что делаю:
Кидаю на форму DXDraw и DXImageList. В DXImageList1 в свойстве DXDraw выбираю DXDraw1, а в свойство Items добавляю одну картинку. В DXDraw1 ставлю Align в alClient. И в процедуре TForm1.OnCreate пишу следующее:
DXImageList1.Items[0].Draw(DXDraw1.Surface,1,1,0);
Не рисует картинку... Почему? Вся форма просто чёрным закрашивается.
← →
A_n_t (2003-07-30 05:19) [1]Возьми штатный пример из компонентов DelphiX, там все просто и понятно.
← →
iXuSs (2003-07-30 12:11) [2]Не в OnCreate надо, а в OnShow формы или в OnActivate TDXDraw. При этом не забывай про TDXDraw.Flip, иначе ничего не увидишь.
← →
JohnJ (2003-07-31 01:02) [3]A_n_t: В том то и проблемма! Есть у меня такой пример, и описание как сделать... Пример работает, а когда я сам делал всё как там написано - комп вис!!! Когда я сверил все строчки - всё абсолютно идентично... Значит я где-то в свойствах что-то не то сделал? Вот и решил попробовать просто - вывести картнику... Комп не завис, но картинки всё-равно нет! :( Помоги, плиз!
iXuSs: Сделал так: Дописал перед выводом картинки строчку DXDraw1.Flip; Проверил - ничё нового. Тогда добавил на форму кнопку Button1, и на событие OnClick поставил процедуру FormCreate (сделал это в Object Inspector, а не динамически (это я чтобы лишние вопросы отмести)). Запускаю... Чёрная форма... Нажимаю один раз на кнопку - чёрная форма... Нажимаю ещё раз на кнопку - появляется картинка! В чём может быть причина, даже понятия не имею, объясните, плиз, и как этого избегать?
← →
A_n_t (2003-07-31 01:23) [4]Немного теории:
При обычной работе с графикой используется в памяти 2 surface(картинки):
1 – backbuffer
2 - primary
Видео карта постоянно с частотой монитора показывает primary,
а рисование новой графики происходит в backbuffer.
И самое главное: процедура DXDraw1.Flip меняет местами backbuffer и primary, то есть теперь показывается, то что нарисовали в backbuffer.
Поэтому DXDraw1.Flip необходимо ставить не перед рисованием картинки, а после.
← →
JohnJ (2003-07-31 01:44) [5]Ну вот! Теперь с первого нажатия на кнопку рисуется! :) Остаётся последний вопрос: А почему при создании формы не хочет???
← →
JohnJ (2003-07-31 01:48) [6]Кстати, спасибо A_n_t за теорию и iXuSs за "наталкивание" на Flip
← →
A_n_t (2003-07-31 07:29) [7]Если я правильно понимаю, то при создании формы происходит и инициализация DXDraw1, то есть создается все необходимое для работы с DirectX, поэтому и не рисует.
← →
iXuSs (2003-07-31 22:10) [8]> А почему при создании формы не хочет???
A_n_t правильно сказал. Раньше, чем TDXDraw.OnInitialize лучше вообще с ним ничего не делай.
Вот ещё на всякий случай ньанс. Если будешь использовать TDXTimer, не перепутай OnActivate и OnTimer - а то в простом таймере есть только OnTimer, а я машинально делаю двойной щелчок и порой не замечаю, что обрабатываю не то дело.
← →
JohnJ (2003-08-02 01:21) [9]Написал перед выводом на DXDraw1 картинки строчку DXDraw1.Initialize, и заработало!!! Спасибо! Теперь буду думать почему в моём "большом" проекте (игрушку пишу) всё-равно не работает, хотя как-то раз работало, а потом я решил чё-то изменить, и перестало работать... Вернул обратно - никакого эффекта... Ладно, пойду думать...
← →
iXuSs (2003-08-02 20:13) [10]Давай, если что - то спрашивай, только побольше кода, так легче понять.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c