Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 03.07.2007, 00:24   #1
LepihinMS
Пользователь
 
Регистрация: 03.02.2007
Сообщений: 45
Репутация: 10
По умолчанию Динамическое создание объектов

Скажите мне для начала как в процессе выполнения программы создать на форме кнопку на пример.
LepihinMS вне форума   Ответить с цитированием
Старый 03.07.2007, 01:03   #2
ЧИЖ
Форумчанин
 
Аватар для ЧИЖ
 
Регистрация: 24.02.2007
Сообщений: 104
Репутация: 30

icq: 256-561-942
Хорошо

Код:
type
  TForm1 = class(TForm)
   .......................................... 
 
   procedure MyButtonClick(Sender: TObject);
  private...................
..................................
 
var MyButton:TButton;
 
 
procedure TForm1.MyButtonClick(Sender: TObject);
begin
{твой код}
end;
 
....................
 
MyButton:=Tbutton.Create(Owner);
MyButton.Parent:=self;
MyButton.Height:=20;
MyButton.Width:=80;
MyButton.Left:=100;
MyButton.Top:=100;
MyButton.Visible:=true;
MyButton.Caption:='MyCaption';
MyButton.OnClick:=Form1.MyButtonClick;
__________________
Разберемся.......

Последний раз редактировалось ЧИЖ; 03.07.2007 в 01:53.
ЧИЖ вне форума   Ответить с цитированием
Старый 03.07.2007, 01:47   #3
LepihinMS
Пользователь
 
Регистрация: 03.02.2007
Сообщений: 45
Репутация: 10
По умолчанию

Создаю тремя нажатиями на Button1 три кубика.
Цитата:
var
Form1: TForm1;
i:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Sfera1: TGLCube;
begin
inc(i);
Sfera1:=TGLCube.Create(GLScene1);
Sfera1.Position.X:=0;
Sfera1.Position.Y:=0;
Sfera1.Position.Z:=1;
Sfera1.Name:='S'+IntToStr(i);
Sfera1.Parent:=GLCube1;
end;
end.
А как мне теперь переместись/покрутить/перекрасить их уже созданных?
LepihinMS вне форума   Ответить с цитированием
Старый 03.07.2007, 01:57   #4
ЧИЖ
Форумчанин
 
Аватар для ЧИЖ
 
Регистрация: 24.02.2007
Сообщений: 104
Репутация: 30

icq: 256-561-942
По умолчанию

а где ты их 3 создаешь помоему одну но 3 раза

чтоб создать 3 надо чтоб их и было 3 например массив

Sfera:array[1..3] TGLCube;

создаешь естественно по элементно

и к стати почитай предыдущий пост я там дописал то что сразу забыл написать
__________________
Разберемся.......
ЧИЖ вне форума   Ответить с цитированием
Старый 03.07.2007, 02:10   #5
LepihinMS
Пользователь
 
Регистрация: 03.02.2007
Сообщений: 45
Репутация: 10
По умолчанию

Спасибо, с массивом получается почти то что мне надо. Сейчас перелопачу свою игру под этот метод. А дальше видно будет.

Все равно ерунда какая то! Как тогда создают почти безграничное количество объектов? Я видел где-то пример где из трубы сыплются сотни шариков. На "Sfera:array[1..1000] TGLCube;" - никакой оперативы не хватит. Что-то ты, товарищ, напутал.

Последний раз редактировалось mihali4; 24.01.2010 в 14:39.
LepihinMS вне форума   Ответить с цитированием
Старый 03.07.2007, 10:16   #6
ЧИЖ
Форумчанин
 
Аватар для ЧИЖ
 
Регистрация: 24.02.2007
Сообщений: 104
Репутация: 30

icq: 256-561-942
Лампочка

а ты о динамических массивах слыхал

Код:
var arr:array of MyType;
MyLength:word;
 
SetLength(arr,MyLength);
 
MyLength:=length(arr);
увеличить длинну массива на 1 можно например так

SetLength(arr,length(arr)+1);

индексация естественно начинается с 0

а тысячи шариков можно сделать например так

когда одни шарики уже долетают до места где их не видно их координаты цвет и т д задаются так что они опять на верху и вроде как другие
так тебе не надо будет их сильно много и оперативы хватит

и к стати если я не ошибаюсь у тебя 3D игра?
попробуй использовать Vertex Shaider он ведь умеет множить объекты
(много одинаковых объектов по разному себя ведут и весит это далеко не столько сколько такое же количество независимых объектов)

и вообще как насчет того чтобы написать не очень силиный для начала физ двиг и рендерер к нему
__________________
Разберемся.......

Последний раз редактировалось ЧИЖ; 03.07.2007 в 11:04.
ЧИЖ вне форума   Ответить с цитированием
Старый 03.07.2007, 22:55   #7
LepihinMS
Пользователь
 
Регистрация: 03.02.2007
Сообщений: 45
Репутация: 10
По умолчанию

Ясно что ничего не ясно.
LepihinMS вне форума   Ответить с цитированием
Старый 04.07.2007, 00:28   #8
ЧИЖ
Форумчанин
 
Аватар для ЧИЖ
 
Регистрация: 24.02.2007
Сообщений: 104
Репутация: 30

icq: 256-561-942
Стрелка

а что не ясного динамические массивы или Vertex Shaider

если последнее то тут я тебе не помогу но игра написанная с их использованием была бы достаточно профессионольо сделана

а с динамическими массивами все просто

задаешь массив без указания его размера

arr:array of TGLCube;
i:word;


допустим что тебе надо сделать 10 кубов

i:=10;
setlength(arr,i);
for i:=0 to 9 do begin
arr[i]:=TGLCube.create.........
................................... ....
end;

а потом их должно стать на 5 больше

setlength(arr,length(arr)+5);

for...................

апотом на 10 меньше

setlength(arr,length(arr)-10);
................................... .....

а потом вообще нестать

setlength(arr,0);

в чем проблема то

ну а как перезадавать координаты и т д объектам ушедшим из поля зрения уж сам сообрази
__________________
Разберемся.......
ЧИЖ вне форума   Ответить с цитированием
Старый 04.07.2007, 00:50   #9
LepihinMS
Пользователь
 
Регистрация: 03.02.2007
Сообщений: 45
Репутация: 10
По умолчанию

Помню пример видел. Жмешь на кнопку и из трубы сыплются сотни сфер. Как автор примера добился этого?

http://www.server-c.pochta.ru/TANK.rar - используется массив из 20 TGLActor. Кушает 40Мб оперативы! Гадость какая-то.

Последний раз редактировалось mihali4; 24.01.2010 в 14:39.
LepihinMS вне форума   Ответить с цитированием
Старый 04.07.2007, 01:21   #10
ЧИЖ
Форумчанин
 
Аватар для ЧИЖ
 
Регистрация: 24.02.2007
Сообщений: 104
Репутация: 30

icq: 256-561-942
Подмигивание

а можт исходник а не прогу так искать пути решения проблемы было бы проще

и еще для более быстрой связи есть ICQ
__________________
Разберемся.......
ЧИЖ вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
динамическое создание компонентов DOLBY Компоненты Delphi 10 17.10.2010 14:03
Динамическое создание объекта ANGa Помощь студентам 3 10.04.2008 18:14
Динамическое создание объекта Fruit Общие вопросы Delphi 5 24.01.2008 12:00
Динамическое создание фрейма s-force Общие вопросы Delphi 9 05.09.2007 16:56
Динамическое создание WebBrowser DragonLand Работа с сетью в Delphi 2 20.08.2007 21:47


13:47.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.