Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2010, 15:06   #91
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

Насколько я знаю, integer в Delphi = longint в Паскале....Да и не в этом дело, цифры должны быть в пределах 246...И все таки почему отображаются текстуры, если их номер выше 246?
Ckomoroh вне форума Ответить с цитированием
Старый 27.02.2010, 16:56   #92
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

UMask, URoof:array[1..30,1..40] of integer ?

Integer = LongInt 32 бита, примерно от -2 147 483 648 до 2 147 483 648, причины ошибок в игре не с значений > 100000. Если банк работает по текстурам в пределах 255, то тип ему Byte просится сам. На будущее поставишь Word.

Что-то неверно загружается, если появляются такие числа. Считывание карты с файла как идет?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 27.02.2010, 17:45   #93
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

Есть типы:
Код:
type TMPint = packed record
  UMask        :array[1..30,1..40] of integer; //№ маски
  URoof        :array[1..30,1..40] of integer; //№ крыши
  UInteger     :array[1..30,1..40] of integer; //№ текстуры
  UProhodimost :array[1..30,1..40] of byte; //Проходимость
end;

type TMPbit = packed record
  mapbit:array[1..246] of Tbitmap;
end;

var
  mp:TMPBit;
  mapint:TMPint;
  buf:Tbitmap;
В процедуре загрузки уровня
Код:
procedure loadlevel();
var
  F: File of Tmpint;
  i:integer;
begin
  assignFile(F,'maps/map'+inttostr(map_nomer)+'.dat');
  Reset(F);
  read(F,mapint);
  closefile(F);
  buf:=Tbitmap.create;
  buf.width:=640;
  buf.Height:=480;
  for i:=1 to 246 do
    begin
    mp.mapbit[i]:=tbitmap.create;
    mp.mapbit[i].width:=32;
    mp.mapbit[i].height:=32;
    mp.mapbit[i].loadfromfile('pic/texture/'+inttostr(i)+'.bmp');
    end;
end;
после чего я рисую на buf.canvas из банка. Крыши рисуются нормально, текстуры рисуются нормально(хотя оказалось, что они должны ссылаться на номер текстуры >100000), а вот маски не рисует, ругается...

Карта делается в редакторе карт - там аналогично чтению, только запись.... С ним все в порядке, проверил, пишет, что все текстуры <247 и >0.
Ckomoroh вне форума Ответить с цитированием
Старый 27.02.2010, 20:18   #94
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Редактор значит свои сохраненки читает без проблем, а игра не хочет? ...ищи как говорится "два отличия".

...покажи фрагмент заполнения карты, где, например UMask[n,m] присваивается значение. В загрузке фигурирует переменная mapint как с нее берешь данные?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 27.02.2010 в 20:23.
Beermonza вне форума Ответить с цитированием
Старый 27.02.2010, 20:23   #95
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

Редактор читает все сохраненки, только без банка текстур...Игра без банка текстур тоже пахала(читала т.е. все), а с банком ошибки...

без банка было вот так:

Код:
type TMPint = packed record
  UMask        :array[1..30,1..40] of integer; //№ маски
  URoof        :array[1..30,1..40] of integer; //№ крыши
  UInteger     :array[1..30,1..40] of integer; //№ текстуры
end;

type MPbit = packed record
  Ux            :integer;  //Положение по Х
  Uy            :integer;  //Положение по Y
  UWidth        :integer;  //Ширина
  Uheight       :integer;  //Высота
  Utexture      :Tbitmap;  //Текстуры
  Umask         :Tbitmap;  //Маска
  URoof         :Tbitmap;  //Крыша
end;

var
  mapint:TMpint;
  mp:array[1..40,1..30] of TMpbit;
  buf:Tbitmap;

procedure loadlevel();
var
  F: File of Tmpint;
  n.m:integer;
begin
  assignFile(F,'maps/map'+inttostr(map_nomer)+'.dat');
  Reset(F);
  read(F,mapint);
  closefile(F);
  for n:=1 to map_height do
    for m:=1 to map_width do
      begin
      mp[m,n].Utexture:=Tbitmap.Create;
      mp[m,n].UWidth:=32;
      mp[m,n].UHeight:=32;
      mp[m,n].Umask:=tbitmap.Create;
      mp[m,n].Umask.Transparent:=true;
      mp[m,n].Umask.TransparentColor:=clblack;
      mp[m,n].URoof:=tbitmap.Create;
      mp[m,n].URoof.Transparent:=true;
      mp[m,n].URoof.TransparentColor:=clblack;
      mp[m,n].Utexture.LoadFromFile('pic/texture/'+inttostr(mapint.UInteger[n,m])+'.bmp');
      buf.Canvas.Draw(gx+m*32-32,gy+n*32-32,mp[m,n].Utexture);
      if mapint.UMask[n,m]<>0 then
        begin
        mp[m,n].Umask.LoadFromFile('pic/texture/'+inttostr(mapint.UMask[n,m])+'.bmp');
        buf.Canvas.Draw(gx+m*32-32,gy+n*32-32,mp[m,n].UMask);
        end;
      if mapint.URoof[n,m]<>0 then
        begin
        mp[m,n].URoof.LoadFromFile('pic/texture/'+inttostr(mapint.URoof[n,m])+'.bmp');
        buf.Canvas.Draw(gx+m*32-32,gy+n*32-32,mp[m,n].URoof);
       end;
      end;

Последний раз редактировалось Ckomoroh; 27.02.2010 в 20:32.
Ckomoroh вне форума Ответить с цитированием
Старый 27.02.2010, 20:59   #96
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Я бы отошел от типизированного файла, там проблемы скорей всего.

Можно же остаться на типе Byte, создать файл так:

длина ширина
блок маски
блок крыш
блок текстур
блок проходимости

...файл будет выглядеть так (условно со значением в числовом выражении, на самом деле там коды таблицы):

551000300041402211000405104100030004140221100040510410003000414022110004051041111111111111111111111111

Что остается сделать? ...выполнить код:

Код:
AssignFile(F,'maps/map1.dat');
Reset(F);

Read(F, mapW);  // взяли длину
Read(F, mapH);  // взяли ширину

// загрузка маски
For i := 1 to mapH do
  Begin
    For j := 1 to mapW do
      Begin
        Read(F, UMask[i,j]);
      end;
  end;

// загрузка крыш
For i := 1 to mapH do
  Begin
    For j := 1 to mapW do
      Begin
        Read(F, URoof[i,j]);
      end;
  end;

// загрузка текстур
For i := 1 to mapH do
  Begin
    For j := 1 to mapW do
      Begin
        Read(F, UInteger[i,j]);
      end;
  end;

// загрузка проходимости
For i := 1 to mapH do
  Begin
    For j := 1 to mapW do
      Begin
        Read(F, UProhodimost[i,j]);
      end;
  end;

Closefile(F);
...работает эффективнее, ...у меня проблем нет, кроме того, что там заголовки и сжатие. Просто есть стандартный шаблон сохранения файла, так почему бы не заложить этот шаблон и в загрузку, но посредством побайтового считывания.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 27.02.2010, 21:02   #97
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

т.е. хранить данные в незащищенном типе? Карту же может подредактировать любой клиент....
Ckomoroh вне форума Ответить с цитированием
Старый 27.02.2010, 21:07   #98
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Не может, она не поддается редактированию в блокноте, только редактором, ...я же пояснил, что там фактически не цифры а символы кодовой страницы, ...иероглифы короче. Кроме того вы создаете свои правила считывания и последовательность блоков, вводите ключи, по которым ориентируется загрузчик, ...это совсем просто, но догадаться без исходников как работает не возможно.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 27.02.2010, 21:11   #99
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

А как тогда если у меня 2-у значные и 3-ех значные числа? Ставить пробел? или на каждую клетку отделять 3 символа(7 = 007)?
Ckomoroh вне форума Ответить с цитированием
Старый 27.02.2010, 21:17   #100
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Один байт такого файла - символ кодовой страницы, код которого принимает значение от 0 до 255. Ты считываешь байт, берешь его код, через Ord(), записываешь как индекс для банка текстур. При сохранении делаешь обратную процедуру, через Chr().
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание 2d RPG игры VTR Gamedev - cоздание игр: Unity, OpenGL, DirectX 29 19.05.2009 16:34
RPG на Дельфи Juffin Gamedev - cоздание игр: Unity, OpenGL, DirectX 10 10.04.2009 21:37
Создание текстового RPG KORN Софт 3 15.07.2008 09:21
3D-RPG Кронос Gamedev - cоздание игр: Unity, OpenGL, DirectX 25 12.05.2007 11:21