Форум: "Игры";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];
ВнизМассив типов Найти похожие ветки
← →
r0n1n (2003-07-17 01:50) [0]Юзаю GLScene
создаю массив типов TCube
скажем
cube: array of TCube;
затем делаю
Cube[1].Create(Form1) - ошибка
Cube[1].Create(GLScene1) - ошибка
Cube[1].Create(GLSceneViewer1) - ошибка
Постоянно поднимает исключение типа: "Access violation ..."
Помогите в чем тут проблема и если не составит труда примерчик правильный приведите
← →
Asteroid (2003-07-17 03:05) [1]SetLength( cube, <желаемая длина> );
При SetLength нумерация начинается с нуля. SetLength-ом же можно динамически менять размер массива без потери информации в нем (т.е. при увеличении то, что было, остается нетронутым).
← →
Digitman (2003-07-17 08:55) [2]
> Asteroid
неверная рекомендация.
при подразумеваемой ошибке (нулевой длине массива на момент обращения к его элементу) будет возбуждено исключение index array out of bound, а не access violation.
> r0n1n
var
cube: array of TCube;
..
setlength(cube, 5);
for i:= 0 to 4 do
Cube[i] := TCube.Create(компонент_владелец);
← →
pasha676 (2003-07-17 08:56) [3]Объект в Дельфи создается не конструкцией вида Cube.Create(GLScene),
А конструкцией вида Cube:=TCube.Create(тут могут быть а могут и не быть параметры в зависимости от объекта). Как бы надо знать такие вещи. Че в графику ломиться, когда не знаешь как объект создать. Ну и по факту динамических массивов Астероид уже написал.
← →
Darthman (2003-07-17 10:25) [4]2Digitman;
Не будет никакого Out of bounds. Вы, верно, с динамическими массивами не работали. Это не список. Исключение типа Out of bounds - это результат обработки.
Чтение же несуществующего элемента массива приведет к тому, что будет считана следующая ячейка памяти и тут варианта 2. Либо программа наплюет на то, что получила и получит просто галимую, дурацкую информацию, либо сильно матернется на access violation.
Запись в несуществующий элемент массива вызовет в любом случае Access violation.
← →
Digitman (2003-07-17 11:15) [5]
> Darthman
неправы мы оба.
Я неправ, потому что неверно класс/текст исключения привел в этом случае. А именно - в случае несущ.элемента дин.массива возможны варианты исключений ERangeError и EInvalidPointer.
Ты неправ, категорично утверждая, что
> Запись в несуществующий элемент массива вызовет в любом
> случае Access violation
Массив может быть инициализирован, но при отключенной опции компилятора Range Checking и обращении к эл-ту (иниц.массива), индекс которого лежит за пределами иниц.диапазона, EAccessViolation еще надо умудриться получить)... В подавляющем большинстве случаев при такой ситуации будет возбуждено EInvalidPointer.
← →
Digitman (2003-07-17 11:35) [6]
> Darthman
А насчет
> с динамическими массивами не работали
ты недалек от истины) ... в своей практике я везде где это возможно всячески избегаю сомнительных "удобств", предоставляемых дельфийским Паскалем в части синтаксиса/механики открытых массивов. Imho, c т.з. производительности дурней концепции не придумаешь)..
Смею скромно утверждать, что в любой ситуации можно отказаться от использования открытых массивов в пользу более прозрачных и более эффективных механизмов динамического распределения/перераспределения памяти.
А вот это вот
> Исключение типа Out of bounds - это результат обработки
по меньшей мере странно) ... По твоему выходит, что иные исключения, а-ля ERangeError или EInvalidPointer, не есть "результат обработки" ?)
← →
Darthman (2003-07-17 12:37) [7]Да, это тоже резултат обработки, но Access Violation - уже нет.
← →
Digitman (2003-07-17 12:51) [8]
> Access Violation - уже нет
да что ты говоришь !)
по твоему выходит, что фразу "Project такой-то.exe raised exception EAccessViolation at address ..." строит само ядро Win32 ? И ран-тайм-код, сгенерированный Паскаль-компилятором, к этому никакого отношения не имеет ?) вот уж ничего подобного !
← →
r0n1n (2003-07-17 13:57) [9]А дальше то чо писать чтоб его видно было
Свойства CubeWidth, CubeHeight задаю
Затем Visible и ничо
Камеру создал поместил правильно
TargetObject поставил Cube[1]
← →
pasha676 (2003-07-17 14:53) [10]Создай прообраз куба на экране еще в редакторе. Потом запиши. Посмотри .dfm файл. Посмотри что там насчет куба, его свойства. На основании этого делай свои кубы в реалтайме.
← →
Asteroid (2003-07-18 04:42) [11]> r0n1n © (17.07.03 13:57)
См. справку по GLScene.
> Palladin © (17.07.03 23:53)
Поддерживаю. Вот только тема подходит скорее для "Основной", нежели для "Игр".
← →
Darthman (2003-07-18 11:22) [12]2Digitman:
Я говорил о другом, вообще-то. Я имел ввиду обработку ошибок компилятором и обработку ошибок самими компонентами, подпрограммами. Хотя, ладно, это не столь важно.
2Palladin:
Проблема в том, что я просто не хотел сорваться, день был напряженный, а тут спор еще разразился ;)
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c