Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помощь программистам
GAMEINATOR forums > > Архив
Neo][
В этой теме можете задавать вопросы по программированию.
OlegatoR
Извиняюсь что не предупредил.
Я реализовал это немного по-другому:
Имеется переменная типа TSettings по имение Settings (с несколькими категорияами) параметры в которую загружаются из INI файла: например:
Settings.Video._i_res_width := _if_SettingsFile.ReadInteger('Video','ResWidth','800');

Settings.Audio._i_VolumeLevel := _if_SettingsFile.ReadInteger('Audio','VolumeLevel','50');

Не знаю подойдет ли этот метод и правильный ли вообще ход мыслей...
Выложу в ближайшее время потому как дома ремонт и сами понимаете
З.Ы. Модуль реализовал еще 11 числа

Was added in 9 minutes 38 seconds:

Цитата
Должна присутствовать функция, которая возращает список(класс TList) всех настроек.

Не вижу смысла в ТЛист? Когда нужно, будем читaть прямо из переменной Settings
Neo][
Цитата
Имеется переменная типа TSettings по имение Settings (с несколькими категорияами) параметры в которую загружаются из INI файла: например:
Settings.Video._i_res_width := _if_SettingsFile.ReadInteger('Video','ResWidth','800');

Settings.Audio._i_VolumeLevel := _if_SettingsFile.ReadInteger('Audio','VolumeLevel','50');


Так будем по тихой разбираться. Settins это у тебя экземпляр класса TSettings. Это я вроде понял, вот эту строчку:

Settings.Video._i_res_width := _if_SettingsFile.ReadInteger('Video','ResWidth','800');

Я чёто не понимаю. Зачем у тебя здесь идёт присваивание? Это строчка из реализации класса(что наврятли) или уже работа с ним? Если второе, то нам не надо извне присваивать значения, нам надо, чтобы всё это происходило внутри класса. Чтоб работа с ним выглядела примерно так:
Settings:=TSettings.Create(_s_FileName:String)
_wd_X:=Settings.Vid_Mode_Horizontal;

Цитата
Не знаю подойдет ли этот метод и правильный ли вообще ход мыслей...
Выложу в ближайшее время потому как дома ремонт и сами понимаете

OlegatoR, я рад, что ты используешь все советы, по организации кода.
Но поля в классе желательно именовать простым инглишом, т.е. как я уже и писал: vid_resolution_horizontal.
Это нам пригодится при написании консоли, ты же не хочешь во время отладки вписывать в консоль _i_res_width. Да и скорее вссего твой метод реализации не пойдёт.
Цитата
QUOTE
Должна присутствовать функция, которая возращает список(класс TList) всех настроек.

Не вижу смысла в ТЛист? Когда нужно, будем читaть прямо из переменной Settings

Опять же нужно думать о будующем: пригодится при написании консоли. И вообще внутри класса будет работать легче, по крайней мере я так думаю.

Выложи очень интересно посмотреть на твою реализацию. А вообще я бы плясал от класса TCustomIni.
OlegatoR
Цитата
Но поля в классе желательно именовать простым инглишом,

Исправил (надеюсь не пропадет sad.gif )
Цитата
Я чёто не понимаю. Зачем у тебя здесь идёт присваивание? Это строчка из реализации класса(что наврятли) или уже работа с ним? Если второе, то нам не надо извне присваивать значения, нам надо, чтобы всё это происходило внутри класса. Чтоб работа с ним выглядела примерно так:
Settings:=TSettings.Create(_s_FileName:String)
_wd_X:=Settings.Vid_Mode_Horizontal;

Я вот этого и не понял. У меня из ИНИ файла загружаються параметры из соотств. ключей. А как же внутри класса из загружать?
Neo][
Цитата
QUOTE
Но поля в классе желательно именовать простым инглишом,

Исправил (надеюсь не пропадет sad.gif )

Надеюсь, что не пропадёт, наработки есть надо только немного изменить, я так понял у тебя не вышел единый класс объединяющий все функции модуля.


Цитата
QUOTE
Я чёто не понимаю. Зачем у тебя здесь идёт присваивание? Это строчка из реализации класса(что наврятли) или уже работа с ним? Если второе, то нам не надо извне присваивать значения, нам надо, чтобы всё это происходило внутри класса. Чтоб работа с ним выглядела примерно так:
Settings:=TSettings.Create(_s_FileName:String)
_wd_X:=Settings.Vid_Mode_Horizontal;

Я вот этого и не понял. У меня из ИНИ файла загружаються параметры из соотств. ключей. А как же внутри класса из загружать?

Также, как и снаружи, например(пишу сразу, возможны ошибки)


Цитата
type
TSettings=class
private
_ini_ConfigFile:TIniFile;
public
constructor Create(_s_FileName:String);
procedure LoadSettings
end;

constructor TSettings.Create(_s_FileName:String);
begin
_ini_ConfigFile:=TIniFile.Create(_s_FileName);
end;

procedure LoadSettings;
begin
Здесь твой код загрузки настроек.
end;


А далее думаю понятно. Грузишь настройки, используя переменную _ini_ConfigFile. Она глобальная, поэтому её можно использовать в любой функции, конечно в пределах класса.
OlegatoR
Хм... Примерно так и реализовал.
З.Ы. - исходники спасти все же удалось - чисто случайно unsure.gif
OlegatoR
Хм... Свойства мне реализовать не удалось - не разобрался с ХЕЛПом sad.gif
Сохранение сделаю.
А чем, собссно, переменные не устраивают?
Neo][
Цитата
Хм... Свойства мне реализовать не удалось - не разобрался с ХЕЛПом sad.gif
Сохранение сделаю.
А чем, собссно, переменные не устраивают?


Не нравятся мне все эти замутки с переменной текер, двойное присваивание и расход памяти. Надо всё делать проще, а свойства достаточно просты.

Я же говорил обращайся за помощью, поможем, значит так:

Общий вид свойства:
Цитата
TMyClass=class
private

public
Value:Integer;
procedure SetValue(NewValue:Integer);
function ReadValue:integer;
property OwnValue: Integer read ReadValue write SetValue;
end;


Это общий вид реализации свойства. Жирным выделены процедуры для работы со свойством. Ты, наверное скажешь: ведь всёравно используется переменная, так как сделано у меня, но у тебя нельзя записать новое значение, используя простое обращение TMyClass.Value:=1, да и чтение у тебя выполнено как-то по кругу. В классе читаем в сам класс - это, конечно если, так сказать, дословно выражаться.

А мы можем сделать проще:

Цитата
TSettings=class
private
Value:Integer;
public
procedure SetValue(NewValue:Integer;Name:String[25]);
constructor Create;
property OwnValue: Integer read Value write SetValue;
end;

constructor TSettings.Create;
begin
Создание ини файла, чтение из него настроек в переменные, в моём примере в переменную Value.
end;

procedure TSettings.SetValue(NewValue:Integer;Name:String[25]);
begin
А здесь идёт уже запись в файл новых значений. Обрати внимание на передаваемый в процедуру параметр Name, я описал его для того, чтобы можно было работать динамически с ини файлом, а не так как это делал ты: прописывал каждую секцию вручную. Т.е. надо написать небольшой парсер передаваемого имени. Опять же здесь пригодиться тот формат имени, который я предложил: vid_resolution_horizontal, что-то типа этого.Но это конечно твоё дело, если тебе не лень каждый раз вручную прописывать секции в ини файле, если тебе охото писать процедуры для записи настроек на каждый настраеваемый параметр, то пиши, но помни больше кода медленнее работа, сложнее отладка и т.д.
end;
OlegatoR
Я делал таким макаром: в файл записывается параметр resX и resY со значениями а в SettingsObj записывется так:
Цитата
SettingsObj.Video.Resolution.Х := _if_SetingsFile.ReadInteger('Video','resX', <значение по умолч.>);
SettingsObj.Video.Resolution.Y := _if_SetingsFile.ReadInteger('Video', 'resY', <значение по умолч.>);

Если по-ламерски реализовал - сильно не бейте smile.gif переделаю
Neo][
Цитата
Если по-ламерски реализовал - сильно не бейте smile.gif переделаю


В принципе не важно как ты реализовал, лишь бы обращение было прозрачным и работало, т.е, чтобы можно было писать:

GLFullScreenViewer.Height:=SettingsObj.Video.Resolution.Х;

и так

SettingsObj.Video.Resolution.Х:=800;
OlegatoR
понятно - разберусь с процедурами записи-чтения и буду дописывать модуль
Neo][
Цитата
понятно - разберусь с процедурами записи-чтения и буду дописывать модуль


OlegatoR, посмотри памятку программиста. Я там выложил главу из книги, посвящённую свойствам класса.
OlegatoR
Блин у меня не получается сделать свойства - запутался окончательно! angry.gif
Немогу вдуплить как реализовать процедуры чтения-записи в купе со всем остальным!
Исходники дома, не могу выложить пока (интернет не работает)
Neo][
Цитата
Немогу вдуплить как реализовать процедуры чтения-записи в купе со всем остальным!


Может на примере будет легче. Завтра обновлю исходники двигла, там в модуле HUD есть класс со свойствами.
OlegatoR
Разбираюсь с БАСС и МОД. Возмитесь еще кто-нить!
Neo][
Цитата
Разбираюсь с БАСС и МОД. Возмитесь еще кто-нить!


За БАСС и МОД или за модуль настроек?
OlegatoR
пока за звук - но возможно придется передать кому-нить и модуль настроек sad.gif
OlegatoR
ПАША! ХЕЛП!
НАСЧЕТ РЕДАКТОРА
Поскольку все модели у нас разного размера, то как сделать чтобы в окне просмотра шло автоматическое масштабирование (тоесть приближение - удаление камеры к/от обекта)
З.Ы. Юзание Scale недопускается.
Neo][
Цитата
ПАША! ХЕЛП!
НАСЧЕТ РЕДАКТОРА
Поскольку все модели у нас разного размера, то как сделать чтобы в окне просмотра шло автоматическое масштабирование (тоесть приближение - удаление камеры к/от обекта)
З.Ы. Юзание Scale недопускается.


Известная проблема. Но решение, которое ты предполагаешь нас не устроит. Ведь при построении сцены нужно чтобы каждый объект имел свой размер, опять же параметр scale нам не подходит. Калашу свой Scale а столу свой. Это надо к моделлерам, чтобы они изначально делали модели подходящие по размерам.

Опа понял, ты насчёт предпросмотра модели которой добавляешь? Тогда щас поэкспериментируем, вечером отпишусь.
OlegatoR
Тааакс. В ходе работы возникает куча вопросов!! Как мы будем обращаться к элементам массива? Например:

Код
type
 TPhysicType = record
   Static,Dinamic,RagDoll: string;
end;

type
 TPosition = record
   x, y, z: real;
end;

type
 TPhysicParams = record
   PhysicType: TPhysicType;
   Mass: real;
end;

type
  TSTEMapObject = class
    Position: TPosition;
    Physic: TPhysicParams;
    Name, MeshPath: string;
end;

type
 TSTEObjectsList = array of TSTEMapObject;

..................
Spisok: TSTEObjectList;

Spisok[1].Position.X := 2.5; // НЕ РАБОТАЕТ!!!!


Куда совать конструктор Create и нужен ли он вообще???
Как вообще обращаться - по индексам, что ли? Так после 5 объектов запутаемся

Вобщем так, Паша, если можешь - объясни как следует. С этим массивом куча проблем (Залил на ФТП исходник)
OlegatoR
Короче куча вопросов. Как мы будем обращаться к элементам масива и писать в них значения??
Цитата
type
  TPhysicType = record
    Static,Dinamic,RagDoll: string;
end;

type
  TPosition = record
    X, Y, Z: real;
end;

type
  TPhysicParams = record
    PhysicType: TPhysicType;
    Mass: real;
end;

type
  TSTEMapObject = class
  private

  public
    Position: TPosition;
    Physic: TPhysicParams;
    Name, MeshPath: string;
end;

type
  TSTEObjectsList = array of TSTEMapObject;

..................
Spisok: TSTEObjectList;

Spisok[1].Position.X := 2.5; // НЕ РАБОТАЕТ!!!!


Куда совать конструктор Create и нужен ли он вообще???
Как вообще обращаться - по индексам, что ли? Так после 5 объектов запутаемся

Вобщем так, Паша, если можешь - объясни как следует. С этим массивом куча проблем (Залил на ФТП исходник)
Neo][
Цитата
type
  TSTEObjectsList = array of TSTEMapObject;

..................
Spisok: TSTEObjectList;

Spisok[1].Position.X := 2.5; // НЕ РАБОТАЕТ!!!!

По идее и не должно, смотри как устроен список в моём модуле.

Цитата
Куда совать конструктор Create и нужен ли он вообще???

Как я уже писал класс - это как отдельно законченная программа, т.е. ей даёшь список параметров она выдаёт результат. Или по другому передаёшь набор данных, она выдаёт результат.
Коструктор используется для инициализации значений переменных, т.е. для установки начальных значений. Типа OnCreate для приложения. Опять же смотри мой модуль.

Цитата
Как вообще обращаться - по индексам, что ли? Так после 5 объектов запутаемся

Смотри мой модуль там есть список объектов. Там есть метод AddObject в нём полю Items присваивается класс. Т.е. при обращении к полю Items[2] после точки мы получаем поля и методы соответствующего класса.

В общем жди завтра статьи по ООП и мыслей по сохранению всей этой шляпы. А пока можешь создать каркас программы используя ActionList, Image и т.д.
Для этого кинул на ФТП файл Gliphs, содержит картинки для кнопок на все случаи жизни.
Neo][
Олег выложил в памятке программиста статью по программированию в стиле ООП
OlegatoR
Паша, как релизовывать сохранение координат? Кк сохранить ГЛКординатс в виде строки?
Есть еще другой вариант: сохранять ввиде НЕ
Цитата
Position=[128.88,4896,7.897]
ну или как там сохраняеть кординаты...
а делать по другому:
Цитата
x=128.88
y=4896
z=7.897

таким макаром, конечно, на пару строк больше и не очень удобно грузить НО можно будет манипулировать с каждой отдельной координатой и т.п.
Neo][
Цитата
Паша, как релизовывать сохранение координат? Кк сохранить ГЛКординатс в виде строки?


OlegatoR, смотри модуль IniFile на ФТП в директории Движка
OlegatoR
Цитата
Паша, как релизовывать сохранение координат? Кк сохранить ГЛКординатс в виде строки?


OlegatoR, смотри модуль IniFile на ФТП в директории Движка

Плсмотрел, НЕ ПОНРАВИЛОСЬ. Лучше я своим методом.
Тем более уже знаю как
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.