| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как откопировать 2-мерный динамический массив? |
| Автор: Kursist 8.11.2004, 18:24 |
| Имеется статический 2-мерный массив, [1000х800] надо в него скопировать содержимое нескольких 2х-мерных динамических массивов с с неопределенной но более малой размерностью (например: [100х200], копироваться должно в область статического массива, начиная с произвольного элемента (напр.: [50,100]) - не с первого, Знаю для одномерных, надо использовать циклы и операторы High(VirtArray), low(VirtArray), или Copy(array,n), а как с 2х-мерными динамическими массивами - не знаю! Подскажите, кто знает. Спасибо! |
| Автор: Zero 8.11.2004, 19:22 | ||
| Забей ты на все эти операторы, и делай так как будто у тебя статический массив, но не забывай что он начинается от нуля. Для примера можеш посмотреть тут:
Только размерность я взял поменьше, чтобы тбе понятнее было, да и копирование происходит из одного массива а не из двух, но ты можеш сделать как захочеш... |
| Автор: Kursist 9.11.2004, 10:04 |
| Супер!!! Спасибо огромное! |
| Автор: Kursist 10.11.2004, 10:45 |
| Идея реализации будет следующая: создается 2-x мерный статический массив (размером Client.Width * Client.Hight) целых чисел. Далее, будут создаваться 2-x мерные динамические массивы (размером ObjectBitmap.Width * ObjectBitmap.Hight) булевых переменных. В него заносятся значения FALSE, если пиксел на битмапе непрозрачный и TRUE - если прозрачный. Далее идет вывод изображения ObjectBitmap с учетом прозрачности на TempBitmap в позицию X,Y; а в статический массив заносятся ID "Объекта" (представленного ObjectBitmap). Далее TempBitmap выводится на Canvas формы. В процедуре обработки OnMouseClick берутся координаты 'клика' X,Y и проверяется значения элемента статического массива [X,Y] - В нем ID - следовательно такой объект выделен, значит нужный ObjectBitmap необходимо заменить. |
| Автор: p0s0l 10.11.2004, 13:08 |
| Kursist видимо писал ответ в тему: http://forum.vingrad.ru/index.php?showtopic=32476 |
| Автор: Kursist 10.11.2004, 13:24 |
| p0s0l Нет, не писал, но за линк спасибо! |
| Автор: p0s0l 10.11.2004, 14:24 | ||
| Опс! Я посмотрел - какие-то битмапы, маусклики - думаю, причём здесь это ? Извини У тебя с этим трудности ?:
|
| Автор: Kursist 10.11.2004, 17:08 | ||||||
Нет, спасибо, уже все нормально. Просто меня в какой-то момент заклинило Создаю простенький 2D квест (рисую много графики) - пишу свой '2D Engine' без использования OpenGL или DelphiX. Скорость вывода меня вполне устроила (использую GetTicCount() и InvalidateRect(). Хоть мне и нравится OpenGL, но его я еще недостаточно изучил (да и примеры из книги Красного по OpenGL касающиеся прозрачности материалов у меня почему-то работают без прозрачности), а создать квест не терпиться |
| Автор: Marriage 12.11.2004, 17:39 | ||
Вопрос в тему.. ЕСть 2 переменные ... a,b: array of integer; после выполнение SetLength(a,100), а SetLength(b,100) и a[1]:=3; b[1]:=1000; то в a[1] будет значение 1000, это прикол такой или как ???? И можно ли этого как нить избежать ??? |
| Автор: p0s0l 12.11.2004, 18:11 |
| Скорее всего, где-то после SetLength'ов у тебя строка типа: a := b; или b := a;... |
| Автор: Marriage 12.11.2004, 19:49 | ||
В том то и дело ,то нет ... Строки подряд идут ... a[1]:=3; b[1]:=1000; ShowMessage (IntToStr(a[1])); Показывает 1000 |
| Автор: p0s0l 12.11.2004, 21:02 | ||
| Ну не может такого быть... Либо b объявлен как absolute a (или наоборот), либо идёт типа такого:
Либо где-то у тебя ошибка работы с памятью в программе, которая в последствии выливается в такое... Или ты что-то недоглядел... Вышли, plz, мне исходник. |
| Автор: Zero 12.11.2004, 22:49 | ||||
Marriage, я не знаю чё ты там намудрил, но попробуй, запустить Delphi с нуля, потом в раздел Var, запехни
А потом на кнопку (например: Tbutton) воткни это
Если это у выведется не 3, то можеш викинуть свой комп, проблема в нём... Замечание:Мне бы тоже хотелось, глянуть на твой исходник... |
| Автор: Marriage 13.11.2004, 11:18 |
| Комп выкидывать не собираюсь. Проблема не внем, а скорее всего в настройках, т.к. на Билдере все нормально. Такое осчучение, что 1 массив накладывается на другой ... Может в настройках где-нить полазить??? Или купить лицензионную Дельфю ??? Исходник приведен выше .... Единственная может быть разница в том, что a,b:array of integer; это модуль одной проги, в которой модулей 20, и то почти все не мои ... А разбираться в чужих исходниках - это ж не есть гут .... Тем более БД ... |
| Автор: Zero 13.11.2004, 11:44 | ||
| Если ты написал так как я тебе выслал исходник, и у тебя всё равно не работает, то наверное у тебя "внатуре", Delphi глючит, я тогда могу посоветовать лишь, переустановить delphi... Хотя может тебе Посол чё-нибудь, подскажет...
У меня она тоже не лицензионная, и работает... |