Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вывод спрайтов, нужна помощ с программой 
:(
    Опции темы
СЭНСЭЙ
Дата 20.1.2010, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



Привет всем.
Пишу программу - наработку для РПГ игры
делаю процедуру выводящую изображение.
Проблема в том, что на Р-233м вывод изображения
работает медленно.
Не буду описывать все детали, приведу тектс процедуры
и экзешник.
Весь проект скидывать ну буду что бы не
возникалдо лишних вопросов
Код


var
  Form1: TForm1;
  body1,body2:bodyp;
  body,bodyt:array[1..10] of bodyp;
  bodycount,bodycountt:integer;
  i,j,temp,z:integer;
  fieldw,fieldh,cz,h,w:integer; //cz - cellsize in pixels
  bitmap,bitmapg,ground_bitmap,object_bitmap,visborder_bitmap,cell_bitmap,bitmap_mask:tbitmap;
  rx,ry,px,py,bx,by:integer;
  alfa,beta,l,l2,k,b,sz:real;
  x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,x8,y8:real;
  dd:integer; //переменная задающая размер тела от настоящего до минимального
  terrain:array [1..200,1..200] of groundp;
  precision:integer;
  startup:boolean;
  hero:herop;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
fieldw:=500;fieldh:=500;
cz:=33;
px:=7;py:=7;
precision:=10;
//rx:=(px-1)*cz+round(cz/2);ry:=(py-1)*cz+round(cz/2);
body[1].x:=8;body[1].y:=10;body[1].size:=3.6;body[1].frm:='round';body[1].picture:=0;
body[2].x:=8;body[2].y:=11;body[2].size:=4.2;body[2].frm:='round';body[2].picture:=0;
body[3].x:=9;body[3].y:=11;body[3].size:=2.8;body[3].frm:='round';body[3].picture:=1;
body[4].x:=2;body[4].y:=3;body[4].size:=4;body[4].frm:='square';body[4].picture:=2;
bodycount:=4;

bitmap:=tbitmap.Create;
bitmapg:=tbitmap.Create;
//bitmap_mask:=tbitmap.Create;
//h:=500;w:=500;
//bitmap.Width:=w;
//bitmap.Height:=h;
ground_bitmap:=tbitmap.Create;
ground_bitmap.Height:=33;
ground_bitmap.Width:=33;
object_bitmap:=tbitmap.Create;
object_bitmap.Height:=33;
object_bitmap.Width:=33;
visborder_bitmap:=tbitmap.Create;
cell_bitmap:=tbitmap.Create;
cell_bitmap.Height:=33;
cell_bitmap.Width:=33;

for i:=1 to 200 do for j:=1 to 200 do begin terrain[i,j].picture:=0; terrain[i,j].hard:=1; end;
//инициализация персонажа
hero.name:='';
hero.str:=5;
hero.agi:=5;
hero.dex:=5;
hero.acu:=5;
hero.con:=5;
hero.int:=5;
hero.wis:=5;
hero.pre:=5;

label1.Caption:='            Сила '+inttostr(hero.str);
label2.Caption:='    Ловкость '+inttostr(hero.agi);
label3.Caption:='    Скорость '+inttostr(hero.dex);
label4.Caption:='     Точность '+inttostr(hero.acu);
label5.Caption:='  Живучесть '+inttostr(hero.str);
label6.Caption:='  Интеллект '+inttostr(hero.int);
label7.Caption:='    Мудрость '+inttostr(hero.wis);
label8.Caption:='Восприятие '+inttostr(hero.pre);
Edit2.Text:=hero.name;

startup:=true;
form1.top:=round((screen.Height-form1.Height)/2);
form1.left:=round((screen.width-form1.width)/2);
//PageControl1.Top:=-22;
button25.Caption:='EXIT';
end;


procedure TForm1.showrounds(pre:integer);
var
pdx,pdy,shading:integer;
begin
shading:=12;
pdx:=pre*cz+round(cz/2);pdy:=pdx;
//очищение изображения
h:=(pre*2+1)*cz;w:=h;
bitmap.Height:=h;bitmap.Width:=w;
bitmap.Canvas.Brush.Color:=clwhite;
bitmap.Canvas.FillRect(rect(0,0,w,h));
//рисование граници мира
cell_bitmap.Canvas.Brush.Color:=clgray;
cell_bitmap.Canvas.FillRect(rect(0,0,cz,cz));

for i:=-pre to pre do
for j:=-pre to pre do
if (i+px<1) or (i+px>fieldw) or (j+py<1) or (j+py>fieldh) then
bitblt(bitmap.Canvas.Handle,(i+pre)*cz,(pre-j)*cz,cz,cz,cell_bitmap.Canvas.Handle,0,0,srccopy)
else
begin
groundspic.GetBitmap(terrain[i+px,j+py].picture,ground_bitmap);
bitblt(bitmap.Canvas.Handle,(i+pre)*cz,(pre-j)*cz,cz,cz,ground_bitmap.Canvas.Handle,0,0,srccopy);
end;

//вывод картинки в центр (персонаж)
//bitblt(bitmap.Canvas.Handle,(10)*cz,(10)*cz,cz,cz,cell_bitmap.Canvas.Handle,0,0,srccopy);

object_bitmap.Canvas.Brush.Color:=clwhite;
object_bitmap.Canvas.FillRect(rect(0,0,33,33));
objects_masks.GetBitmap(3,object_bitmap);
bitblt(bitmap.Canvas.Handle,(10)*cz,(10)*cz,cz,cz,object_bitmap.Canvas.Handle,0,0,srcpaint);
object_bitmap.Canvas.Brush.Color:=clwhite;
object_bitmap.Canvas.FillRect(rect(0,0,33,33));
objectspic.GetBitmap(3,object_bitmap);
bitblt(bitmap.Canvas.Handle,(10)*cz,(10)*cz,cz,cz,object_bitmap.Canvas.Handle,0,0,srcand);

visborder_bitmap.Height:=h;visborder_bitmap.Width:=w;

//заполнить массив временных тел телами в поле зрения героя и упорядочить по расстоянию до героя в убывании
bodycountt:=0;
for i:=1 to bodycount do if sqrt((sqr(px-body[i].x)+sqr(py-body[i].y)))<=pre then
begin bodycountt:=bodycountt+1;bodyt[bodycountt]:=body[i];bodyt[bodycountt].num:=i; end;
for i:=1 to bodycountt do
for j:=i+1 to bodycountt do
begin
 if sqrt(sqr(px-bodyt[j].x)+sqr(py-body[j].y))>sqrt(sqr(px-bodyt[i].x)+sqr(py-body[i].y)) then
 begin
  body1:=bodyt[i];body2:=bodyt[j];bodyt[i]:=body2;bodyt[j]:=body1;
 end;
end;

//вывод тел на экран
bitmap.Canvas.Brush.Color:=clblack;
for i:=1 to bodycountt do
begin
bx:=pdx+(bodyt[i].x-px)*cz;
by:=pdy+(bodyt[i].y-py)*cz;
//рисование тени
if bodyt[i].frm='round' then
begin
if pdx<>bx then alfa:=arctan(abs(pdy-by)/abs(pdx-bx)) else alfa:=pi/2;
l:=sqrt(sqr(pdx-bx)+sqr(pdy-by));
sz:=bodyt[i].size;
l2:=sqrt(sqr(l)+sqr(sz));
beta:=arctan(sz/l);
if bx>pdx then begin x3:=pdx+cos(alfa+beta)*l2;x4:=pdx+cos(alfa-beta)*l2; end else begin x3:=pdx-cos(alfa+beta)*l2;x4:=pdx-cos(alfa-beta)*l2; end;
if by>pdy then begin y3:=pdy+sin(alfa+beta)*l2;;y4:=pdy+sin(alfa-beta)*l2; end else begin  y3:=pdy-sin(alfa+beta)*l2;;y4:=pdy-sin(alfa-beta)*l2; end;
//1я граница видимости
k:=(pdy-y3)/(pdx-x3);
b:=pdy-k*pdx;
x1:=w;y1:=k*x1+b; if y1>h then begin y1:=h;x1:=(y1-b)/k; end;
if sqrt(sqr(y1-y3)+sqr(x1-x3))>sqrt(sqr(y1-pdy)+sqr(x1-pdx)) then
begin
x1:=0;y1:=k*x1+b; if y1<0 then begin y1:=0;x1:=(y1-b)/k; end;
end;
//2я граница видимости
k:=(pdy-y4)/(pdx-x4);
b:=pdy-k*pdx;
x2:=w;y2:=k*x2+b; if y2>h then begin y2:=h;x2:=(y2-b)/k; end;
if sqrt(sqr(y2-y4)+sqr(x2-x4))>sqrt(sqr(y2-pdy)+sqr(x2-pdx)) then
begin
x2:=0;y2:=k*x2+b; if y2<0 then begin y2:=0;x2:=(y2-b)/k; end;
end;

Bitmap.Canvas.Polygon([point(round(x1),h-round(y1)),point(round(x2),h-round(y2)),point(round(x4),h-round(y4)),point(round(x3),h-round(y3))]);
end;

if bodyt[i].frm='square' then
begin
sz:=bodyt[i].size;
x3:=bx-sz;y3:=by-sz;x4:=bx+sz;y4:=by+sz;

//1я граница видимости
k:=(pdy-y3)/(pdx-x3);
b:=pdy-k*pdx;
x1:=w;y1:=k*x1+b; if y1>h then begin y1:=h;x1:=(y1-b)/k; end;
if sqrt(sqr(y1-y3)+sqr(x1-x3))>sqrt(sqr(y1-pdy)+sqr(x1-pdx)) then
begin
x1:=0;y1:=k*x1+b; if y1<0 then begin y1:=0;x1:=(y1-b)/k; end;
end;
//2я граница видимости
k:=(pdy-y4)/(pdx-x4);
b:=pdy-k*pdx;
x2:=w;y2:=k*x2+b; if y2>h then begin y2:=h;x2:=(y2-b)/k; end;
if sqrt(sqr(y2-y4)+sqr(x2-x4))>sqrt(sqr(y2-pdy)+sqr(x2-pdx)) then
begin
x2:=0;y2:=k*x2+b; if y2<0 then begin y2:=0;x2:=(y2-b)/k; end;
end;
Bitmap.Canvas.Polygon([point(round(x1),h-round(y1)),point(round(x2),h-round(y2)),point(round(x4),h-round(y4)),point(round(x3),h-round(y3))]);

x3:=bx+sz;y3:=by-sz;x4:=bx-sz;y4:=by+sz;
//3я граница видимости
k:=(pdy-y3)/(pdx-x3);
b:=pdy-k*pdx;
x1:=w;y1:=k*x1+b; if y1>h then begin y1:=h;x1:=(y1-b)/k; end;
if sqrt(sqr(y1-y3)+sqr(x1-x3))>sqrt(sqr(y1-pdy)+sqr(x1-pdx)) then
begin
x1:=0;y1:=k*x1+b; if y1<0 then begin y1:=0;x1:=(y1-b)/k; end;
end;
Bitmap.Canvas.MoveTo(round(x3),round(h-y3));Bitmap.Canvas.LineTo(round(x1),h-round(y1));
//4я граница видимости
k:=(pdy-y4)/(pdx-x4);
b:=pdy-k*pdx;
x2:=w;y2:=k*x2+b; if y2>h then begin y2:=h;x2:=(y2-b)/k; end;
if sqrt(sqr(y2-y4)+sqr(x2-x4))>sqrt(sqr(y2-pdy)+sqr(x2-pdx)) then
begin
x2:=0;y2:=k*x2+b; if y2<0 then begin y2:=0;x2:=(y2-b)/k; end;
end;
Bitmap.Canvas.Polygon([point(round(x1),h-round(y1)),point(round(x2),h-round(y2)),point(round(x4),h-round(y4)),point(round(x3),h-round(y3))]);
end;

//рисование графики объектов
//object_bitmap:=objectspic
object_bitmap.Canvas.Brush.Color:=clwhite;
object_bitmap.Canvas.FillRect(rect(0,0,33,33));
objects_masks.GetBitmap(bodyt[i].picture,object_bitmap);
bitblt(bitmap.Canvas.Handle,bx-round(cz/2),h-(by-round(cz/2))-33,bx+round(cz/2),h-(by+round(cz/2)),object_bitmap.Canvas.Handle,0,0,srcpaint);
object_bitmap.Canvas.Brush.Color:=clwhite;
object_bitmap.Canvas.FillRect(rect(0,0,33,33));
objectspic.GetBitmap(bodyt[i].picture,object_bitmap);
bitblt(bitmap.Canvas.Handle,bx-round(cz/2),h-(by-round(cz/2))-33,bx+round(cz/2),h-(by+round(cz/2)),object_bitmap.Canvas.Handle,0,0,srcand);
end;


//рисование круга видимости
visborder_bitmap.Canvas.Brush.Color:=clwhite;
visborder_bitmap.Canvas.FillRect(rect(0,0,w,h));
visborder_bitmap.Canvas.Ellipse(0+1,0+1,w-2,h-2);
visborder_bitmap.Canvas.Brush.Color:=clblack;
visborder_bitmap.Canvas.FloodFill(0,h-1,clblack,fsborder);

//вывод изображения на экран в центр
bitblt(bitmap.Canvas.Handle,0,0,w,h,visborder_bitmap.Canvas.Handle,0,0,srcand);
//bitblt(form1.Canvas.Handle,0,0,363,363,bitmap.Canvas.Handle,round((w-363)/2),round((h-363)/2),srccopy);
bitblt(image1.Canvas.Handle,0,0,363,363,bitmap.Canvas.Handle,round((w-363)/2),round((h-363)/2),srccopy);
image1.Refresh;

//полосы прокрутки
if w>363 then
begin
viewhscroll.Enabled:=true;
viewhscroll.Max:=w-363;
viewhscroll.Position:=round(viewhscroll.Max/2);
end else viewhscroll.Enabled:=false;
if h>363 then
begin
viewvscroll.Enabled:=true;
viewvscroll.Max:=h-363;
viewvscroll.Position:=round(viewvscroll.Max/2);
end else viewvscroll.Enabled:=false;
//конец
end;




Добавлено через 1 минуту и 11 секунд
извини сразу за возможно лишний код и за непонятные моменты
спрашивайте если что , я отвечу на все вопросы

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  visio.rar 177,48 Kb
PM MAIL   Вверх
СЭНСЭЙ
Дата 21.1.2010, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



хочу уточнить вопрос
на старом компе программа работает с задержкой из за чего
у меня возникает подозрение что этот алгоритм по части графики
далек от совершенства и возможно некорректно выполнен
подсажите пожалуйста что можно здесь улучшить по части графики
и какие вообще могут быть альтернативы решения этой задачи (вывод больного изображения с возможностью скорлла)
PM MAIL   Вверх
~FoX~
Дата 21.1.2010, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



Цитата(СЭНСЭЙ @  21.1.2010,  17:43 Найти цитируемый пост)
подсажите пожалуйста что можно здесь улучшить по части графики
и какие вообще могут быть альтернативы решения этой задачи (вывод больного изображения с возможностью скорлла) 

Если просто, то GDI+, если ложно, то DX, OpenGL....


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
artsb
Дата 21.1.2010, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Цитата(~FoX~ @  21.1.2010,  17:25 Найти цитируемый пост)
если сложно

Забыл  smile 

СЭНСЭЙ, так у вас не получится хорошей игры ИМХО. Как писал ~FoX~, как минимум нужно использовать GDI.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
AntonN
Дата 21.1.2010, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 7
Всего: 18



а он и использует GDI...


--------------------
user posted image
PM MAIL WWW   Вверх
artsb
Дата 21.1.2010, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Цитата(AntonN @  21.1.2010,  23:13 Найти цитируемый пост)
а он и использует GDI... 

Напрямую используется только bitblt (может ещё что-то...), а всё остальное - это Борлондовская высотка над GDI. Естественно, работать будет медленнее.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
AntonN
Дата 22.1.2010, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 7
Всего: 18



медленее, в лучшем случае процента на 2-3, а в большинстве случаев на 0.5% smile



--------------------
user posted image
PM MAIL WWW   Вверх
СЭНСЭЙ
Дата 22.1.2010, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



Погодите, товарищи, уважаемые...
у меня ведь именно несколько последовательных bitblt в конце процедуры и выполняются медленно.
Я ведь потому спрашиваю что есть же досовские реалтайм стратегии и под винду
тот же старкрафте где скролл карты шустро вертится
а там как я понимаю в любой момент времени любой участок размером с экран должен быть доступен.
У меня в процедуре формируется большое изображение это да...
но кажется сам его вывод и тормозит...
эх... ладно. Попробую создать под каждый спрайт отдельную переменную, может будет быстрее (((
PM MAIL   Вверх
artsb
Дата 22.1.2010, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Цитата(СЭНСЭЙ @  22.1.2010,  12:10 Найти цитируемый пост)
тот же старкрафте где скролл карты шустро вертится

Не играл. Но более чем уверен, что там D3D или OpenGL.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
~FoX~
Дата 22.1.2010, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



Цитата(СЭНСЭЙ @  22.1.2010,  13:10 Найти цитируемый пост)
Погодите, товарищи, уважаемые...

Используй буферизацию, т.е. подготавливай следующий кадр изображения до его показа...

Цитата(СЭНСЭЙ @  22.1.2010,  13:10 Найти цитируемый пост)
тот же старкрафте где скролл карты шустро вертится

Хоть и чисто спрайтовый вывод изображения, все равно через DX


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
AntonN
Дата 22.1.2010, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 7
Всего: 18



В досовских стратегиях размер экрана меньше, чем экраны сейчас.
Никаких DX и OGL, там попиксельный спрайтовый вывод, в принципе это реально делать и сейчас, если отойти от GDI и углубиться вниз до работы с данными напрямую (байт в массиве-спрайта по указателю). Но это муторно, хоть и с каким то результатом. Подобные вещи тестировали тут http://forum.vingrad.ru/index.php?showtopi...t&p=1735799

Автору советовал изучать OGL или DX, врядли текущий проект будет доделан и не выглядеть как куча костылей, но зато получишь опыт и возможно сделаешь что то другое.
bitblt() это очень быстрая штука, для блита копированием лучше придумать сложно, другое дело если нужно будет блитить с эффектами (с прозрачным цветом, с альфой, с полупрозрачностью) - вот тут тормоза и вылезут.
Так же совет по подобным извращенным играм - создавать все объекты заранее (никаких созданий буферов во время вывода и рисования спрайтов), рисовать на буферах. Возможно что то поможет отсюда http://desksoft.ru/index.php?files&id=3&owner=3


--------------------
user posted image
PM MAIL WWW   Вверх
СЭНСЭЙ
Дата 22.1.2010, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



Слушайте , вы если советуете , то сначала хоть взгляните на мой код.
Я конечно не мастер, но
во первых я и так рисую сначала на буфере. Именно процесс рисования и долго работает на старых компах.
еще во первых (парад первым во первых) у меня пошаговый режим. Я и так подготавливаю рисунок как отдельный этап.
Но хочу что бы это было быстрее.
во вторых рисования спрайтов у меня и так нет. Есть только загрузка из объекта имейдж лист, и их копирование на общую
картинку. Ну тут уж врядли проще можно.

уважаемый FOX - как я могу показать кадр не подготовив его изначально?

Проблема всего лишь в том, что само формирование такого большого изображения (33*21х33*21=693х693) хотя оно в общем то не такое уж и большое, а даже небольшое, занимает ощутимое время на первом пне.

Ну если не будет никаких решений то попробую разобраться в ДХ, хотя как то же эти проблемы раньше решали в старых играх.
PM MAIL   Вверх
eXtr0gen
Дата 2.2.2010, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 2.2.2010

Репутация: нет
Всего: нет



Классическим GDI на таком компе даже не все компоненты по современному без тормозов отрисуешь. Здесь люди правильно советуют не тянуть кота за хвост и переходить на DX или GL. Что до меня то рекомендую DGLEngine. Самый простой и интуитивный движок, который идеально тебе подойдет. Там есть все необходимое для написание простенькой и не очень как 2D так и 3D игры.


// 

Можно проще. Смотри в сторону TObjectList и хранения в нем битмапов. Только от проблемы медленной перерисовки тебя это все равно не избавит. Предел возможностей есть не только у железа твоего ПК, но и у GDI графики.

// 

На код взглянул.

Код

body1,body2:bodyp;
  body,bodyt:array[1..10] of bodyp;
  bodycount,bodycountt:integer;
  i,j,temp,z:integer;
  fieldw,fieldh,cz,h,w:integer; //cz - cellsize in pixels
  bitmap,bitmapg,ground_bitmap,object_bitmap,visborder_bitmap,cell_bitmap,bitmap_mask:tbitmap;
  rx,ry,px,py,bx,by:integer;
  alfa,beta,l,l2,k,b,sz:real;
  x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,x8,y8:real;
  dd:integer; //переменная задающая размер тела от настоящего до минимального
  terrain:array [1..200,1..200] of groundp;
  precision:integer;
  startup:boolean;
  hero:herop;


Это смахивает больше на кашу. 
Отведи отдельный юнит. В нем опиши классы обьектов. К ним напиши функции, словом - поработай сейчас, чтобы не ломать голову потом.
Это тебе же поможет.

Как минимум:

Код

TGameObject = record
Name:string;
SomeType:TSomeType;
....
Index:integer;
Pos:TPoint;
end;


Далее создай свою реализацию TList на основе данного обьекта и работа уже будет намного проще и приятнее.


Это сообщение отредактировал(а) eXtr0gen - 2.2.2010, 21:55
PM MAIL   Вверх
СЭНСЭЙ
Дата 22.2.2010, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



Спасибо за дельные советы.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0826 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.