Donate with PayPal button New New

+ Ответить в теме
Страница 135 из 145 ПерваяПервая ... 35 85 125 133 134 135 136 137 ... ПоследняяПоследняя
Показано с 1,341 по 1,350 из 1446

Тема: Вопросы по Auran GameScript

  1. #1341
    Разработчик Аватар для B.U.G.O.R.
    Регистрация
    07.02.2010
    Адрес
    Montenegro
    Возраст
    30
    Сообщений
    8,379

    По умолчанию

    Как именно надо связывать CabinData и скрипт Locomotive?

    Прописал это:
    Код:
    public ep2kcabindata cab;
    В Init это:
    Код:
    cab = new ep2kcabindata();
    И вот, он видит эту CabinData, но такое чувство, что он один раз цепанул значение переменной там и не получает ее новые значения. Тестово закинул PlaySound в цикл, где сделал if (cab.w2023) {сам звук}, если я изначально пишу в CabinData, что этот w2023 = true; то он играет, но стоит мне изменить это значение из скрипта кабины, то ничего не меняется. Как вот сначала прочитал значение, так и есть.

  2. #Trainz
    Реклама
    Регистрация
    Постоянная
    Адрес
    Весь мир
    Возраст
    2010
    Сообщений
    Много

    Donate with PayPal button N3v New New

     

  3. #1342
    Пользователь Аватар для kemal
    Регистрация
    22.10.2009
    Страна
    Адрес
    Казань / 793км
    Возраст
    35
    Сообщений
    3,555

    По умолчанию

    Назначение кабиндаты - сохранять состояние кабины, пока она не существует. В кабине,в методе attach нужно получить у локомотива кабиндату и восстановить из неё состояние. Когда что-то меняется в кабине, нужно сохранить всё в кабиндату и положить в локомотив.
    А вот коммуникацию лучше делать другими методами.

  4. #1343
    Разработчик Аватар для B.U.G.O.R.
    Регистрация
    07.02.2010
    Адрес
    Montenegro
    Возраст
    30
    Сообщений
    8,379

    По умолчанию

    Цитата Сообщение от kemal Посмотреть сообщение
    Назначение кабиндаты - сохранять состояние кабины, пока она не существует. В кабине,в методе attach нужно получить у локомотива кабиндату и восстановить из неё состояние. Когда что-то меняется в кабине, нужно сохранить всё в кабиндату и положить в локомотив.
    Это понятно, с этим проблем нет. Увязать кабину и кабиндата нормально, а вот увязать кабиндата и локомотив почему-то не получается.

  5. #1344
    Пользователь Аватар для TRam_
    Регистрация
    22.09.2009
    Возраст
    33
    Сообщений
    16,432

    По умолчанию

    Цитата Сообщение от B.U.G.O.R. Посмотреть сообщение
    В Init это:
    Надо в attach() вызывать у лока GetCabinData() и копировать из переданной локом в свою. Кроме того, лок сам ничего запоминать не будет, ему вызывать SetCabinData нужно вручную.

    P.S. лично я вообще ушёл от структуры cabindata, сделав динамически наполняемые наборы передаваемых контролов. Возможно на их генерацию затрачивается несколько больше ресурсов, зато передаётся и далее обрабатывается только то, что действительно нужно из свойств.

    ---------- Сообщение добавлено в 17:27 ---------- Предыдущее сообщение размещено в 17:23 ----------

    В случае же непрерывных вызовов SetCabinData() локу постоянно придётся обрабатывать все настройки, которые там будут содержаться.

    А сделать чтобы "при выходе из кабины кабина один раз передала эти настройки в лок" нельзя. Потому что это событие никак не обрабатывается, в отличие от запуска скриптов кабины при переходе в лок (это собственно вызов attach() )
    Последний раз редактировалось TRam_; 16.07.2019 в 17:28.

  6. Сказали спасибо: (3)


  7. #1345
    Пользователь Аватар для kemal
    Регистрация
    22.10.2009
    Страна
    Адрес
    Казань / 793км
    Возраст
    35
    Сообщений
    3,555

    По умолчанию

    Я специально написал, что коммуникацию нужно делать другими методами. Делать через кабиндату - это антипаттерн. Кабиндата предназначена только для сохранения состояния кабины. Локомотив не должен её обрабатывать.

  8. #1346
    Разработчик Аватар для B.U.G.O.R.
    Регистрация
    07.02.2010
    Адрес
    Montenegro
    Возраст
    30
    Сообщений
    8,379

    По умолчанию

    А как по-другому связать кабину и локомотив?

  9. #1347
    Пользователь Аватар для kemal
    Регистрация
    22.10.2009
    Страна
    Адрес
    Казань / 793км
    Возраст
    35
    Сообщений
    3,555

    По умолчанию

    Сообщения. Но лучше класс со своими методами.

  10. #1348
    Пользователь Аватар для TRam_
    Регистрация
    22.09.2009
    Возраст
    33
    Сообщений
    16,432

    По умолчанию

    Через вызовы публичных функций локомотива или отдельного класса, получаемого из локомотива. А вот чтобы периодически передавать данные из локомотива в кабину - это уже сложнее, нужно делать систему контроля нахождения игрока в локомотиве + делать развязку от циклического подключения скриптов (т.е. чтобы не было "кабина include'ит скрипты локомотива, который includ'ит скрипты кабины, которая include'ит скрипты локомотива ..."), разделяя её на родительскую и дочернюю части.

    ---------- Сообщение добавлено в 18:45 ---------- Предыдущее сообщение размещено в 18:44 ----------

    Цитата Сообщение от kemal Посмотреть сообщение
    Сообщения.
    Плохой способ. Ресурсозатратный.

  11. #1349
    Пользователь Аватар для kemal
    Регистрация
    22.10.2009
    Страна
    Адрес
    Казань / 793км
    Возраст
    35
    Сообщений
    3,555

    По умолчанию

    Ситуация, когда два класса (каждый в своём файле!) используют друг друга переваривается нормально. Я это использовал в пакетах для метро (правда, не помню, выкладывал ли).

    Сообщения - да, плохой способ.

  12. #1350
    Разработчик Аватар для B.U.G.O.R.
    Регистрация
    07.02.2010
    Адрес
    Montenegro
    Возраст
    30
    Сообщений
    8,379

    По умолчанию

    Цитата Сообщение от TRam_ Посмотреть сообщение
    делать развязку от циклического подключения скриптов (т.е. чтобы не было "кабина include'ит скрипты локомотива, который includ'ит скрипты кабины, которая include'ит скрипты локомотива ..."), разделяя её на родительскую и дочернюю части.
    Это так на 2ТЭ10В сделано? Я тут глянул эти скрипты и офигел, походу, это именно так и сделано.

    Короче, мне удалось сделать это дело, вот теперь скажите мне, на сколько это хороший способ (делал на примере секции ТЭ10, чтобы на ЭПшку загнать годноту сразу):

    Это в Attach кабины:
    Код:
    CabinData cdU = loco.GetCabinData();
    te10mcd gencd = cast<te10mcd>cdU;
    loc = cast<te10bgrcool>(obj);
    if(!gencd)
    {
     gencd = new te10mcd();
     loco.SetCabinData(gencd);
    }
    cd=gencd;
    Это в описание локомотива:
    Код:
    public te10mcd cab;
    	te10mcd cd = null;

    А это в тело локомотива:
    Код:
    public CabinData GetCabinData() 
    	{  
    		return cast<CabinData>cab;
    	}
    	
    	public void SetCabinData(CabinData data)
    	{
    		cab=cast<te10mcd>data;
    		w892 = cab.w2023;
    	}
    Т.е. у меня есть своя переменная в локомотиве, к которой я приравниваю переменную из CabinData, а loco.SetCabinData я запускаю только в UserSetControl по нажатию на какой-то p_control. Т.е., на сколько я понимаю, у меня нет постоянного вызова этой функции, а только в результате изменения переменной.



    ЗЫ: Я чего ваще кинулся-то на это, я тут внезапно понял, что если пихать все в скрипт кабины, например циклический звуки вентиляторов или компрессора, какие-то другие процессы, то они будут активны только, когда я нахожусь в этом локомотиве. Стоит перейти в другой и все, все это заканчивается. Почему-то раньше не задумывался об этом, потому что тупо переделывал скрипты, а там уже все было сделано. Поэтому подумал, что надо работу схемы надо выносить в локомотив, а из кабины только управлять этим. Ну понятно, что оставить всякие плюшки там типа подсветок и прочее, что не является видным внешне и не является каким-то процессом, влияющим на работу машины.
    Последний раз редактировалось B.U.G.O.R.; 16.07.2019 в 19:04.

+ Ответить в теме

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения