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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2010, 20:33   #121
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
Разложить код по полочкам руки не доходят, да и не за чем это пока кода мало.
Советую сделать это пока не поздно. Иначе потом придется почти заново все переписывать. Лучше по максимуму смотреть в будущее и готовиться к расширению кода в тот момент, когда это не влечет значительных расходов. Модульность, модульность и еще раз модульность! Сваливать все в одну кучу - смерти подобно.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 23.04.2010, 17:07   #122
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Цитата:
Сообщение от Вадим Буренков Посмотреть сообщение
Сделай отдельную демку с переходом где видна проблема и выложи сюда ее код.
Сделал демку, а там все как на зло () работает. Не могу найти свою ошибку.
Сегодня начал заниматься разгребанием кода по модулям, все перекапываю, возможно найду ошибку, когда буду создавать модуль отрисовки. Как может быть связана текстура со спрайтом - ума не приложу.
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 23.04.2010, 19:29   #123
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
Сделал демку, а там все как на зло () работает. Не могу найти свою ошибку.
А я ведь говорил .
Вадим Буренков вне форума Ответить с цитированием
Старый 29.04.2010, 08:04   #124
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Есть запись TLevel с указателем PLevel, также есть переменная level:PLevel. Создаю уровень (new(level)), работаю с ним, затем удаляю (dispose(level)). После второго создания значения параметров level'а остаются прежними. - так должно быть? То есть после повторного создания уровня значение level.statics уже не равняется нулю, а остаётся как в первом уровне. Приходится обнулять
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 30.04.2010, 13:37   #125
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
второго создания значения параметров level'а остаются прежними.
Вообще они могут на мусор в памяти ссылаться, но я точно не помню. Посмотри как в chipmunk делается.
Есть еще функция ZeroMemory, которая заполняет указанный фрагмент памяти нулями.
Вадим Буренков вне форума Ответить с цитированием
Старый 30.04.2010, 16:13   #126
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

ZeroMemory - довольно опасная штука, если длина неверно вычислена, можно налететь на исключение или убить нужный участок памяти.
Я применяю GetMem и FreeMem.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 02.05.2010, 18:05   #127
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

В ChipMunk тоже dispose. Я лучше вручную обнулю.
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 03.05.2010, 18:16   #128
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

При использовании GetMem и FreeMem получается та же картина, то есть даже после вызова FreeMem переменная оставляет своё значение. Почему так происходит, ведь память очищается?
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Старый 03.05.2010, 20:38   #129
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Она не должна оставлять свое значение, возможно ты что то делаешь не правильно. Специально написал демку показывающую работу с памятью:
Есть тип данных
Код:
type
PData=^TData;
TData=record
number:integer;
number2:integer; 
end;
Он в памяти и содержит два числа. На форме 3 кнопки, первая инициализирует данные, вторая удаляет а третья выводит данные на лейблы.

Код:
function Data_Create(n:integer):PData;
var
d:PData;     //хранит указатель на данные во время создания
begin
new(d);      //выделение памяти
d.number:=n; //установка данных
result:=d;   //возврат указателя
end;

procedure Data_Free(var d:PData); //обрати внимание что передается var переменная
begin
dispose(d);  //очищение памяти
d:=nil;      //обнуление указателя
end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if TestData<>nil then begin showmessage('Данные уже созданы.'); exit; end;//проверка попытки пересоздания
TestData:=Data_Create(999);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if TestData=nil then begin showmessage('Данные уже удалены.'); exit; end;//проверка попытки удаления уже удаленного
Data_Free(TestData);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
TestData:=Data_Create(999);
TestData.number2:=12345;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if TestData=nil then begin showmessage('Данные удалены.'); exit; end;//проверка чтения данных с несуществующей переменной
Form1.Label1.Caption:='number='+inttostr(TestData.number);
Form1.Label2.Caption:='number2='+inttostr(TestData.number2);
end;
В типе переменная number устанавливается при каждом инициализировании, а number2 только при старте программы. Если несколько раз пересохдать переменную типа то можно увидеть что при пересоздани данных number2 каждый раз имеет новое значение (не обязательно, у меня поочередно показывались 2-3 значения). Это говорит о том что при выделении области памяти изначально эта область ссылается на мусор и все переменные надо устанавливать вручную (как это делается с number) или обнулять.
Вложения
Тип файла: rar MemoryUsage.rar (170.2 Кб, 10 просмотров)
Вадим Буренков вне форума Ответить с цитированием
Старый 04.05.2010, 05:43   #130
Андрей 93
Люблю жизнь
Форумчанин
 
Аватар для Андрей 93
 
Регистрация: 01.12.2009
Сообщений: 193
По умолчанию

Вчера тоже демку создал
Код:
d:=nil;
но так я не делал.
Не стыдно не уметь, стыдно не учиться.
Андрей 93 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Физика в 2D играх Вадим Буренков Gamedev - cоздание игр: Unity, OpenGL, DirectX 32 02.11.2010 22:00
Искуственый интелект в играх VintProg Gamedev - cоздание игр: Unity, OpenGL, DirectX 26 01.08.2009 23:09
Сюжет в 2D играх ZotaC Свободное общение 8 05.07.2009 15:42
Физика программы. Манжосов Денис :) Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 09.05.2008 18:14
Анимация в играх frai Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 25.11.2007 14:28