Тема: Сайт групп факультета ИТ МИРЭА :: Человек и Smalltalk

Прислано dhmhd 06.06.2011 07:27
#81

А кто такая "она"?

Так, ладно... Во-первых, на счет отдельного процесса, который генерирует событие drawReq, которое "просит" FootBallField выполнить отрисовку на area... Я использую такой подход, потому что отрисовка таким образом вполне естественна для игр. Если запустить АИ поиграть против самого себя, то событие мыши возникать не будет. Привязываться к экспоуз тоже не лучший вариант, т.к. я должен просить его(событие экспоуз) возникнуть, т.е. постоянно приходится писать redraw в тех местах где мне необходимо сделать прорисовку. Помоему это несколько привязывает мои классы к компоненту на который будет производится отрисовка, а у меня получается, что передается только переменнная area. Т.е. FootBallField не знает на какой компонент он рисует. Мне пришлось делать бы запрос на перерисовку окна из класса FootBallField после того, как АИ сделал ход...

Как видите в данном моем подходе "просить" компонент на который происходит отрисовка "перерисовать себя" не требуется, он это делает сам. Мало того сейчас я рисую непосредственно на поверхности окна, не используя компонента DrawingAreaView у которого экспоуз "в крови". Помоему у окна с этим событием не все гладко, хотя я голословлю, ибо не проверял...

Лучшим решением в этом случае является использование буфера. Мерцает картинка из-за того, что мы видим последовательное выполнение функций с помощью которых я рисую поле. Если бы можно было рисовать поле в буфер, а потом отрисовывать этот буфер на окно, то мерцания небыло бы. Mentor, если бы вы помогли мне разобраться, каким образом создать невидимую область для отрисовки, вывести туда поле, а затем скопировать ее содержимое на форму, я был бы вам очень признателен.

Во-вторых, на счет бага "два очка для АИ". Я не могу его никак найти... Почему это происходит?

Редактировал dhmhd 06.06.2011 07:30