Kursist
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору InSe0F Я знаю. Да, иногда сталкиваюсь с "ламерскими" ситуациями. А книги Архангельского (несколько) у меня всегда под рукой - поэтому сначала книги листаю, перед тем как спрашивать на форуме. V1s1ter Спасибо. Опишу цель. Пишу игру. Есть персонажи, которые двигуются по определенному маршруту. Маршрут задается заранее (то есть, статически). Персонажи двигаются в 4 направлениях, у каждого свой маршрут, поэтому: Path01:array [0..9] of Byte = (2,2,3,2,2,2,3,3,4,4); Path02:array [0..11] of Byte = (1,2,4,2,0,2,3,1,1,4,2,2); Проблему решил, использовав TList (храню в нем ссылки на статические массивы). Выкладываю рабочий код. Необходимо было получить унифицированный (через одну и ту же процедуру) доступ к разным путям (то есть, в каждой сцене свое колличество персонажей, а значит, количество маршрутов. Но сами маршруты уже известны заранее. Использовал TList: globPathList.Add(@Path01); globPathList.Add(@Path02); globPathList.Add(@Path03); Получение направления (для каждого персонажа): for loop := 0 to globHeroList.Count - 1 do begin pID:=THero(globHeroList.Items[loop]).Info.PathID; pStep:=THero(globHeroList.Items[loop]).Info.PathStep; if THero(globHeroList.Items[loop]).Info.PathStep> High(PByteArray(globpathList.Items[pID])^) then THero(globHeroList.Items[loop]).Info.PathStep:=0; Direction:=PByteArray(globpathList.Items[pID])^[pStep]; ... На данный момент сижу над решением другой проблемы - поиск ошибки: Нужно обнулять PathStep, когда Персонаж доходит до конца маршрута, для этого нужно получить длину массива, на который ссылается globpathList. Первоначальная реализация была такой: Path:array [0..2,0..7] of Byte =((3,4,4,4,2,2,2,1),(3,2,2,0,4,4,1,0),(1,1,1,2,4,3,3,3)); А получение направления: pID:=THero(globHeroList.Items[loop]).Info.PathID; pStep:=THero(globHeroList.Items[loop]).Info.PathStep; Direction:=Path[pID,pStep]; Это хорошо работает для 1 сцены, а если их много, это можно обойти сделав: Path:array [0..n,0..m] - где в каждой новой сцене n - номер пути у персонажей будет все возрастать, но есть проблема в такой реализации - одинаковый размер (длина маршрута) для каждого персонажа, а нужен разный размер. Подскажите, пожалуйста, где у меня ошибка в этом выражении: High(PByteArray(globpathList.Items[pID])^) т.е. как правильно получить высоту массива, на который ссылается указательс, сохраненный в TList? Спасибо. | Всего записей: 137 | Зарегистр. 12-07-2004 | Отправлено: 14:47 11-05-2009 | Исправлено: Kursist, 15:08 11-05-2009 |
|