![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема. Рисование на Canvas'е
Andrey93 © (2010-05-18 15:13:00)Здравствуйте.
Пишу игру "Морской бой".
Есть процедура, которая на канвасе формы рисует игровое поле(просто линии). Есть кнопка(Button1:TButton), которая делает авторасстановку кораблей. Для ручной расстановки есть объекты RadioGroup1 и RadioGroup2 типа TRadioGroup.
Сначала рисуется первое поле(слева). После нажатия на кнопку Button1 скрываются RadioGroup1 и RadioGroup2 (RadioGroupX.Visible:=false), на их месте рисуется второе поле. Но рисуется оно почему-то некорректно.
До нажатия на Button1:
[img] http://i026.radikal.ru/1005/68/e2fafe8f48c5.jpg[/img]
После нажатия:
[img] http://s45.radikal.ru/i107/1005/65/db78b4d18154.jpg[/img]
Получается, что второе поле рисуется на том месте, где были объекты RadioGroup, у которых даже нет своего canvas'а.
Вот код процедуры рисования поля (Переменная Game включается после расстановки или нажатия на Button1, Sea - фоновый рисунок, dx1 и dx2 - расстояние от левого края формы).
[CODE]procedure TFormGame.FormPaint(Sender: TObject);
begin
with Canvas do
begin
Draw(0,0,Sea);
pen.Color:=clBlack;
DrawField(Sender,dx1);
if Game then
DrawField(Sender,dx2);
end;
end;
[/CODE]
Процедура DrawField(Sender:TObject;dx:integer) рисует только линии, буквы и цифры.
Нужно, чтобы второе поле рисовалось корректно.
Я пробовал уничтожать объекты RadioGroup(Free или Destroy). Всё равно поле рисуется некорректно, а программа выдаёт ошибку
[img] http://s002.radikal.ru/i198/1005/b9/e95833bea95c.jpg[/img]
Что посоветуете?
Плохиш (2010-05-18 19:25:00) [1]
> Ega23 © (18.05.10 17:05) [13]
> В справку заглянуть не позволяет религия?
Прикалываешься?
Jeer (2010-05-18 18:03:00) [2]
> не такой у меня Морской Бой))
Настоящий ? :)
Andrey93 (2010-05-18 17:44:00) [3]Amoeba_, не такой у меня Морской Бой))
Andrey93 (2010-05-18 17:42:00) [4]Просто у меня почему-то в PaintBox'e никогда ничего не получалось, поэтому я старался его не использовать. А теперь всё получилось, спасибо =)
Amoeba_ (2010-05-18 17:35:00) [5]
> Есть процедура, которая на канвасе формы рисует игровое
> поле(просто линии).
Может в качестве игрового поля использовать DrawGrid?
А это для тех "чайников", кто программирует Морской бой:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=918
Ega23 (2010-05-18 17:05:00) [6]
> А переменные (x,y) в PaintBox.MouseMove считаются от начала
> фотмы или от начала PaintBox'а?
В справку заглянуть не позволяет религия?
antonn (2010-05-18 16:48:00) [7]
> А переменные (x,y) в PaintBox.MouseMove считаются от начала
> формы или от начала PaintBox'а?
->
> Это всего лишь выделение части канвы с локальными координатами.
локальными - значит координатами контрола
Andrey93 (2010-05-18 16:44:00) [8]А переменные (x,y) в PaintBox.MouseMove считаются от начала фотмы или от начала PaintBox'а?
Andrey93 (2010-05-18 16:44:00) [9]А переменные (x,y) в PaintBox.MouseMove считаются от начала формы или от начала PaintBox'а?
Jeer (2010-05-18 16:27:00) [10]
> С PaintBox'ом много проблем
Т.е вынести элементы управления на панели и рисовать на канве для тебя еще проще ?
И какие такие проблемы с PB ?
Это всего лишь выделение части канвы с локальными координатами.
Andrey93 (2010-05-18 16:08:00) [11]Ну ок, спасибо)
Ega23 (2010-05-18 16:04:00) [12]
> Какая разница, на чём рисовать?) С PaintBox'ом много проблем
Всю жизнь на нём рисовал, проблем не имел.
antonn (2010-05-18 15:52:00) [13]разница есть. Рисуй на буферном битмапе, а его выводи на канву
RWolf (2010-05-18 15:52:00) [14]Я к тому, чтобы снабдить каждое поле своей отрисовкой.
Andrey93 (2010-05-18 15:43:00) [15]Какая разница, на чём рисовать?) С PaintBox'ом много проблем
RWolf (2010-05-18 15:37:00) [16]Рисуй не на форме, а в выделенных для этого PaintBox'ах.
Ega23 (2010-05-18 15:21:00) [17]
> Что посоветуете?
Заранее научиться подшивать подворотничок.
Jeer (2010-05-18 15:19:00) [18]Как я понял - электроны и позитроны тебе не удалось подружить.
Наверное бегал на уроках физики ?
P.S.
Посоветовать можно только одно - учиться думать, учиться искать, учиться разделять сложность на простые компоненты, учиться воплощать простое из элементарного.