forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Visual Basic (http://forum.boolean.name/forumdisplay.php?f=62)
-   -   Проблемы с переводом (http://forum.boolean.name/showthread.php?t=12664)

Лit}{Ъ 16.09.2010 17:48

Ответ: Проблемы с переводом
 
Я нарыл исходник с бесконечным циклом отриссовки и оконным режимом. Возникли следующие вопросы:
Что обозначает строка DoEvents перед loop в бесконечном цикле отрисовки?(без неё проект тупо виснет)
Нормально ли что отрисовка в цикле сделана без функции OnPaint?
Что делает метод DirectDrawSurfase7 Blt?
Что за метод Flip, а точнее почему он необходим при FullScreen режиме (в конце для отрисовки), но не требуется в оконном?

pax 16.09.2010 20:52

Ответ: Проблемы с переводом
 
1. DoEvents - выполняет цикл по оконным сообщениям, необходим для правильной работы окна. Если его убрать, то окно не сдвинешь с места и возможно не будет верной отрисовка. Так что он обязателен.
2. Нормально.
3. Понятия не имею, т.к. с DerectDraw не работал, возможно что-то связанное с синхронизацией буферов или блоков памяти. Вот нашел описание - ссылкаhttp://www.gamedev.ru/code/forum/?id=36432#m3. Похоже это копирование части или всего сурфэйса в другой сурфэйс.
4. Flip обычно меняет местами передний и задний буферы. Т.е. картинка рисуется на заднем буфере, а потом отображается пользователю полностью. На самом деле в оконном режиме он скорее всего тоже необходим для правильной отрисовки.

Лit}{Ъ 05.10.2010 18:04

Ответ: Проблемы с переводом
 
Подскажите плиз. Каким образом в структуре описать НЕ SHARED массив ФИКСИРОВАННОЙ ДЛИННЫ?
(что то духе)
Public Structure a
Public b(100) As Long
End Structure
(только работающее)

pax 05.10.2010 18:25

Ответ: Проблемы с переводом
 
В структурах нельзя объявлять массивы сразу фиксированной длины.

SBJoker 05.10.2010 22:02

Ответ: Проблемы с переводом
 
Хотел бы уточнить что DoEvents выделяет системе время на обработку событий, в том числе и на отрисовку невалидных областей экрана. В ресурсоемких и долгих по времени циклах рекомендуется ставить чтобы небыло фриза приложения плоть до непрорисовки элементов окна.

Лit}{Ъ 06.10.2010 14:46

Ответ: Проблемы с переводом
 
????
А как тогда реатизовать в ВБ 2010 аналог следующего кода в вб 6.0

Public Type A
B(100) as long
End type

pax 06.10.2010 15:01

Ответ: Проблемы с переводом
 
А почему бы класс не использовать вместо структуры?

Лit}{Ъ 06.10.2010 15:34

Ответ: Проблемы с переводом
 
Я об этом подумывал. Тогда другой вопрос. Как решить nullReferenceExpresion was unhandled: Object reference not set to an instance of an object?(Это выдаётся в случае с классом)

pax 06.10.2010 16:16

Ответ: Проблемы с переводом
 
класс надо сначала инициализировать (выделить память под экземпляр при создании с ключевым словом New)

Лit}{Ъ 06.10.2010 16:40

Ответ: Проблемы с переводом
 
А как обойти Arrays cannot be declared with new?

pax 06.10.2010 18:58

Ответ: Проблемы с переводом
 
Да что же тут такого сложного
PHP код:

Public Class A
   
Public B(100) As Long
End 
Class

'создание экземпляра класса:
Dim _a As A = New A 


Лit}{Ъ 07.10.2010 14:22

Ответ: Проблемы с переводом
 
Простие, вы меня не поняли. Знаю, сам виноват - изяснялся туманно. Про выделение памяти для ПЕРЕМЕННЫХ все было понятно с первого раза. Я переспрашиват как выделять память на МАССИВЫ. Если
Public Class A
Public B(100) As Long
End Class
Public Shared C(100) As new A

То Arrays cannot be declared with 'New'.

если

Public Shared C(100) As A= new A
то Explicit initialization is not permitted for arrays declared with explicit bounds.

Это и сложно...

pax 07.10.2010 15:07

Ответ: Проблемы с переводом
 
Нельзя инициализировать массив во время обявления, если у него объявлен размер.

Если надо в другом классе объявить инициализированный массив типа А, то в его статическом конструкторе нужно проинициализировать каждый элемент.

PHP код:

Public Shared C(100) As  A

Shared Sub 
New()
    For 
As Integer 0 To C.Length 1
        C
(i) = New A
    Next
End Sub 


Лit}{Ъ 07.10.2010 15:20

Ответ: Проблемы с переводом
 
О ужас! Куда я попал! ....

Тоесть здравый анлалог (в смысле без гемора инициализации) следующего кода в 2010 невозможен?
Public Type A
b(100) as long
end type
Public a(100) as a

pax 07.10.2010 15:36

Ответ: Проблемы с переводом
 
Если не инициализировать, то в каждом элементе второго массива будет Nothing, а не экземпляр класса A.

При использовании структур как выяснилось - запрещается объявлять массивы фиксированный длины.

:pardon: я вообще на C# программирую ;)

Может нужно что-то проще? зачем объявлять тип для массива?


Часовой пояс GMT +4, время: 03:28.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot