Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.31;
Скачать: CL | DM;

Вниз

Редактор карт в DelphiX   Найти похожие ветки 

 
Аццкий_рыцарь:)   (2006-01-24 01:15) [0]

я наверное уже задолбал вас со своими тупыми и ламерскими вопросами :)

вот вопрос :)

Расскажите мне плиз как создавать редактор карт в DelphiX. Тоесть, как делается так что потом карта сохраняется в отдельный файл, а потом загружается?


 
Shirson ©   (2006-01-24 05:50) [1]

Это вопрос не столько по DelphiX, сколько по программированию.
У тебя карта матричная? Всмысле может быть представлена прямоугольным массивом? Если да - задачка для начинающих "как сохранить массив в файл".


 
Аццкий_рыцарь:)   (2006-01-27 00:06) [2]

Я карту создавал через semapsize(x,y)

А можно поподробней про массив?

Например как сделать чтоб когда загружаешь карту, то создавалась не просто как Bitmap карта... Например там есть объекты с которыми взаимодействует игрок. А это отдельные спрайты.

Я тут думал... А нельзя просто чтоб редактор карт сохранял координаты каждого объекта? а потом делфи читал строки и по ним создавал там что-то?

например я в редакторе карт создал камень в координатах 100, 130 и сохранил. В блокноте создается строка типа r1 100, 130. А делфи смотрит если строка начинается с r1, то надо создать камень в таких координатах.


 
Unsigned ©   (2006-01-27 00:21) [3]

Делай так. Игровое поле представляешь в виде прямоугольной матрицы N*M.
То есть что-то типа Map : array[0..n-1,0..m-1] of byte. Каждому коду в соответствие ставишь какой-то объект, например 0-трава, 1 - камень.
Потом можешь эту матрицу сохранять\загружать. Загружаешь и в соответствии с кодами в ячейках создаешь объекты. Их координаты можно найти так:
Х:=i*MapObject.Width,Y:=j*Object.Height, где i,j - координаты объекта в матрице.


 
PAVIA ©   (2006-01-27 00:45) [4]

Аццкий_рыцарь
Так и сохрони объекты.
Весч элементарная.
Все просто если объект храняться как матрицу. Так и сохрани ее.
А если хранишь как спрайты так и сохрани их.
for i:=0 to DXSpriteEngine^.Engine.Count-1 do
begin
Spr_Tmp:=DXSpriteEngine^.Engine.Items[i];
//тут уже твоя фантазия как хранить.
end;


 
Аццкий_рыцарь:)   (2006-01-27 01:39) [5]

Эх! счас сяду делать редактор :)


 
Cash ©   (2006-01-27 08:47) [6]

А я ведь не зря про формат файла говорил!
У тебя есть HEX редактор или FAR накрайняк.
Возми игруху, любую, главное с открытыми ресурсами.
Карты там обычно под *.map/*.m* расширениями файлов валяются.
Открой карту и посмотри в HEX виде. Там текст встречается очень редко,
чаще это диалоги или скрипты или описание карты. А все остальное - в
бинарном виде. Сделай как нибудь так:

Формат файла:
- Заголовок:
 Сигнатура (если надо)
(какая нибудь последовательность байтов, символизирующая, что это тот
самый формат. Обычно сюда пихают 3-4 байта, куда записывают само
расширение файла. Типа в C&C Generals карта - *.map файл, и сигнатура
у него тоже "MAPF")
 Ширина карты
 Высота Карты
 Количество Объектов на карте
(это, чтобы дать проге понять сколько еще читать этот файл)
 Описание карты (если надо)
- Тело карты
(сюда надо бы перенести масив индексов карты, они там Integer типа,
так что размер масива вроде 4*MapWidth*MapHeight)
- Тело объектов карты
 Сигнатура (если надо или охота)
 тело первого объекта
 тело второго объекта
 ------
 тело n-го объекта
eof.

Организовать это в файловом потоке достаточно просто.


 
Аццкий_рыцарь:)   (2006-01-27 16:21) [7]

ЭЭээээ.... ГГ... Я чета седня какой-то немного с будунца :) Ты не мог бы кинуть ссылочку на статью по этому? Чтоб там все внятно написано было без всяких типа: "синхронизовать интерполяцию частиц частей карты достаточно просто" :)


 
Кефир87 ©   (2006-01-27 16:42) [8]

Какие статьи?! Как организовать файл своего формата? Неее... врядли такие есть. Тут подумать надо. А научиться работать с файлами нужно было раньше чем заниматься разработкой игр 8)


 
Cash ©   (2006-01-27 17:20) [9]

Если надо, напишу статью прямо здесь.


 
Аццкий_рыцарь:)   (2006-01-27 17:47) [10]

НАПИШИ ПЛИЗ! :)


 
Кефир87 ©   (2006-01-27 19:18) [11]


> Если надо, напишу статью прямо здесь.

Ты уже написал все что нужно в [6] 8)


 
Cash ©   (2006-01-27 20:08) [12]

Кефир87 ©   (27.01.06 19:18) [11]:
... Все, что нужно знающему и рулящему в файловых потоках чуваку,
а не любому другому человеку!
Для любого другого - подготовлю статейку и выложу,
через некоторое время.


 
Кефир87 ©   (2006-01-27 20:53) [13]


> Все, что нужно знающему и рулящему в файловых потоках чуваку,
>
> а не любому другому человеку!

Любому другому человеку нефиг (или рано) заниматься геймдевом 8)


 
Cash ©   (2006-01-28 11:04) [14]

Аццкий_рыцарь:)   (27.01.06 17:47) [10]:
Для начала надо научиться работать с файловыми потоками "FileSteram".
Для этого есть класс TFileStream = class(TStream);

Открыть или создать файл через поток можно так:
var
 f: TStream;
begin
 f := TFileSteam.Create("c:\temp\text.txt",fOpenParam);
 // далее работаем с файлом через его поток
 f.free;
end;

fOpenParam - это параметр, который говорит как файл открывать.
Это может быть:
fmCreate - просто создать пустой файл
fmOpenRead - открыть файл для чтения
fmOpenWrite - открыть файл для записи
fmOpenAppend - открыть файл для дозаписи
fmOpenReadWrite - открыть файл для чтения и записи

Работа с потоком идет очень просто.
Размер файла можно узнать из свойства Size.
Позицию точки чтения/записи узнают из Position.
Запись любых параметров происходит из:
Write(buffer; buffersize);
WriteBuffer(buffer; buffersize);
buffer - то, что надо записать, buffersize - сколько байт надо записать.
Читают из потока с помощью:
Read(var buffer; buffersize);
ReadBuffer(var buffer; buffersize);
Тут параметры теже самые.

Теперь смотри. К примеру нам надо записать занчение Word поля
в файл. Для этого надо сделать следующее:

var
  f: TFileSteram;
  b: word;
begin
  b:=628;
  f:=TFileStream.Create("c:\temp\data.bin",fmCreate);
  f.Write(b,2);  // т. к. Word занимает два байта
  f.free;
edn;

Ну, хорошо, записали! А что мы записали? Хвиг его откровенно знает! :)
Можно через любой HEX редактор посмотреть то, что там записано.
А вот сказать своей проге читеть можно так:

var
  f: TFileStream;
  b: word;
begin
  f:=TFileStream.Cerate("c:\temp\data.bin",fmOpenRead);
  f.Read(b,2);
  f.free;
  ShowMessage(Inttostr(b));
end;

Вот, вприципе так все и работает. С записями "Record" также, только запись
для записи в файл надо сделать неразрывной, то есть тип назвать так:
"Packed Record". И можно писать и читать прямо целые блоки данных.

Теперь применительно к карте. Положи DxSpriteEngine в редактор и в него
создавай свои препятствия и всякие штуки (бонусы там или точки
респаунов у монстряков). Потом, нужен TBackgroundSprite для хранения
самой карты. Начинку редактора делай сам. Тут я из вредности не помогу ;).
А вот для сохранения карты (и для загрузки тоже) надо еще один класс
сделать. Создай класс наследник от TComponent. и у него впиши два
поля: Sprites: TDxSpriteEngine; и Map: TBackgoundSprite;.
Теперь сама процедура сохранения:
<coe>
Type
  TSaveContainer = class(TComponent)
    Public
      Sprites: TDxSpriteEngine;
      Map: TBackgroundSprite;
  end;

Procedure SaveToStream(var Stream: TStream);
var
  Cont: TSaveContainer;
begin
  Cont:=TSaveContainer.Create(nil);
  Cont.Sprites:=DxSpriteEngine1;
  Cont.Map:=GlobalEditedMap;
  Stream.WriteComponentRes("MyMapAndObjects");
  Cont.free;
end;


Теперь сам подумай, как сохранить не в поток, а в файл, да при этом время
кодерское экономить!

А вся загрузка делается так:

var
  Cont: TSaveContainer;
begin
  Cont:=TSaveContainer.Create(nil);
  Cont.Sprites:=DxSpriteEngine;
  Cont.Map:=GlobalEditedMap;
  Stream.ReadComponentRes(Cont);
  Cont.free;
end;


вот в общем и все!
Это без формата. так вроде быстрее и проще, формат уже за тебя сделан.
:))) Когда подростешь, научу форматы делать! :)))

На заметку: Учи англиский по справке Delphi :)))


 
Аццкий_рыцарь:)   (2006-01-29 00:18) [15]

Сча попытаюсь понемногу разобраться...

вот смотри, например, я хочу по клику мыши создать файл data1.bin в директории D:\ и записать туда число 655...:



unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, DXClass, DXSprite, DXInput, DXDraws, StdCtrls, DIB, ExtCtrls,
 ImgList;

type
 TForm1 = class(TDXForm)
   DXDraw1: TDXDraw;
   DXImageList1: TDXImageList;
   DXInput1: TDXInput;
   DXSpriteEngine1: TDXSpriteEngine;
   DXTimer1: TDXTimer;
   Button1: TButton;
          procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
       procedure Button1Click(Sender: TObject);
 private

   { Private declarations }
 public
   { Public declarations }
 end;

  TFileStream = class(TStream);

var
                 

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

 var
 f: TFileStream;
 b: word;
begin
 b:=655;
 f:=TFileStream.Create("D:\data1.bin",fmCreate);
 f.Write(b,2);
 f.free;
end;

end.


и делфи ругается на строку f:=TFileStream.Create("D:\data1.bin",fmCreate);
и говорит что too many actual parameters


 
Аццкий_рыцарь:)   (2006-01-29 00:18) [16]

Сча попытаюсь понемногу разобраться...

вот смотри, например, я хочу по клику мыши создать файл data1.bin в директории D:\ и записать туда число 655...:



unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, DXClass, DXSprite, DXInput, DXDraws, StdCtrls, DIB, ExtCtrls,
 ImgList;

type
 TForm1 = class(TDXForm)
   DXDraw1: TDXDraw;
   DXImageList1: TDXImageList;
   DXInput1: TDXInput;
   DXSpriteEngine1: TDXSpriteEngine;
   DXTimer1: TDXTimer;
   Button1: TButton;
          procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
       procedure Button1Click(Sender: TObject);
 private

   { Private declarations }
 public
   { Public declarations }
 end;

  TFileStream = class(TStream);

var
                 

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

 var
 f: TFileStream;
 b: word;
begin
 b:=655;
 f:=TFileStream.Create("D:\data1.bin",fmCreate);
 f.Write(b,2);
 f.free;
end;

end.


и делфи ругается на строку f:=TFileStream.Create("D:\data1.bin",fmCreate);
и говорит что too many actual parameters


 
Аццкий_рыцарь:)   (2006-01-29 00:19) [17]

ой, у мну тут проблемы с инетом, извеняюсь за 2 одинаковых топа


 
Аццкий_рыцарь:)   (2006-01-29 02:00) [18]

Эээ.... я, конечно извеняюсь за оффтоп, но я в шоке! Делфи не запускается! я уже его и переустанавливал 10 раз и НИФИГА! А ПАНИКА!

выскакивает окно с названием Registry Delphi и в нем пишется:

borland license information was found, but it is not valid for Delphi.

You can not run delphi without this information

Click the Exit button to exit Delphi

exit

и все! никаких кнопок типа enter new registration code ! ЧЕ ДЕЛАТЬ!?


 
Аццкий_рыцарь:)   (2006-01-29 02:07) [19]

Ой виноват! :) только что разобрался. С такой пираткой я еще не сталкивался! :) столько примочек всяких! но, СЛАВА БОГУ ВСЕ НОРМАЛЬНО!

еще раз извеняюсь за оффтоп, прошу модера удалить лишние посты, а мастеров не смотреть на них :)


 
Unsigned ©   (2006-01-29 04:24) [20]


>  public
>    { Public declarations }
>  end;
>
>   TFileStream = class(TStream);
>
> var
>        

Тебе не нужно объявлять этот класс. Это стандартный класс и он описан в модуле classes.pas.


 
Unsigned ©   (2006-01-29 04:26) [21]

Убери эту строку и все должно заработать.


 
Аццкий_рыцарь:)   (2006-01-29 05:41) [22]

Получилось число записать :) сенк, Unsigned!

тэкс! я тут пытался записать спрайты в файл и угадайте вышло это у меня или нет :)

вот мой неработающий код



unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, DXClass, DXSprite, DXInput, DXDraws, StdCtrls, DIB, ExtCtrls,
 ImgList;

type
 TForm1 = class(TDXForm)
   DXDraw1: TDXDraw;
   DXImageList1: TDXImageList;
   DXInput1: TDXInput;
   DXSpriteEngine1: TDXSpriteEngine;
   DXTimer1: TDXTimer;
   Button1: TButton;
      procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
   procedure FormCreate(Sender: TObject);
   procedure FormKeyDown(Sender: TObject; var Key: Word;
     Shift: TShiftState);
   procedure Button1Click(Sender: TObject);
 private

   { Private declarations }
 public
   { Public declarations }
 end;

  Type
 TSaveContainer = class(TComponent)
   Public
     Sprites: TDxSpriteEngine;
     Map: TBackgroundsprite;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 Cont: TSaveContainer;
 f: TFileStream;

begin
 Cont:=TSaveContainer.Create(nil);
 Cont.Sprites:=DxSpriteEngine1;
 Cont.Map:=grass;
 f:=TFileStream.Create("d:\data12321.bin",fmCreate);
 f.Write(cont.Sprites,7836);
 f.free;
 Cont.free;
end;



файл-то создается, но его размер = 0 байт :( я ж написал сколько должно быть, а почему создался пустой файл? кстати как мне узнать размер буфера? а то 7836 - я приплюсовал вес картинок спрайтов, и мне кажется, это неправильно :(


 
Cash ©   (2006-01-29 09:21) [23]

Аццкий_рыцарь:):
Ты сколько программированием занимаешься???
Уж больно ошибки глуповатые! :(((
Это чесно говоря не радует! :(((

[22]:
Потаму, что ты пытаешся адрес записать, точнее даже не адрес,
чтото среднее между указателем и объектом этого указателя.

Я же написал:
f.WriteComponentRes("Чё_Нибудь_Там",Cont);

Там ошибочка была, вот здесь правильно.


 
Аццкий_рыцарь:)   (2006-01-29 12:03) [24]

Лана, записал :) А когда считываю вылазит вообще левая ошибка! :



procedure TForm1.Button3Click(Sender: TObject);

var
 Cont: TSaveContainer;
 f: TFileStream;

begin
 Cont:=TSaveContainer.Create(nil);
 Cont.Sprites:=DxSpriteEngine1;
   f:=TFileStream.Create("d:\data12321.bin",fmOpenRead);
 f.ReadComponentRes(cont);

  f.free;
 Cont.free;
end;



ошибка Project Project1.exe raised exception class EReadError with message "Property DXDraw does not exist" . И че ему в этом DXDraw не понравилось !?


 
Домовенок ©   (2006-01-29 12:52) [25]

>> Это без формата. так вроде быстрее и проще, формат уже за тебя сделан.
>> :))) Когда подростешь, научу форматы делать! :)))


А можно ссылку, где можно про форматы почитать? А то давно мечтаю с этим разобраться, но никак не могу найти нормальную информацию по этому поводу. Может, конечно, плохо искал...


 
Cash ©   (2006-01-29 13:26) [26]

Домовенок ©   (29.01.06 12:52) [25]:
http://www.extractor.ru :)))

Аццкий_рыцарь:)   (29.01.06 12:03) [24]:
А вот это уже хреново! :(
Я впринципе на этот результат рассчитывал, но не надеялся.
Придется всетаки формат делать. Лады, чуть погодя прдумаю,
как осуществить формат, но мне надо знать: что за препятсятвия
ты запихать в файл хочешь? И еще: если там несколько классов
этих препятсятвий - какие между ними различия, и не лучше ли
их в один объединить?


 
Аццкий_рыцарь:)   (2006-01-29 14:23) [27]

Cash у меня только один клас для препятствий. Этот клас - TObjectdo:=class(TImagesprite). В нем изменяются только картинка (ну, типа камень или домик),  координаты, и пару переменных класса integer.


 
Cash ©   (2006-01-29 14:28) [28]

Как это где то написанно было, перефразирую под ситуяцию:
"Вечером перечитывал орешник...., мното думал!" :D :D :D
Вот, нашел, на мой взгляд ничего:
http://www.delphimaster.ru/cgi-bin/nuts.pl?&showpage=12 // 3-я снизу запись
http://www.delphimaster.ru/cgi-bin/nuts.pl?&showpage=13 // 1-я и 2-я тоже снизу

Аццкий_рыцарь:)   (29.01.06 12:03) [24]:
А когда exception вылезает именно?
И где дебаггер ставит останов, внутри кода загрузки или где нибудь еще?


 
Аццкий_рыцарь:)   (2006-01-29 14:38) [29]

Cash, а не легче будет просто в редакторе и в игре создать массив, объявить в нем несколько переменных. Например я создаю в редакторе домик в координатах 100, 100, с картинкой domik1  он непроходимый, и при столкновении с ним не происходит никаких событий в 1 ячейку массива пишу xobj:=100, yobj:=100, blockobj:=true, eventsobj:=false, imageobj:=1;Потом этот массив записать в файл. В игре его загрузить. допустим j - это номер ячейки массива, а их там например 100 :


for j:=1 to 100 do begin

with tobject.create(dxspriteengine1.engine) do begin

x:=xobj;
y:=yobj;
block:=blockobj;
events:=eventsobj;
if image=1 then image:=form1.dximagelist1.items.find("domik1");
end;
end;


ты не подскажешь как такой массив записать в файл, а потом загрузить?


 
Cash ©   (2006-01-29 14:41) [30]

Аццкий_рыцарь:)   (29.01.06 14:23) [27]:
Это хорошо. Ничего усложнять не надо, но для начала
просмотри под дебагом всю процедуру загрузки карты
и удели внимание свойству DxDraw у DxSpriteEngine1.
Нужны ответы на вопросы из [28]:

P. S.: Во нашел самый крутой орех! Самая последняя запись.
http://www.delphimaster.ru/cgi-bin/nuts.pl?&showpage=2


 
Аццкий_рыцарь:)   (2006-01-29 14:41) [31]

Cash, это тонкий намек на мое ламерство? :) но кликать мышью я умею :)


 
Cash ©   (2006-01-29 14:44) [32]

Аццкий_рыцарь:)   (29.01.06 14:38) [29]:
Ты же на модеме! Только отпишу, смотрую твой пост вперед встал! :)))

В общем именно так для данного случая и длается.
Так действительно проще будет.


 
Cash ©   (2006-01-29 14:45) [33]

Аццкий_рыцарь:)   (29.01.06 14:41) [31]:
Не, это просто для разрядки обстановки,
нашел прикольные штуки и решил поделиться!


 
Аццкий_рыцарь:)   (2006-01-29 14:47) [34]

Ответы на 28

exception вылазит когда кликаю на кнопки, но что обидно,что дебаггер не показывает на конкретную строку в коде, а останавливается на application.run


 
Аццкий_рыцарь:)   (2006-01-29 14:52) [35]

Cash, я-то на модеме, но родителей же нету дома, так что вишу сколько влезет :)

Насчет массива, ты бы не мог показать как массив этот в файл записать а потом считать?


 
Cash ©   (2006-01-29 14:53) [36]

Аццкий_рыцарь:)   (29.01.06 14:38) [29]:
На счет сохранения:
Возьми запись, примерно такую:

TObjRec = packed record
  .... // сюда впиши нужные поля
end;

Потом сделай масив из этих эаписей.
Размер масива будет <к-во элементов>*Sizeof(TObjRec)
и потом используй цыкл с такой конструкцией:
f.write(ObjArray[i],SizeOf(TObjRec));
Для того, чтобы эти записи удачно считать надо сперва записать
сколько всего этих записей.


 
Аццкий_рыцарь:)   (2006-01-29 14:56) [37]

тэкс, сча попытаю счастья :) авось заработает :)


 
Cash ©   (2006-01-29 15:00) [38]

Аццкий_рыцарь:)   (29.01.06 14:47) [34]:
А ты поставь BreakePoint (F5) на самой первой строчке процедуры загрузки и
потом проследи (с помощью F8) вся ли она без эксепов (exception) проходит.
А еще возми и через Ctrl+F5 добавь в просмотр свойство DxDraw у
DxSpriteEngine. У меня закралось сомнение, что надо в самом конце просо
сделать DxSpriteEngine1.DxDraw:=DxDraw1;


 
Cash ©   (2006-01-29 18:57) [39]

Видать предки пришли! :)))))))


 
Кефир87 ©   (2006-01-29 20:55) [40]


> Cash ©   (29.01.06 14:28) [28]
>
> Как это где то написанно было, перефразирую под ситуяцию:
>
> "Вечером перечитывал орешник...., мното думал!" :D :D :D
> Вот, нашел, на мой взгляд ничего:
> http://www.delphimaster.ru/cgi-bin/nuts.pl?&showpage=12
> // 3-я снизу запись
> http://www.delphimaster.ru/cgi-bin/nuts.pl?&showpage=13
> // 1-я и 2-я тоже снизу
>
> Аццкий_рыцарь:)   (29.01.06 12:03) [24]:
> А когда exception вылезает именно?
> И где дебаггер ставит останов, внутри кода загрузки или
> где нибудь еще?

Пора признать, что одна из этих записей пренадлежит мне, только 3 или 4 года назад 8)) Хотя и нифига не стыдно!


 
Cash ©   (2006-01-29 21:00) [41]

А я вот ни одной из своих не нашел! :(
А хочется! :)))


 
grouzd[E]v ©   (2006-01-29 21:42) [42]

оффтоп
Кефир, сто пудов " Дело такое, у меня есть программа, но она закомпилированна..." =)))
блин, а я туда не попал. а добавьте меня а? я глупый вопрос придумаю =)

---
... we are walking on a thin line and you better avoid the risk ...


 
Кефир87 ©   (2006-01-29 22:57) [43]

grouzd[E]v, Не угадал 8)


 
Cash ©   (2006-01-30 14:41) [44]

На заметку Аццкому рыцарю:):
Хелп русский я так и не смог отправить, зато нашел такой вот сайтик.
Полазий там, я думаю, найдешь кучу для себя полезного!
http://www.citforum.ru/programming/delphi.shtml

особенно вот здесь:
http://www.citforum.ru/programming/digest/drx.shtml

P. S.: чуваки, хватит флудить ветку!


 
Аццкий_рыцарь:)   (2006-01-30 15:37) [45]

Там когда про объекты и анимацию ссылки нажисаешь - 404 ошибка нет страницы :(

Cash, так как там начет сохранения и загрузки массива?

И ... тут идейка, а нельзя организовать освещение в 2Д проэкте, используя 3Д? Мне, например освещать надо файрболы, вот взять и к каждому из них прикреплять лампочку :) и глюков не должно быть :)


 
Cash ©   (2006-01-30 16:20) [46]

Аццкий_рыцарь:)   (30.01.06 15:37) [45]:
Посмотри вторую страницу этой ветки.
Мне всетаки интересно где именно происходит эксеп.
И формат изобретать неохота... покачто.
Просто, если там будет все дело в том, в чем я думаю, то вопрос будет
решен быстрее.

А где этот "там", где 404 вылетает.

... освещение в 2Д проэкте, используя 3Д ...
Сомневаюсь, а мож у меня по этому вопросу знаний мало (по DirectDraw и свет)!


 
Cash ©   (2006-01-30 16:35) [47]

Блин, вот на Omega или Power Draw или DGL Dron-овском свет делается
в рас-два!
Потаму, что там все через 3D выводится.
А DelphiX в этом отношении: "р-р-р-р... Гав-.... Гав-Гав...."! :))


 
Аццкий_рыцарь:)   (2006-01-30 19:55) [48]

Мне просто обидно будет закидывать ДелфиХ, ведь уже столько в нем понял, да и игру уже до половины сделал:)

насчет процедуры, там вроде все нормально. Выделил первую строку Ф5 потом Ф8 нажал, нифига не выдало ошибки :) А когда загружается, то почему-то каретка компилятора останавливается на
program Project1;

uses
 Forms,
 Unit1 in "Unit1.pas" {Form1};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end


 
Shirson ©   (2006-01-31 13:34) [49]


> Аццкий_рыцарь:)   (30.01.06 15:37) [45]
> И ... тут идейка, а нельзя организовать освещение в 2Д проэкте,
>  используя 3Д? Мне, например освещать надо файрболы, вот
> взять и к каждому из них прикреплять лампочку :) и глюков
> не должно быть :)


Да, можно. Говорил уже. И не раз. И говорил как :)

На месте fireball выводишь белый круг, у которого интенсивность белого гаснет от центра к краям. Выводишь при помощи команды drawadd. Сверху рисуешь fireball. Всё.


Cash ©   (30.01.06 16:35) [47]
Блин, вот на Omega...

Что на омега? Один фик, делать ты это будешь через наложение изображения с логическим OR. Причём на омеге это реализованно криво - прозрачность изображения не регулируется, при логических операциях.
Плюс дурная реализация поверхностей.
Сделай на омеге такое:
Есть картинка (статик). Есть ползунок, который регулирует "освещённость" картинки. Плавно. И есть крсор, который является omnilight и освещает небольшую область картинки.
Потом усложни задачу.
Есть звёздное небо (фон) и есть летающая тарелка. Ползунок регулирует уровень темноты вокруг (причём только на тарелку, звёздное небо на это забило). Курсор является фонариком. Который освещает только тарелку, а звзёдное небо - нет.
Просто ради прикола сделай.
Потом говори "вот на Omega..." :)


 
Cash ©   (2006-01-31 15:51) [50]

Shirson ©   (31.01.06 13:34) [49]:
Р-р-р-р-р-р-р.... ты омегу не тронь! Идать мало про нее знаешь!
Незачем там через зад со скальпилем, там через парадный вход все тип-топ
делается. Ты просто не с того конца подошел!
Знамо бы что есть такое источник света и что такое нетрансформируемые
вершины знал бы как с ними работать.
(я на омеге много чему научился, и мне просто западло слушать и читать
всякую откровенную ерунду)

Зачем усложнение до логических переменных, пусть хард все за меня
делает, для этого же его создали! (речь не о винчестере)

Аццкий_рыцарь:)   (30.01.06 19:55) [48]:
... И, видать трейсингу и дебагу необучен?
Другими словами делаем так:
- ставим где надо брейкпоинт и запускаем прогу.
- прога остановится на том брейк-е.
- через Ctrl+F5 добавляем просмотр переменной DxSpriteEngine1.DxDraw.
- после выполнения команды f.ReadComponentRes(...); смотрим, что у нас
с этим самым свойством, если его поле поменялось или (не дай F1 :) )
встало в nil, то в конце после f.free; надо заново установить поле DxDraw.
И все.


 
Shirson ©   (2006-02-01 06:00) [51]

>Cash ©
Ну так закодь, покажи, просвети :)


 
Аццкий_рыцарь:)   (2006-02-01 08:40) [52]

Shirson а как мне интенсивность белого понизить? я имею в виду чтоб плавно было. Не мог бы ты кодец подкитнуть?

я поставил брейкпоинт на  Cont:=TSaveContainer.Create(nil); и оно показывает на эту строку, "что тут что-то не так" :)

Кстати, Cash, вот  2 проэкта - 1)загрузка, 2) сохранение webfile.ru/784296


 
Shirson ©   (2006-02-01 08:50) [53]


> Аццкий_рыцарь:)   (01.02.06 08:40) [52]
> Shirson а как мне интенсивность белого понизить? я имею
> в виду чтоб плавно было. Не мог бы ты кодец подкитнуть?

Какой кодец? Открываешь фотожопу, создаёшь новое изображение, заливаешь его чёрным, выбираешь кисть приемлемой толщины, белый цвет, тыкаешь в центр картинки и сохраняешь её в .bmp
Имеешь картинку, в которой белый цвет теряет интенсивность от центра к краям, йоу :)
Грузишь эту картинку в DXImagelist и выводишь на экран командой DrawAdd.
Вместо белого цвета можно создать красный, если для огня (можно и белый раскрашивать, в процессе выполнеения проги, но тебе это пока рано:) ). Вот и всё, собственно.


 
Cash ©   (2006-02-01 08:54) [54]

Shirson ©   (01.02.06 06:00) [51]:
http://www.projectcl.h15.ru - зайди в раздел "Фотоальбом" и посмотри
Единственное, о чем я желею - это текстурка долбаная, я ее уже поменял.
теперь все более качественно, но я всеравно ее еще не покажу.

Аццкий_рыцарь:)   (01.02.06 08:40) [52]:
Не, все нормально. Это говорит что делфя твоя нормально пашет.
Спускайся ниже по коду с помощью F8 и смотри что дальше будет.
F8 - это выполнение кода до следующей строки, т. е. ставишь
брейк на Cont:=TSaveContainer.Create(nil);, после останова на нем
жмешь по F8 и Cont создается, это посмотреть можно через Ctrl+F5.
(Выдели слово Cont и нажми Ctrl+F5, появится окошко с надписью Cont
и в нем будет либо адрес либо nil либо "[]" - что означает класс)
И так далее спускайся по коду и смотри, если вылетит эксеп, то
действительно надо менять процедуру загрузки, а если нет, то в конце
перезаписать свойство DxDraw.

А ты как баги свои правишь, если этого не знаешь???


 
Аццкий_рыцарь:)   (2006-02-01 10:17) [55]

Баги правлю... Сижу и думаю:" что не так в коде?" :)


 
Cash ©   (2006-02-01 10:51) [56]

Аццкий_рыцарь:)   (01.02.06 10:17) [55]:
Извращенец! :)))
Работай с дебагером, без него туго бывает.


 
Shirson ©   (2006-02-01 11:39) [57]

>Cash ©  

Гхм... Cash, ты меня звеняй конечно, но ЭТО ты называешь освещением?
Ничего личного, но на освещение это похоже весьма отдалённо :)
Посмотри (внимательно) на шот DM_tweak, где пересекается два зелёных "света". Если меня не обманывают глазки, там наблюдается странные тёмные зоны на пересечении света. Это, пардон, лажа :)

Наш ответ Чемберлену, всмысле Кэшу.
Картинка твоя, свет мой (DelphiX). Поставь рядом и сравни ;)
http://img232.imageshack.us/my.php?image=chamber5tm.jpg


 
Shirson ©   (2006-02-01 11:40) [58]

P.S. Сделанно на скорую руку, буквально минут за пять.


 
Cash ©   (2006-02-01 11:51) [59]

Shirson ©   (01.02.06 11:39) [57]:
Зараза ты такая! Я ж сразу сказал, что текстура - лажа.
Пятно света тоесть! Я исправил ее. То, что ты видел - какраз из фотозада! :)
А переделанная - из моей проги, которая фрактально строит такое пятно.
Потом, все потом выложу и скрины обнавлю.

Знаю я про эту фигню старую, исправил, но (еще раз) не покажу, покажу
потом, когда всю игру полажу.

А FrameRate ты не покажешь? и конфиг машины. Там же блендинг делается
софтово, а на Omega - харварно, то есть пости без тормазов. Если руки есть
и голова, то можно сделать достаточно качественное освещение через
блендинг. Но и то и твое - не освещение! это так... выпендреж, мол "В моей
игрухе типа свет есть! О!"


 
Shirson ©   (2006-02-01 11:58) [60]

"Не важно как это сделано, главное, как это выглядит" :)
Выглядит оно хорошо, значит всё путём. Реального освещения вообще нигде нету, по большому счёту ;)

FPS в районе 70 (unDelphiX), так что насчёт софтово это ты со зла. Картейка никакая - GF4MX440 :(

P.S. "Не покажу, не покажу..." - жадина :)


 
Cash ©   (2006-02-01 12:04) [61]

Shirson ©   (01.02.06 11:58) [60]:
... жадина :) ...
Я знаю, не завидуй! :)))

... FPS в районе 70 (unDelphiX), так что насчёт софтово это ты со зла ...
Была у меня такая карта. но на ней весь мой движок в его старом
исполнении давал 180 fps. Сейчас, после оптимизации - дает 960 fps.
А на моем сейчашнем жеребце - 2500 - 3200 fps. :))) Заценил разницу?!


 
Shirson ©   (2006-02-01 12:17) [62]

3000 fps это да. Только на глаз не отличимо от 90 :)


 
Cash ©   (2006-02-01 12:32) [63]

Shirson ©   (01.02.06 12:17) [62]:
Отличимо отличимо! Люблю текстурные курсоры, и когда скорость меньше
100 fps при резких движениях мышью курсор начинает скакать по полю.
Зрелище не слишком лицеприятное, поэтому предпочитаю держать fps
как можно ближе к идеальному.


 
Shirson ©   (2006-02-01 12:35) [64]

Ладно, выложишь - посмотрим. А так рассуждать не интересно.


 
Cash ©   (2006-02-01 12:39) [65]

Shirson ©   (01.02.06 12:35) [64]:
Лады...

ЗЫ: опять тему леваком зафлудили! :)))

Икуда это Хозяин ветки подевался?


 
Аццкий_рыцарь:)   (2006-02-01 15:09) [66]

ВОТ ОН Я ! :)

Cash, я там выкладывал свои два прожекта, в первом загрузка во втором сохранение. Ты не мог бы посмотреть, вместо флужения :) ВОТ КОД webfile.ru/784296

Shirson я сделал в фотожабе черный фон и кистью сделал белый свет, типа размывается, но делфи там транспарент колор галимо ищет, и получается не свет, а квадрат по краям черный а в середине белый круг, в котором белый по краям стает меньше насыщеным:( Можешь свой код сюда кинуть? тот который ты "на скорую руку" написал выше :) Кстати, ты там альфу не использовал? а то у меня в игре она будет глючить. Я там и так бьюсь за каждый фпс:)


 
Shirson ©   (2006-02-01 15:34) [67]

Да я закрыл его уже давно, без сохренения :)

"но делфи там транспарент колор галимо ищет"
Там вообще не нужно такого понятия - транспарент колор :) Изображение нужно выводить DrawAdd.
Выводил с альфой, но можно и без неё. Для этого само изображение нужно подшаманить - делать не белым, а серым.


 
Shirson ©   (2006-02-01 15:39) [68]

Пытался посмотреть твой проект, отсутствует файл data111.bin


 
Аццкий_рыцарь:)   (2006-02-01 16:08) [69]

не, там первый проэкт создает этот файл и записывает туда спрайты, а другой пытается их загрузить


 
Cash ©   (2006-02-01 16:16) [70]

Вроде все теперь ясно стало. Ладно, придется подождать тебе.
Склепаю модуль и передам. Только уяснить надо одно.
В файл сохраняется только карта и объекты прпятствий, так?
А сами эти препятствия однотипны, так?
И изменяется у них только X,Y,ImageIndex, так?
Или вместо ImageIndex сама Image меняется?

Совет на будущее:
 заведи себе HEX редактор, в таких случаях он
 необходим.


 
Аццкий_рыцарь:)   (2006-02-02 09:33) [71]

В файл сохраняется спрайт бэкграунда, нетайловый, а здоровый спрайт. Помнишь,на который монстряков я рисую мертвых? :) Еще сохраняются препятствия, но у них сделай плиз пару boolean и integer переменных, в них можно ставить, например что это НПЦ а не камень, и что по клику на него надо открыть окно и что-то изменить в сюжете. У препятствий изменяется не х, у, а xobj и yobj типа integer, потом в процедуре DoMove карты, я к ним плюсую х,у карты. Изменяется у препятствий не ImageIndex, а просто Image.

А так все препятствия являются одним классом. Они однотипны.


 
Cash ©   (2006-02-02 10:12) [72]

Аццкий_рыцарь:)   (02.02.06 09:33) [71]:
То есть карта состоит из одного тайла, под размер экрана?
А что тогда ты в ней изменяешь?
И Image у препятствий - выбираешь по имени картинки?
Или по ее индексу в ImageList?


 
Аццкий_рыцарь:)   (2006-02-02 13:25) [73]

НЕ

У меня 3 спрайта

1) Это карта grass=class(TBackGroundSprite); Тайловая, в которой её картинка повторяется (это трава, земля и т.д),

2) второй нетайловый, просто ОДИН ЗДОРОВЫЙ СПРАЙТ, картинка которого маленький квадратик белого цвета, а transparentcoor у него включен на белый, и этого спрайта мы не видим, но на именно этом бэкграунде я рисую трупов и т.д.

3) Это спрайт препятствия ObjectDo=class(TImageSprite). Им может быть домик, камень или если поставить public переменную в нем boolean NPC:=true, то этот спрайт является НПЦ, но он не перестает быть препятствием :) (об него тоже надо упираться как игроку так и монстрам)


 
Cash ©   (2006-02-02 16:12) [74]

Аццкий_рыцарь:)   (02.02.06 13:25) [73]:
Класс ObjectDo (кстати, почему не по правилам назван?) имеется в
тех двух проектах, которые ты на WebFile кинул?


 
Аццкий_рыцарь:)   (2006-02-02 19:29) [75]

По правилам не назвал (которых я незнаю :) ) потому, что мне так удобней:)

А на тех файлах его нет :( я просто там создал левые спрайты, чтоб проверить как все записывать и грузить


 
Аццкий_рыцарь:)   (2006-02-02 23:15) [76]

И ПРОСЬБА К SHIRSON`у !!

скинь плиз на вэбфайл исходник, каким образом ты реализовал свет в DelphiX. А то я через drawadd вывожу, то там где должен быть задний фон спрайта (transparentcolor у него := true), у меня там смешивается... короче, СКИНЬ ПЛИЗ!


 
Cash ©   (2006-02-03 10:01) [77]

По правилам - это типа с понтами, примерно с такими:
Не ObjectDo (не понятно, что этот класс из себя представляет), а
TNPCObject (говорит отом, что это тип [T], а не переменная,
о том, что это объект НПЦ [перевод дальнейшего названия])

В [44] я ссылку дал на сайт, там и про это все расписано, только,
как говорится, расписано как для дебилов. Я читал и потехоньку
создавалось впечатление, что автор меня за дебила принимает...
или за женщину. 8)
"первая буква обязательно "T", а вторая такая то...."

Выпиши сюда или кинь на WebFile модуль, где этот тип описан.
Нужно его полное описание со всеми методами и т. д.


 
Аццкий_рыцарь:)   (2006-02-03 13:40) [78]

Смогу только завтра утром, тошо ЭКЗАМЕН, НАХ! АААА!!!!!!!!! ФИЗИКА, ШОБ ЕЁ!


 
Shirson ©   (2006-02-03 14:04) [79]

Физика - рулез :)

P.S. Сорцов нет, я же сказал, что закрыл проект не сохраняя.


 
Домовенок ©   (2006-02-04 00:14) [80]

> Cash ©   (01.02.06 12:32) [63]
> Люблю текстурные курсоры, и когда скорость меньше
> 100 fps при резких движениях мышью курсор начинает скакать по полю.
> Зрелище не слишком лицеприятное, поэтому предпочитаю держать fps
> как можно ближе к идеальному.


Идеальный FPS считается 60-80... На некоторых машинах при FPS более 100 картинка неровно перерисовывается и изображение рябит. У меня такая проблема была, например в Call Of Duty - играть было не возможно, спас vsync в опциях игры. Много где еще с аналогичными проблемами сталкивался.


 
Cash ©   (2006-02-04 09:25) [81]

Домовенок ©   (04.02.06 00:14) [80]:
Не на некоторых машинах, а на мониторах с низкой вертикальной разверткой.
В таких случаях либо VSYNC либо преобрести качественный монитор.

Аццкий_рыцарь:)   (03.02.06 13:40) [78]:
Мне этот класс нужен для завершения модуля.
Это будет модуль твоей карты, все как надо + возможность
сохранения/загрузки в спец. формат файла.


 
Домовенок ©   (2006-02-04 11:17) [82]

> Cash ©   (04.02.06 09:25) [81]

У меня вообще-то нормальный монитор :).
А ты игру пишешь для себя? Или пользователи с неправильным монитором у тебя в расчет не идут? И кстати правильно тебе написали, сколько бы фпс у тебя не было, визуально это будет выглядеть как 100-120.

*Извиняюсь за оффтоп.


 
Cash ©   (2006-02-04 11:36) [83]

Домовенок ©   (04.02.06 11:17) [82]:
Ну... как знаешь, Call Of Duty у меня без VSYNC идет, нравится!!!!....
А нерадивые юзвери с кривыми и уж очень старыми мониторами пусть на
этот самый VSYNC и надеются. Он вроде для них и для ну очень
требовательных к видеоотдаче людей сделан.
"Вертикальная синхронизация поможет избежать некоторых дефектов в
видеопередаче..."
Большой оборот кадров говорит о легкости и быстроте кода. Можно и
подумать о какой нибудь фиче для улучшения гейминга! А если у тебя
при выводе 120 примитивов оборот составит около 80 - 90 кадров, то
время думать не о фичах, а о том, что к хирургу пора, руки к плечам
с пятой точки перешивать!


 
Аццкий_рыцарь:)   (2006-02-04 14:30) [84]

ФИЗИКА - 5 !!!! ААА!!!!!! все, ща похаваю и выложу код с ObjectDo :)


 
Cash ©   (2006-02-04 14:32) [85]

Аццкий_рыцарь:)   (04.02.06 14:30) [84]:
Физик много бывает, какая именно?


 
Аццкий_рыцарь:)   (2006-02-04 14:44) [86]

У нас пока что общая :) 1 курс техникума :)

вот класс:

 type
 TObjectdo = class(TImageSprite)
 protected
 procedure DoMove(MoveCount: Integer); override;
 private
 xobj:integer;
 yobj:integer;
 questprogress:integer;
 isclickable:boolean
 end;

и кстати, насчет освещения...

мне получилось сделать как тут говорили, но мне кажется что будет легче и меньше глюков, если только раз нарисовать этот свет на спрайте, а потом уже перерисовывать. Только у мну не получается одна вещь... Как сделать, чтоб у спрайта рисунка небыло, всмысле картинки, но рисовать на нем можно было. Я пытался делать типа рисунок белый квадрат, и транспарент включал на белый, но когда я drawadd, на него :), то свет смешивается с воном и получается резкий переход.


 
Cash ©   (2006-02-04 14:54) [87]

Аццкий_рыцарь:)   (04.02.06 14:44) [86]:
Гы-гы-гы... мне нужен полностью работоспособный класс, так что и DoMove
тоже надо огласить. Дело в том, что его надо будет бросить в модуль с
классом карты, для этого надо его полностью переписать. Поэтому мне и
нужен он весь с методами.

А сто ты имеешь ввиду под "нарисовать на спрайте"?
Не, свет, как и все остальное должен перерисовываться.

И... ето.... ужас прям какой то. Сперва Protected, потом Private.
Издевательство над бедным кодоанализатором какоето! :)))


 
Аццкий_рыцарь:)   (2006-02-04 15:19) [88]

воть:

Procedure Tobjectdo.DoMove(MoveCount: Integer);

 begin
    inherited DoMove(MoveCount);
  if playervector<>9 then
  begin
  X:=grass.x+xobj;
 Y:=grass.y+yobj;
  end;
  collision;

end;

ну смотри, если я через surface рисую на спрайте с картинкой свет только когда create, то прога не глючит из-за альфы, потому что я рисую там один раз, только вот свет смешивается с задним фоном некрасиво. А если я в Dxtimer ставлю рисовать постоянно этот свет ТО ГЛЮКИ НЕВООБРАЗИМЫ!


 
Cash ©   (2006-02-04 16:40) [89]

Аццкий_рыцарь:)   (04.02.06 15:19) [88]:
Порядочный глюк - это вполне вообразимая вещь! Его видно четко и ясно,
иначе это не глюк, а последствие неправильной последовательности
нажатий клавиш. Одним словом надо бы описать. Глюки то есть.


 
Аццкий_рыцарь:)   (2006-02-04 17:10) [90]

Я неправильно выразился:) вернее ФПС сильно падает, а вообще-то... нафиг мне этот свет сдался? :) я вожусь с ним неделю и ничего толкового не добился :(


 
Домовенок ©   (2006-02-04 22:59) [91]

> Cash ©   (04.02.06 11:36) [83]

Не забудь прикрутить VSync в настройки своей игры :)


 
Аццкий_рыцарь:)   (2006-02-04 23:10) [92]

Кстати, маленький вопросик: как сделать, чтоб в DelphiX картинка спрайта не растягмвалась на всю ширину и длинну спрайта? у неё нет никакого свойства, типа Stretch:(


 
Аццкий_рыцарь:)   (2006-02-06 11:24) [93]

Cash, ты де? :)


 
Cash ©   (2006-02-06 15:31) [94]

Я, здесь. Просто со своими лагами пока разбираюсь.


 
Cash ©   (2006-02-06 16:00) [95]

Слушай Аццкий_рыцарь:), а у тебя C&C Generals (ZH) есть?


 
Аццкий_рыцарь:)   (2006-02-06 17:17) [96]

давненько играл :) ужо нет :((( а что?


 
XProger ©   (2006-02-06 17:27) [97]

Аццкий_рыцарь:):
http://timeforkill.mirgames.ru/img/scr/5.jpg
http://timeforkill.mirgames.ru/img/scr/6.jpg
http://timeforkill.mirgames.ru/img/scr/7.jpg
Представь себе - не глючит! :)
Переходи на тёмную сторону силы - API ;)


 
Cash ©   (2006-02-06 21:31) [98]

Аццкий_рыцарь:)   (06.02.06 17:17) [96]:
Надыбай, поставь, заведи себе HEX редактор,
а я дам почву для размышлений о форматах.
(Мой любимый редактор лежит на http://www.bpsoft.com,
скачай от туда версию 3.3, а я таблеткой обеспечу.
Вещичка мощнейшая, умеет даже очень много)

Кроме того сгодились бы Аллоды 1 и 2, а еще
моя люимица: EVE OnLine, я просто покажу как
узнавать форматы файлов и создавать их.

XProger ©   (06.02.06 17:27) [97]:
Опять ты "Тиранус" взялся за свои проделки! :)))


 
Аццкий_рыцарь:)   (2006-02-07 01:24) [99]

Там только есть 4.23 и 4.2 версии :( а что бы еще сгодилось? а то такого нет :( Lineage 2 не покатит? или дум или гта?

XProger эйта ты на чем сделал, что не глючит? АПИ?


 
XProger ©   (2006-02-07 07:33) [100]

Аццкий_рыцарь:), ну эта, как его там... OpenGL + Win API - во! :)


 
Cash ©   (2006-02-07 08:12) [101]

Аццкий_рыцарь:)   (07.02.06 01:24) [99]:
Тьфу, блин, не 3.3, а 3.11, вот от сюда: http://www.bpsoft.com/downloads/

На счет их, я их не вскрывал, так что не знаю как там дела делаются.
Вон, читаю со своих ломалок на винте:
"Солдаты анархии"
"EVE OnLine" - http://www.eve-ru.com
"Аллоды" 1/2
"C&C Generals"/"The Lord of the ring: Battle of the MiddleEarth"
"Transport Tycoon Deluxe" - http://goldgames.times.lv/ttd/download.html

Но Генералы предпочитительнее всех.


 
Аццкий_рыцарь:)   (2006-02-07 10:46) [102]

Сегодняпосле учебы зайду к одному "типу", у него генералы должны быть


 
Cash ©   (2006-02-08 18:26) [103]

Ну что, поставил? Поставь себе еще HEX редактор, а потом посмотри сюда:
http://www.projectcl.h15.ru/files/bigfiles.htm

На то, что ты все поймешь я и не надеюсь, отписал я етот док уже очень
давно, а сейчас перечитал и ничего не понял :). В любом случае погодя я
поясню некоторые вещи, которые согут быть непонятными.


 
Аццкий_рыцарь:)   (2006-02-08 20:31) [104]

блина генералов нима :( пойду искать завтра у других знакомых.

кстати, ты был прав, что я не все пойму


 
Аццкий_рыцарь:)   (2006-02-08 20:32) [105]

и еще...

Генералы разве написаны на Дельфях ?      О_о


 
Cash ©   (2006-02-09 11:21) [106]

Аццкий_рыцарь:)   (08.02.06 20:32) [105]:
Нет, но с помощью Delphi можно раздербанить ихние ресурсы! ;)


 
XProger ©   (2006-02-09 11:38) [107]

http://extractor.ru


 
Аццкий_рыцарь:)   (2006-02-24 00:30) [108]

Здарова всем :) вы меня еще не забыли? :) я скоро продолжу тему, главное не удаляйте. Просто времени нет :(((


 
XProger ©   (2006-02-24 01:37) [109]

Аццкий_рыцарь:), дык мы тут живём ;)


 
Аццкий_рыцарь:)   (2006-02-25 15:08) [110]

XProger :)


 
Cash ©   (2006-02-28 15:53) [111]

С небольшим опозданием примерно в месяц, наконец даю эту процедурку
долбанную:

Procedure SaveToStream(Stream: TStream);
var
  i,j: integer;
begin
  Stream.Write(Map.Width,4); // пишем ширину сетки карты
  Stream.Write(Map.Height,4);  // пишим высоту соответственно
  Stream.Write(DxSpriteEngine1.Engine.Count,4);  // говорим, сколько объектов на карте
// теперь пишим сетку поэлементно
  for j:=0 to Map.Height-1 do begin
    for i:=0 to Map.Width-1 do begin
      Stream.Write(Map.Chips[i,j],4);
    end;
  end;
// а после сетки записываем поэлементно все объекты с карты
  for i:=0 to DxSpriteEngine1.Engine.Count-1 do begin
    Stream.Write(TObjectDo(DxSpriteEngine1.Engine.Items[i]). xobj,4);
    Stream.Write(TObjectDo(DxSpriteEngine1.Engine.Items[i]). yobj,4);
    Stream.Write(TObjectDo(DxSpriteEngine1.Engine.Items[i]). questprogress,4);
    Stream.Write(TObjectDo(DxSpriteEngine1.Engine.Items[i]). isclickable,1);
  end;
end;


Вопрос на засыпку! Как использовать эту процедуру для сохранения карты
в файл?

Поцедура считывания такая же, за исключением замены Write на Read, и
еще, для TSream.Read нельзя использовать поля классов, при таком
раскладе наджо использовать буффер того же типа, что и поле класса.
То есть сперва TStream.Read(T,n);, а потом Variable.Value:=T;.
Вот так!

И это... не пытайся эту процедуру имплементировать в прогу, ничего из
этого не выйдет. Осмотри ее, это наглядный и живучий пример из серии:
"Как сделать ...", это должно дать наводку на написание своей
процедурки. ;)



Страницы: 1 2 3 вся ветка

Текущий архив: 2006.12.31;
Скачать: CL | DM;

Наверх




Память: 0.81 MB
Время: 0.051 c
15-1165849280
Шариков
2006-12-11 18:01
2006.12.31
Файлы типа PSR


9-1140959944
Fenix
2006-02-26 16:19
2006.12.31
Привязка камеры к актеру.


15-1165829210
RightD
2006-12-11 12:26
2006.12.31
Кто запустил программу?


2-1165731561
ZeroXor
2006-12-10 09:19
2006.12.31
Вставка Flash ролика в ячейку StringGrid


15-1165799063
ИА
2006-12-11 04:04
2006.12.31
Стандарты кодирования