Главная
Регистрация
Вход
Авторизироваться
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 4 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Модератор форума: ADMIN, Nextik  
Нужен тестер РПГ игры (игра большая и серьёзная :) )
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

Очень похоже на содержимое матрицы карты, не так ли? biggrin

Общий код:

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 (эдакая специальная папка, индивидуальная для каждого приложения в телефоне, куда и будут сохраняться "сохраненки")

Для того, чтобы чтото записать в хранилище (это так называется сохраненка), надо сначала его создать (или октрыть).

нее, ну это ты загнул для особо одаренных насчет "сохраненки", я всё таки интеллигентный человек! happy И знаю что такое хранилище... это фильм такой, да? biggrin
Ладно, шучу smile . Я ещё не деградировал до состояния полного дибилизма. Всю основу в MP я знаю, мне нужна практика со строками, char(?!), ну и наподобе таких ф-ий...
Ну, и теперь мне стало более яснее насчет всего этого бардака =)
 
NextikДата: Суббота, 12.11.2011, 17:31 | Сообщение # 50
Программист
Группа: Проверенные
Сообщений: 273
Награды: 0
Репутация: « 42 »
Статус: Offline
Кстати, как показали некоторые эксперименты(которые я втихоря проводил в секретной лаборатории X) , сохранение структурных данных занимает довольно много времени =/
Поэтому если сделать 100 смещений и быстро быстро(шнеля шнеля!) начать записывать, он не заметит? smile . Хотя если сделать сохранение например на ходу, а не полностью всё за один раз, то возможно будет хорошо...
 
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
во приколы, у меня квадратиками пишется текст О_О
Прикрепления: 7923660.png (192.9 Kb)
 
NextikДата: Суббота, 12.11.2011, 18:35 | Сообщение # 53
Программист
Группа: Проверенные
Сообщений: 273
Награды: 0
Репутация: « 42 »
Статус: Offline
и ещё, квадратиками писать трудно =), поэтому к сути сообщения:
У моих испытуемых сохранение 1500 блоков было долгим, очень долгим...
 
NextikДата: Суббота, 12.11.2011, 21:06 | Сообщение # 54
Программист
Группа: Проверенные
Сообщений: 273
Награды: 0
Репутация: « 42 »
Статус: Offline
кое что ещё, проблема, которую я не знаю как решить, ты только на мой код остальной не обращай внимания))
Прикрепления: 7291260.png (175.9 Kb)
 
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
слушай, дай мне формулу по которой ты вычисляешь сколько оперативной памяти будет кушаться smile
 
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
да я хардкорщик smile . А про эту процедурку хочу узнать подробнее, а то по этой фразе:
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
А насчет задержки - я понятия не имею, сколько он успеет загрузить, следовательно, незнаю, где ставить задержку
 
  • Страница 4 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск: