Перейти в начало страницы

Здравствуйте, гость ( Авторизация | Регистрация )

Gameru.net останавливает работу в связи с вторжением армии РФ в Украину. Следите за дальнейшими анонсами.
Support Gameru!
2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Помощь программистам, если у вас что-то не получается
Neo][
сообщение 10.09.2006, 20:40
Сообщение #1


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


В этой теме можете задавать вопросы по программированию.


--------------------
Перейти в начало страницы
 
OlegatoR
сообщение 13.09.2006, 11:26
Сообщение #2


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


Извиняюсь что не предупредил.
Я реализовал это немного по-другому:
Имеется переменная типа 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

Сообщение отредактировал OlegatoR - 13.09.2006, 11:37


--------------------
Перейти в начало страницы
 
Neo][
сообщение 13.09.2006, 12:31
Сообщение #3


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата
Имеется переменная типа 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
сообщение 15.09.2006, 11:48
Сообщение #4


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата
Но поля в классе желательно именовать простым инглишом,

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

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


--------------------
Перейти в начало страницы
 
Neo][
сообщение 15.09.2006, 16:50
Сообщение #5


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата
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
сообщение 16.09.2006, 23:41
Сообщение #6


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


Хм... Примерно так и реализовал.
З.Ы. - исходники спасти все же удалось - чисто случайно unsure.gif


--------------------
Перейти в начало страницы
 
OlegatoR
сообщение 27.09.2006, 11:42
Сообщение #7


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


Хм... Свойства мне реализовать не удалось - не разобрался с ХЕЛПом sad.gif
Сохранение сделаю.
А чем, собссно, переменные не устраивают?


--------------------
Перейти в начало страницы
 
Neo][
сообщение 27.09.2006, 17:52
Сообщение #8


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата
Хм... Свойства мне реализовать не удалось - не разобрался с ХЕЛПом 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;


Сообщение отредактировал Neo][ - 27.09.2006, 17:54


--------------------
Перейти в начало страницы
 
OlegatoR
сообщение 29.09.2006, 12:34
Сообщение #9


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


Я делал таким макаром: в файл записывается параметр resX и resY со значениями а в SettingsObj записывется так:
Цитата
SettingsObj.Video.Resolution.Х := _if_SetingsFile.ReadInteger('Video','resX', <значение по умолч.>);
SettingsObj.Video.Resolution.Y := _if_SetingsFile.ReadInteger('Video', 'resY', <значение по умолч.>);

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

Сообщение отредактировал OlegatoR - 29.09.2006, 12:37


--------------------
Перейти в начало страницы
 
Neo][
сообщение 29.09.2006, 19:36
Сообщение #10


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


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


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

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

и так

SettingsObj.Video.Resolution.Х:=800;


--------------------
Перейти в начало страницы
 
OlegatoR
сообщение 30.09.2006, 18:21
Сообщение #11


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


понятно - разберусь с процедурами записи-чтения и буду дописывать модуль


--------------------
Перейти в начало страницы
 
Neo][
сообщение 01.10.2006, 16:05
Сообщение #12


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата
понятно - разберусь с процедурами записи-чтения и буду дописывать модуль


OlegatoR, посмотри памятку программиста. Я там выложил главу из книги, посвящённую свойствам класса.


--------------------
Перейти в начало страницы
 
OlegatoR
сообщение 09.10.2006, 11:36
Сообщение #13


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


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


--------------------
Перейти в начало страницы
 
Neo][
сообщение 10.10.2006, 21:08
Сообщение #14


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата
Немогу вдуплить как реализовать процедуры чтения-записи в купе со всем остальным!


Может на примере будет легче. Завтра обновлю исходники двигла, там в модуле HUD есть класс со свойствами.


--------------------
Перейти в начало страницы
 
OlegatoR
сообщение 13.10.2006, 14:58
Сообщение #15


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


Разбираюсь с БАСС и МОД. Возмитесь еще кто-нить!


--------------------
Перейти в начало страницы
 
Neo][
сообщение 13.10.2006, 21:11
Сообщение #16


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата
Разбираюсь с БАСС и МОД. Возмитесь еще кто-нить!


За БАСС и МОД или за модуль настроек?


--------------------
Перейти в начало страницы
 
OlegatoR
сообщение 15.10.2006, 00:40
Сообщение #17


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


пока за звук - но возможно придется передать кому-нить и модуль настроек sad.gif


--------------------
Перейти в начало страницы
 
OlegatoR
сообщение 31.10.2006, 23:04
Сообщение #18


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


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


--------------------
Перейти в начало страницы
 
Neo][
сообщение 01.11.2006, 10:33
Сообщение #19


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


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


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

Опа понял, ты насчёт предпросмотра модели которой добавляешь? Тогда щас поэкспериментируем, вечером отпишусь.


--------------------
Перейти в начало страницы
 
OlegatoR
сообщение 01.11.2006, 19:03
Сообщение #20


Gameru DA
************************

Репутация:   3704  
Группа: Администратор
Сообщений: 10206
Награды: 4
Регистрация: 03.02.2006




Вставить ник Цитировать выделенное в форуму быстрого ответа


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

Код
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 объектов запутаемся

Вобщем так, Паша, если можешь - объясни как следует. С этим массивом куча проблем (Залил на ФТП исходник)


--------------------
Перейти в начало страницы
 

2 страниц V   1 2 >
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 18.04.2024, 10:17