Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];

Вниз

Редактор карт в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.8 MB
Время: 0.052 c
11-1141892974
Andr-04
2006-03-09 11:29
2006.12.31
Цвет текста RichEdit через Font


2-1165751400
dasha
2006-12-10 14:50
2006.12.31
как добавить запись в таблицу


2-1165909132
term1t
2006-12-12 10:38
2006.12.31
Сново Access Violation...


15-1165903029
ан
2006-12-12 08:57
2006.12.31
Умер Аугусто Пиночет...


15-1165390566
MsGuns
2006-12-06 10:36
2006.12.31
Господа офицеры !





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский