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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Внимание! Есть замечания модератора по теме: переименована по желанию автора
Старый 16.01.2011, 21:14   #1
Enlightened
Пользователь
 
Регистрация: 15.08.2010
Сообщений: 24
По умолчанию

Помогите написать функцию проверки столкновения игрока с координатами
Player.TPcX, Player.TPcY
с непроходимой клеткой(-ами) массива.
Все объекты имеют размерность 20*20px, массив [0..23,0..23,1] (на 1 не обращайте внимание - это "слой" карты.) Ходить нельзя, если параметр TGMove=0 в записи ячейки
Написал такой код:
Код:
Function Collision: byte;
Begin
 Result:=0;
     //проверка левого верхнего угла:
 If (MapMas[round(player.TPcX+(player.TPsX/2)-10)div 20, round(player.TPcY)div 20, 1].TGMove=0) then
    result:=1;
 If (MapMas[round(player.TPcX+(player.TPsX/2)-10)div 20, round(player.TPcY+20)div 20, 1].TGMove=0) then
    result:=1;

 If (MapMas[round(player.TPcX+(player.TPsX/2)+30)div 20, round(player.TPcY+10)div 20, 1].TGMove=0) then
    result:=1;
 If (MapMas[round(player.TPcX+(player.TPsX/2)-10)div 20, round(player.TPcY+10)div 20, 1].TGMove=0) then
    result:=1;

 If (MapMas[round(player.TPcX+(player.TPsX/2)+30)div 20, round(player.TPcY+20)div 20, 1].TGMove=0) then
    result:=1;
 If (MapMas[round(player.TPcX+(player.TPsX/2)+30)div 20, round(player.TPcY)div 20, 1].TGMove=0) then
    result:=1;

 If (MapMas[round(player.TPcX)div 20, round(player.TPcY+(player.TPsY/2)-10)div 20, 1].TGMove=0) then
    result:=2;
 If (MapMas[round(player.TPcX+20)div 20, round(player.TPcY+(player.TPsY/2)-10)div 20, 1].TGMove=0) then
    result:=2;

 If (MapMas[round(player.TPcX+10)div 20, round(player.TPcY+(player.TPsY/2)+30)div 20, 1].TGMove=0) then
    result:=2;
 If (MapMas[round(player.TPcX+10)div 20, round(player.TPcY+(player.TPsY/2)-10)div 20, 1].TGMove=0) then
    result:=2;

 If (MapMas[round(player.TPcX+20)div 20, round(player.TPcY+(player.TPsY/2)+30)div 20, 1].TGMove=0) then
    result:=2;
 If (MapMas[round(player.TPcX)div 20, round(player.TPcY+(player.TPsY/2)+30)div 20, 1].TGMove=0) then
    result:=2;
    //1 - если боком шмякнулся, 2 - головой/пятками
end;
В принципе, она работает для ровной стены непроходимых клеток, но если нужно обработать столкновения с одной клеткой - начинаются глюки: персонажа дергает, он может пройти на таран и т.д.
Если понадобятся, вот исходники:
P.S. не занимались графикой и контентом - застряли именно на этой функции

P.P.S. Забыл добавить. Текущий код анализирует (пытается ) 8 точек около игрока: 4 угла и середины сторон

P.P.P.S. Была еще идея обрабатывать 4 угла и буквально соседние пиксели на прилежащих сторонах. Но не уверен, что сработает, да и профессионалы лучше знают, может, есть лучшие алгоритмы проверок.
Вложения
Тип файла: rar Survival Advanture.rar (242.0 Кб, 29 просмотров)

Последний раз редактировалось Stilet; 05.02.2011 в 15:41.
Enlightened вне форума Ответить с цитированием
Старый 18.01.2011, 15:50   #2
Enlightened
Пользователь
 
Регистрация: 15.08.2010
Сообщений: 24
По умолчанию

Beermonza, нужна ваша помощь!
Я нашел на форуме в теме
http://www.programmersforum.ru/showt...E2%E5%ED%E8%FF
ваш алгоритм проверки на столкновения и решил его использовать (помощи не дождался ).
Я сделал новую запись
Код:
Type
  TNmz = object   //non-moving zone :)
    nmzX: integer;
    nmzY: integer;
    nmzI: byte;
    nmzJ: byte;
end;
и заполнил ей массив. Теперь при считывании игровой карты если в считываемой клетке показатель TGMove=0 я вызываю данную процедуру:
Код:
Procedure WrInNMZ(w: integer; e:integer);
 begin
   NMZMas[q].nmzI:=w; //присвоили 1 координату массива
   NMZMas[q].nmzJ:=e; //2ая координата
   NMZMas[q].nmzX:=NMZMas[q].nmzI*20; {Координаты X и Y, соответственно}
   NMZMas[q].nmzY:=NMZMas[q].nmzJ*20;
   inc(q);
 end;
..в таймере вызываю обработку столкновений для всех объектов, записанных в массиве NMZMas:
Код:
Function Collision: byte;
 Var sch:integer;
Begin
Result:=0;
 For sch:=1 to q do
  begin
   If (((NMZMas[sch].nmzX < player.TPcX) And (NMZMas[sch].nmzX + 20 >= player.TPcX))
       Or ((NMZMas[sch].nmzX > player.TPcX) And (NMZMas[sch].nmzX <= player.TPcX + 20)))
       then Result:=1; //боком
   If (((NMZMas[sch].nmzY < player.TPcY) And (NMZMas[sch].nmzY + 20 >= player.TPcY))
       Or ((NMZMas[sch].nmzY > player.TPcY) And (NMZMas[sch].nmzY <= player.TPcY + 20)))
       then Result:=2; //головой/пятками
  end;
end;
И, соответственно, проверяю выходные данные:
Код:
If Collision=1 then player.TPsX:=-player.TPsX;  //боком
If Collision=2 then player.TPsY:=-player.TPsY;  //головой
Ну, дальше вы знаете - если бы все работало, как часы, я бы не писал вам. Помогите новичку, пожалуйста!
Вложения
Тип файла: rar 1.rar (242.2 Кб, 17 просмотров)

Последний раз редактировалось Enlightened; 18.01.2011 в 15:58. Причина: добавил исходники
Enlightened вне форума Ответить с цитированием
Старый 19.01.2011, 10:28   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

А зачем вызывать в таймере? Может, лучше это делать при движении объекта?
_-Re@l-_ вне форума Ответить с цитированием
Старый 19.01.2011, 12:43   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

А рабочий пример нужен ? я так повникал-повникал в твоё дело, но что-то уж совсем топором рублено... до конца не понял, уловил только что ты при переходе с первого на второй вариант создал массив вспомогательный (массив нонмувинзонов) и на "коллизию" с ним в цикле проверяешь координаты игрока.

Ошибка твоя может быть в том, что процедура коллизии проверяет твои значения вспомогательные, которые я недокурил толком, так, что перезатирает значение установленное на предыдущих итерациях (см. result в proc collision, у тебя ведь нет прерывания цикла, значит, если найдётся коллизий штук 10, то функция выдаст только последнюю)

Ещё.
Я бы на твоем месте , кстати, ещё вот так точно не делал бы :
If Collision=1 then player.TPsX:=-player.TPsX; //боком
If Collision=2 then player.TPsY:=-player.TPsY; //головой

ты ведь не арканоид пишешь...а сделал бы вот так :
If Collision=1 then player.TPsX:=0; //боком
If Collision=2 then player.TPsY:=0; //головой

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

п.с.2. молодец , что обратил внимание на индексацию двумерных массивов "сперва строка, потом столбец" а то, видать, у тебя до этого не появлялось каши только из-за квадратности всего и вся - и поля и клеток. Надо изначально решить в таких проектах унификацию храниния данных - чтобы путаницы не возникало (для себя я навсегда решил, что любые вещи индескируются "сперва строка")

Последний раз редактировалось phomm; 19.01.2011 в 12:51.
phomm вне форума Ответить с цитированием
Старый 19.01.2011, 15:13   #5
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

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

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

Посмотри во что превратилась твоя проблема с проходимостью (оно же будет и на столкновение с объектами).
Вложения
Тип файла: zip Collis.zip (92.4 Кб, 41 просмотров)
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Stilet; 05.02.2011 в 15:42.
Beermonza вне форума Ответить с цитированием
Старый 23.01.2011, 20:50   #6
Enlightened
Пользователь
 
Регистрация: 15.08.2010
Сообщений: 24
Вопрос

phomm, спасибо за советы. А скорость я отражал потому что боялся, что персонаж застрянет в дереве, например .
Beermonza, благодарю, буду еще учиться - у вас получился код намного компактнее, быстрее, его легче читать.
Сам несколько дней отсутствовал: был на областной олимпиаде по информатике же .
В ближайшие дни продолжу работу над проектом. И уже, опять-таки, возникли новые вопросы:

1. Игрок нажимает на кнопку вызова инвентаря. Если нужно, чтобы весь остальной мир стоял на паузе, что мне необходимо? Прекратить прорисовку и обработку ИИ? И поверх рисовать окно инвентаря (или меню)?

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

3. Генератор карт. Вообще, чудесная штуковина, только вот интересно послушать хотя бы в общих чертах, как оно работает. Пока представляется мне это так:
Этап 1. В сплошной воде выделяется случайным образом 1 или несколько клеток. Вокруг них постепенно наращивается земля, random следит, чтобы края были неровны и т.д. Сразу покрывается первичной текстурой.
Этап 2. На получившееся накладывается деревья, кусты и прочая флора; камни, скалы.. Цветы, грибы и прочие красивости, если есть, сюда же.
Этап 3. В нескольких местах появляются мобы, случайным образом выбирается точка возрождения игрока.
Хм.. Так?)

4. ИИ. Для мирных овечек, думаю сделать 2 режима - стоит и перемещается. Незатейливо, конечно, но больше и не надо. Например: все тем же рандомом выбираем 1 из 4 направлений, на 1-2 клетки отходим. Секунд 4-5 стоим. Повторяем вышеописанное. Для хищников условие срабатывания триггера агрессии - если игрок относительно собственной координаты приблизился на расстояние, меньшее R, бежим к нему атаковать.

Вот, собственно, и все вопросы. Спасибо за терпение каждому, кто дочитал этот пост до конца . Для любого вопроса моя просьба - посмотрите, правильно ли я понял логику, может, это можно каким-нибудь способом упростить.
Enlightened вне форума Ответить с цитированием
Старый 24.01.2011, 00:36   #7
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Если тема будет развиваться как проект, который ты с нуля пишешь, то название темы нужно сменить, придумай его, я поменяю, ...что-то из разряда: "Игра {название игры} (РПГ), создаю с нуля, нужны советы."

Цитата:
Сообщение от Enlightened
1. Игрок нажимает на кнопку вызова инвентаря. Если нужно, чтобы весь остальной мир стоял на паузе, что мне необходимо? Прекратить прорисовку и обработку ИИ? И поверх рисовать окно инвентаря (или меню)?
Создай переменную типа Boolean, загони в условие все операции не связанные с выводом графики. В момент "паузы" переменная меняется на True, условие(я) отсекает(ют) все коды на смещение и пропускают секции обработки ИИ, остается только вывод неподвижной сцены игры. После снятия "паузы", переменная возвращается в False, весь код опять работает полностью.

Цитата:
Сообщение от Enlightened
2. Я подумал, что будет лучше, если каждому объекту не привязывать кучу свойств, а основывать на взаимодействии с игроком. Сразу поясню: допустим, есть объект "дерево" или "камень". Я не буду писать в запись этой клетки флаги о том, разрушено оно или нет, какие ресурсы в нем (тем более, что у разных объектов они разные) и т.д. Суть реализации такова: есть игрок, у него в руках кирка/лопата/молоток, сравниваем инструмент с объектом той клетки, которую я собираюсь возделывать. Если в руках лопата, а игрок хочет добывать ею воду, то выведем сообщение, что бесперспективно занятие сие. Если в руках топор и долбим дерево - все хорошо, даем игроку ресурсы, дерево рисуем как поверженное в неравном бою.
Думаю, так будет экономичнее. Я правильно думаю?
У тебя должен быть тип "предмет". Он содержит в себе примерно такие записи:

Тип предмета Byte (1 - кирка, 2 - лопата, 3 - ведро, 4 - серп, 5 - молоток и т.д.);
В слоте Boolean (True - в слоте, False - в рюкзаке);
Уровень предмета Byte (сколько минимум может дать ресурса);
Цена Word (сумма)

...и еще масса параметров, которые вполне описывают любой предмет. Создается массив этого типа, и каждая ячейка - конкретный предмет игрока. Если в слоте какой-то предмет, смотрим его тип, если он совпадает с типом, подписанном к ресурсу, которым его можно добыть, то выполняем алгоритм добывания, в противном случае - игнорируем действие, выводим надписи, звуки, ...как угодно.

Цитата:
Сообщение от Enlightened
3. Генератор карт. Вообще, чудесная штуковина, только вот интересно послушать хотя бы в общих чертах, как оно работает. Пока представляется мне это так:
Этап 1. В сплошной воде выделяется случайным образом 1 или несколько клеток. Вокруг них постепенно наращивается земля, random следит, чтобы края были неровны и т.д. Сразу покрывается первичной текстурой.
Этап 2. На получившееся накладывается деревья, кусты и прочая флора; камни, скалы.. Цветы, грибы и прочие красивости, если есть, сюда же.
Этап 3. В нескольких местах появляются мобы, случайным образом выбирается точка возрождения игрока.
Хм.. Так?)
Игру "Сапер" знаешь? ...смотри ее принцип. Каждая клетка земли окружается текстурой перехода, причем зависит от направления 1-8, код переходных текстур желательно задать сразу суммой, так легче для алгоритма.

Цитата:
Сообщение от Enlightened
4. ИИ. Для мирных овечек, думаю сделать 2 режима - стоит и перемещается. Незатейливо, конечно, но больше и не надо. Например: все тем же рандомом выбираем 1 из 4 направлений, на 1-2 клетки отходим. Секунд 4-5 стоим. Повторяем вышеописанное. Для хищников условие срабатывания триггера агрессии - если игрок относительно собственной координаты приблизился на расстояние, меньшее R, бежим к нему атаковать.
Все описано, ...добавить вроде нечего в таком общем виде.

Если хочешь помощи, то по порядку, иначе будет каша в теме. Делай что-то одно из списка и спрашивай по ходу, если непонятно что-то.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 05.02.2011, 10:28   #8
Enlightened
Пользователь
 
Регистрация: 15.08.2010
Сообщений: 24
По умолчанию

Снова проблемы
Дело в том, что редактор карт должен либо в процессе рисования, либо по нажатию определенной кнопки сглаживать углы и стороны определенными типами тайлов (см. папку gfx). То есть либо сразу рисуем хорошие, скругленные острова, либо рисуем угловатые прямоугольники, щелчок - и все сглаживается.
Пробовали сделать и так, и так. В итоге ничего дельного не получилось - программа неправильно определяла, где что надо ставить, да еще и не во всех местах, да еще случаев там куча - мало ли, как юзер поставит эти самые тайлы.
Прикрепляю очень сырую версию, все ужасные процедуры сглаживания либо взяты в комментарии, либо удалены. Надеюсь на вашу помощь.
Вложения
Тип файла: rar MapEditor.rar (288.9 Кб, 20 просмотров)
Enlightened вне форума Ответить с цитированием
Старый 05.02.2011, 19:52   #9
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

тяжело... честно... посмотрел исходник... думал... (здесь и далее "..." это нечто вроде недоумения, никак не критика, желаю наоборот побыстрее решить все проблемы, буду помогать)

1 зачем таймер
2
Код:
procedure TForm1.Timer1Timer(Sender: TObject); 
 Var i,j,e,r:byte;
begin

 For j:=0 to 23 do
 For i:=0 to 23 do
  begin
    Cadr.LoadFromFile('gfx\layer1\'+Currmap[i,j].name+'.bmp');
    Buf.Canvas.Draw(i*20,j*20,Cadr);
  end;
очень неправильно, сделай предзагрузку всех изображений в какой-нибудь массив из TBitMap и заполняй его в FormCreate (ну или придумай что-то аналогичное, но каждые 20 мс(так таймер стоит) читать 24*24=576 файлов )
3 где buf и cadr освобождаются ? не нашёл... (наводка: объект.free и freeandnil(объект))
4
Код:
MessageDLG('Сначала выбери, чем работать, тупой баран!', MtError, mbOKCancel, 0);
некрасиво и с программной и с этической точки зрения. Сделай одну из кнопок сразу нажатой (TSpeedButton.Down := True ; )
5 я не знаю, может индексация строками удобно... но может лучше взять собственный пересчислимый тип ?
6 во многих местах вижу повторяющиеся цифры... тебе самому будет удобнее, если использовать константы
7 было бы очень кстати, если движение мышки при зажатой кнопке тоже производило рисовку, зачем лишние мышеклики...

По поводу конкретно твоей задачи. Я посоветую, как сделать универсально, не сам код, правда, ибо его у меня нет. Могу попробовать написать этот код, у меня есть проект редактора карт http://phomm.narod.ru/programs/h3mtered.htm (он с исходниками, советую глянуть, правда комментирован меньше, чем хотелось бы, при чём, на английском), и написанный код мог бы и я сам использовать в этом редакторе (можем заняться, тогда правда надо бы личный контакт, пиши в личку).

Итак, сама идея : Пишется конфигурационный файл (конкретная реализация в твоем проекте - дело твой, это может быть константный массив, ресурс в экзе, просто типизированный файл, или даже xml-подобная структура). В нём указываются такие параметры :
Код:
тип почвы1 : begin
подтип почвы1 : begin
направление1–типы_стыкуемых_почв
направление2–типы_стыкуемых_почв
...
end
подтип почвы2 : begin
направление1–типы_стыкуемых_почв
направление2–типы_стыкуемых_почв
...
end
end

тип почвы2 : begin
подтип почвы1 : begin
направление1–типы_стыкуемых_почв
направление2–типы_стыкуемых_почв
...
end
подтип почвы2 : begin
направление1–типы_стыкуемых_почв
направление2–типы_стыкуемых_почв
...
end
end
...
Как это работает ? довольно просто. Выбирая почву для рисования и щелкая по клетке, процедура смотрит в конфиг, в секцию для выбранного типа почвы, и в цикле для всех направлений проверяет соседей (параметр типы_стыкуемых_почв) во всех секциях подтипов почв, если совпадают, то данный подтип выставляется клетке.

Минусы данного подхода – достаточно простые комбинации, и скорее всего только для сочетания 2 почв, и для упрощения задачи вводится промежуточная почва между всеми сочетаниями. Второй минус – возможная неопределенность при совпадениях в сочетаниях, либо, наоборот, при отсутствии подходящих.

Второй способ, уже не мой, я только выложил у себя www.phomm.narod.ru/d.zip там в архиве уроки по дельфи, тебе нужен тот, что лежит в папке MapDelphi, сам код я не разбирал, только урок читал этот.

Удачи и успехов!

Последний раз редактировалось phomm; 05.02.2011 в 20:02.
phomm вне форума Ответить с цитированием
Старый 09.06.2011, 09:00   #10
Enlightened
Пользователь
 
Регистрация: 15.08.2010
Сообщений: 24
По умолчанию

Извиняюсь за длительную задержку, теперь снова взялись за проект.

Цитата:
Enlightened, вот смотри исходник.
Beermonza, посмотрел.
Похоже, что вы ошиблись. Столкновения работают, это да.

Все дело с банком текстур. Сначала я просто обратил внимание на то, что уголков нет, хотя должны были быть, ибо в папке с графикой такие тайлы имеются, в самом уровне они обозначены (как s1,s3,s7,s9 соответственно).
Тайлы боковых сторон считываются нормально.

Элементарная проверка: я самый первый верхний левый угловой тайл заменил на угол. Результаты были впечатляющие - сразу во многих местах оказались не те тайлы.

Сначала мы попробовали обойти метки, заменив их на более разумные boolean'овские переменные. То есть:

Var .... , b:boolean;

Код:
b:=true;
  // Считать, пока не найдется незанятая ячейка
          While (TexMas[map_t].TBUses = True) and b do
            Begin
              // Если в банке уже есть такая текстура
              If TexMas[map_t].TBName = texname then
                Begin
                  // Отправить в массив карты индекс
                  MapMas[map_i, map_j].GMIndex := map_t;
                  // Отправить проходимость текстуры в карту
                  MapMas[map_i, map_j].GMMove := TexMas[map_t].TBMove;

                  // Вместо выпрыгивания сменяем b на ложь:
                  B:=false;

                end;
              Inc(map_t);    // счетчик
            end;

          // ^^ While не нашел текстуру и вернул первую свободную ячейку в банке

          Try
            // Загружаем текстуру в банк
            TexMas[map_t].TBTex := TBitmap.Create;
            TexMas[map_t].TBTex.LoadFromFile('gfx\layer1\'+texname+'.bmp');

            // Запишем имя текстуры
            TexMas[map_t].TBName := texname;

            // Определяем проходимость
            If texname = 'gg' then TexMas[map_t].TBMove := 1;
            If texname = 'si' then TexMas[map_t].TBMove := 1;

            // Отправить проходимость текстуры в карту
            MapMas[map_i, map_j].GMMove := TexMas[map_t].TBMove;

            // Пометить использование текстуры
            TexMas[map_t].TBUses := True;
          Except
            WriteLn(Logfile, 'Ошибка загрузки текстуры: '+texname+'.bmp');
            WriteLn(Logfile, 'Клетка карты: ('+IntToStr(map_i)+','+IntToStr(map_j));
          end;

// сюда прыгаем, если текстуры найдены
   (*Метка стерта*)

        end;
    end;
Не помогло.
Было бы чудесно, если бы вы, Beermonza, посмотрели бы, свой код ведь легче читать.
Посмотрите, что с банком текстур!

Если кто из форумчан разъяснит мне проблему - буду только рад помощи.

P.S. Исходники см. в посте #5
Enlightened вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти первый отрицательный элемент массива имеющий чётный номер (Delphi) Vanger Помощь студентам 5 25.01.2011 11:41
Где найти исходники на Java( 1 проект - больше 1000 классов, 2 проект - больше 100, 3 проект - больше 10) Pti44ka Общие вопросы по Java, Java SE, Kotlin 2 09.09.2010 21:31
Проект в Delphi TaYgA Помощь студентам 4 28.10.2009 21:32
Курсовой проект по Delphi 7 Agent[PNZ] Помощь студентам 9 14.11.2008 13:25
проект на delphi(ум.матриц) Алиба Помощь студентам 5 23.10.2007 14:02