Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
1-2072
Bers01
2004-01-20 11:49
2004.02.02
Работа с MSWord


4-2418
Aleksandr
2003-11-25 13:39
2004.02.02
Как покрасить цвет текстка в Hint?


4-2437
frost
2003-11-26 12:33
2004.02.02
Иконка = тип файла?


14-2365
endeavor
2004-01-10 11:03
2004.02.02
ДОЛОЙ ГРУБИЯНОВ!!!


11-2050
TimNew
2003-05-18 01:27
2004.02.02
как установить фокус





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский