Нужен тестер РПГ игры (игра большая и серьёзная :) )
| |
PassCall | Дата: Суббота, 12.11.2011, 14:13 | Сообщение # 46 |
Знающий
Группа: Проверенные
Сообщений: 89
Награды: 0
Репутация:
« 4 »
Статус: Offline
| А что тут думать =) Допустим в массиве есть 50 строк и 100 столбцов
Следовательно, в хранилище следует записать 50 строк, каждая по 100 символов. Мы собираем из множества символов одну строку: for j:=1 to WORLD_WIDTH do S:=S+integertostring (map_array[i,j]);
А затем записываем её: temp:=AddRecordStoreEntry (rs,S);
После чего возвращаемся к началу чикла, где S:=''; "очищает" строку.
В загрузке почти тоже самое.
|
|
| |
Nextik | Дата: Суббота, 12.11.2011, 14:17 | Сообщение # 47 |
Программист
Группа: Проверенные
Сообщений: 273
Награды: 0
Репутация:
« 42 »
Статус: Offline
| так, если честно, то мой 15 летний мозг, пытается отторгнуть то что ты написал. Если тебе не сложно, объясни более подробно, мне нужно поучиться у кого-то... =)
|
|
| |
PassCall | Дата: Суббота, 12.11.2011, 16:50 | Сообщение # 48 |
Знающий
Группа: Проверенные
Сообщений: 89
Награды: 0
Репутация:
« 4 »
Статус: Offline
| Ладно.
Допустим, у нас такое содержимое матрицы, размером 5х8: 10010000 01010010 10020101 20102010 20102010
где 0 - это пустота 1 - трава 2 - земля и т.д.
Нам надо в таком виде и сохранить (не одной строкой, а пятью), чтобы было удобнее.
Перед тем как сохранять в recordstore (эдакая специальная папка, индивидуальная для каждого приложения в телефоне, куда и будут сохраняться "сохраненки")
Для того, чтобы чтото записать в хранилище (это так называется сохраненка), надо сначала его создать (или октрыть).
НО! Сначала надо удалить старую сохраненку (если её нет то при вызове удаления сохраненки ничего не произойдет). Иначе при сохранении в неё данные будут не перезаписываться, а добавляться новые. Что неправильно. Code Для удаления пишем DeleteRecordStore('имя нашей сохраненки');
Теперь откроем (точнее создадим) её: rs:=OpenRecordStore('имя нашей сохраненки'); [color=gray](незабудь описать rs как recordstore в разделе var!)[/color]
Далее, нам нужно создать 5 строк. в каждой строке 8 символов (размер поля 5х8, не забыл?) Внесем в var новую переменную - S:string;
С помощью её мы "соберем" 8 символов в одну строку.
Итак, делается так
for i:=1 to 5 do//5 строк begin S:='';[color=gray]//очищаем строку, перед тем как создать новую[/color] for j:=1 to 8 do[color=gray]//в каждой строке 8 символов должно быть, не забыл? <_<[/color] S:=S+integertostring(map[i,j]);[color=gray]//Прибавляем к строке номер "почвы" (трава, пуустота, земля, и т.д.). Но прибавить к строке число нельзя, к строке можно прибавить только символ или текст. Для этого превращаем число в текст (integertostring - переводиться буквально как "число в текст")[/color] temp:=AddRecordStoreEntry(rs,S);[color=gray]//записываем в rs (наша сохраненка) строку S (полученная строка). Не забудь описать Temp:integer; в разделе var[/color] end; CloseRecordStore (rs);[color=gray]//закрываем сохраненку во избежании различных багов[/color]
Итак, содержимое сохраненки будет выглядить так: 10010000 01010010 10020101 20102010 20102010
Очень похоже на содержимое матрицы карты, не так ли?
Общий код:
Code DeleteRecordStore('имя нашей сохраненки'); rs:=OpenRecordStore('имя нашей сохраненки'); for i:=1 to 5 do begin S:=''; for j:=1 to 8 do S:=S+integertostring(map[i,j]); temp:=AddRecordStoreEntry(rs,S); end; CloseRecordStore (rs);
Сообщение отредактировал PassCall - Суббота, 12.11.2011, 16:57 |
|
| |
Nextik | Дата: Суббота, 12.11.2011, 17:27 | Сообщение # 49 |
Программист
Группа: Проверенные
Сообщений: 273
Награды: 0
Репутация:
« 42 »
Статус: Offline
| Quote (PassCall) Перед тем как сохранять в recordstore (эдакая специальная папка, индивидуальная для каждого приложения в телефоне, куда и будут сохраняться "сохраненки")
Для того, чтобы чтото записать в хранилище (это так называется сохраненка), надо сначала его создать (или октрыть). нее, ну это ты загнул для особо одаренных насчет "сохраненки", я всё таки интеллигентный человек! И знаю что такое хранилище... это фильм такой, да? Ладно, шучу . Я ещё не деградировал до состояния полного дибилизма. Всю основу в MP я знаю, мне нужна практика со строками, char(?!), ну и наподобе таких ф-ий... Ну, и теперь мне стало более яснее насчет всего этого бардака =)
|
|
| |
Nextik | Дата: Суббота, 12.11.2011, 17:31 | Сообщение # 50 |
Программист
Группа: Проверенные
Сообщений: 273
Награды: 0
Репутация:
« 42 »
Статус: Offline
| Кстати, как показали некоторые эксперименты(которые я втихоря проводил в секретной лаборатории X) , сохранение структурных данных занимает довольно много времени =/ Поэтому если сделать 100 смещений и быстро быстро(шнеля шнеля!) начать записывать, он не заметит? . Хотя если сделать сохранение например на ходу, а не полностью всё за один раз, то возможно будет хорошо...
|
|
| |
PassCall | Дата: Суббота, 12.11.2011, 18:08 | Сообщение # 51 |
Знающий
Группа: Проверенные
Сообщений: 89
Награды: 0
Репутация:
« 4 »
Статус: Offline
| Сохранение данных вплоть до 10 килобайт занимает от силы 1-2 секунды. не больше. у телефона флеш память, а не жесткий диск, поэтому запись очень быстрая
|
|
| |
Nextik | Дата: Суббота, 12.11.2011, 18:31 | Сообщение # 52 |
Программист
Группа: Проверенные
Сообщений: 273
Награды: 0
Репутация:
« 42 »
Статус: Offline
| во приколы, у меня квадратиками пишется текст О_О
|
|
| |
Nextik | Дата: Суббота, 12.11.2011, 18:35 | Сообщение # 53 |
Программист
Группа: Проверенные
Сообщений: 273
Награды: 0
Репутация:
« 42 »
Статус: Offline
| и ещё, квадратиками писать трудно =), поэтому к сути сообщения: У моих испытуемых сохранение 1500 блоков было долгим, очень долгим...
|
|
| |
Nextik | Дата: Суббота, 12.11.2011, 21:06 | Сообщение # 54 |
Программист
Группа: Проверенные
Сообщений: 273
Награды: 0
Репутация:
« 42 »
Статус: Offline
| кое что ещё, проблема, которую я не знаю как решить, ты только на мой код остальной не обращай внимания))
|
|
| |
Nextik | Дата: Суббота, 12.11.2011, 21:24 | Сообщение # 55 |
Программист
Группа: Проверенные
Сообщений: 273
Награды: 0
Репутация:
« 42 »
Статус: Offline
| о и ещё, нужно придумать такой алгоритм, который может выводить блок на экран, в зависимости от ячейки в массиве. Например, одномерный массив по оси X: for i:=1 to MAX_BLOCK{5000} do begin if setka_X[i]=1 then begin blok.posX:=(i*16)-16;//i умножаем на ширину блока и вычитаем ширину блока, потому что отсчет массива начинается с 1 blok.posY:=0; DrawImage(terrain[1],blok.posX,blok.posY); end; end; как бы мне по Y сделать...
|
|
| |
Nextik | Дата: Воскресенье, 13.11.2011, 13:24 | Сообщение # 56 |
Программист
Группа: Проверенные
Сообщений: 273
Награды: 0
Репутация:
« 42 »
Статус: Offline
| слушай, дай мне формулу по которой ты вычисляешь сколько оперативной памяти будет кушаться
|
|
| |
PassCall | Дата: Воскресенье, 13.11.2011, 13:54 | Сообщение # 57 |
Знающий
Группа: Проверенные
Сообщений: 89
Награды: 0
Репутация:
« 4 »
Статус: Offline
| "слушай, дай мне формулу по которой ты вычисляешь сколько оперативной памяти будет кушаться" а? ширина массива*высота массива*6
и вообще, я не понимаю, зачем тебе ОДНОМЕРНЫЙ массив для ДВУХМЕРНОГО пространства. Ты хардкорщик?
А вообще для проверки оставшейся памяти можно присобачить такую процедуру
Code procedure memory_test; var test_img:array [1...250] of image; begin for i:=1 to 250 do begin test_img[i]:=imagefromcanvas (0,0,120,120); setcolor (0,0,0); fillrect (0,0,100,60); setcolor (255,255,255); drawtext ('кол-во:'+integertostring(i),0,0); drawtext ('память:'+integertostring(i*120*120*4),0,30); repaint; end; end;
когда память закончиться, произойдет вылет из памяти. Надо упеть заметить последнюю цифру
Сообщение отредактировал PassCall - Воскресенье, 13.11.2011, 13:57 |
|
| |
Nextik | Дата: Воскресенье, 13.11.2011, 14:50 | Сообщение # 58 |
Программист
Группа: Проверенные
Сообщений: 273
Награды: 0
Репутация:
« 42 »
Статус: Offline
| да я хардкорщик . А про эту процедурку хочу узнать подробнее, а то по этой фразе:Quote (PassCall) когда память закончиться, произойдет вылет из памяти. Надо упеть заметить последнюю цифру я мало чего понял, какой вылет из памяти??? И нельзя ли поставить задержку чтобы успеть посмотреть последнею цифру?
|
|
| |
PassCall | Дата: Воскресенье, 13.11.2011, 14:54 | Сообщение # 59 |
Знающий
Группа: Проверенные
Сообщений: 89
Награды: 0
Репутация:
« 4 »
Статус: Offline
| Quote (Nextik) я мало чего понял, какой вылет из памяти??? И нельзя ли поставить задержку чтобы успеть посмотреть последнею цифру?
Эта процедура загружает в память целую тучу изображений, пока телефон не грохнется в обморок от нехватки памяти. Сколько он успел загрузить - столько предел для данного телефона.
|
|
| |
PassCall | Дата: Воскресенье, 13.11.2011, 14:55 | Сообщение # 60 |
Знающий
Группа: Проверенные
Сообщений: 89
Награды: 0
Репутация:
« 4 »
Статус: Offline
| А насчет задержки - я понятия не имею, сколько он успеет загрузить, следовательно, незнаю, где ставить задержку
|
|
| |
|