Donate with PayPal button New New

+ Ответить в теме
Страница 25 из 145 ПерваяПервая ... 15 23 24 25 26 27 35 75 125 ... ПоследняяПоследняя
Показано с 241 по 250 из 1446

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

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

    По умолчанию

    А почему б GSTrackSearch не использовать? Длину вагона можно ж получить.

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

    Donate with PayPal button N3v New New

     

  3. #242
    Пользователь Аватар для Эрендир
    Регистрация
    13.01.2010
    Страна
    Адрес
    Я Бот, живу в сети :)
    Возраст
    39
    Сообщений
    6,303

    По умолчанию

    Хм... Надо попробовать. Правда когда делал "Движение в депо", мне показалось, что GetLenght() не всегда возвращает точную длину вагона. Возможно просто показалось.

  4. #243
    Пользователь Аватар для Nemo
    Регистрация
    10.03.2010
    Страна
    Возраст
    32
    Сообщений
    834

    По умолчанию

    А известны причины, по которым вылетает ошибка ER_Timeout? Как от неё оптимизироваться?

  5. #244
    Пользователь Аватар для Эрендир
    Регистрация
    13.01.2010
    Страна
    Адрес
    Я Бот, живу в сети :)
    Возраст
    39
    Сообщений
    6,303

    По умолчанию

    Nemo, слишком долго твой скрипт занимает процессорное время. Как следствие, ТРС считает, что твой скрипт завис. Надо переодически делать небольшие паузы через Sleep. Хотя бы на 0.01 секунды. Скажем, если у тебя масив, то на каждые 1000 элементов один Sleep(0.01)

  6. #245
    Пользователь Аватар для Nemo
    Регистрация
    10.03.2010
    Страна
    Возраст
    32
    Сообщений
    834

    По умолчанию

    Цитата Сообщение от Эрендир Посмотреть сообщение
    на каждые 1000 элементов один Sleep(0.01)
    У меня 4 массива, в них суммарно всего 9 элементов. Чему там виснуть? Попробую слипы натыкать...

  7. #246
    Дорписатель Аватар для Don_Capone
    Регистрация
    18.05.2010
    Адрес
    Хабаровск
    Сообщений
    934

    По умолчанию

    Как можно сделать таймер, работающий, пока выполняется условие?

    То есть смысл такой:
    Выполнилось условие - таймер запустился, и работает, пока условие выполняется.
    Если условие перестало выполняться - таймер сбросился.
    Если таймер успел дотикать до нужного времени - выполнилось второе условие.

  8. #247
    Пользователь Аватар для amd103
    Регистрация
    08.01.2010
    Страна
    Адрес
    Ульяновск
    Возраст
    32
    Сообщений
    1,022

    По умолчанию

    World.GetSeconds() — счетчик секунд, не останавливается во время пауз.
    World.GetTimeElapsed() — то же, останавливается во время пауз.
    Если условие выполнилось, запоминаешь секунды где-нибудь, периодически проверяешь разность текущего и сохраненного, если больше нужного времени — выполнилось действие.

  9. #248
    Дорписатель Аватар для Don_Capone
    Регистрация
    18.05.2010
    Адрес
    Хабаровск
    Сообщений
    934

    По умолчанию

    Ну да, я пробовал что-то подобное. Но интересует вот это подробней:
    периодически проверяешь разность текущего и сохраненного
    Как и с какой периодичностью проверяется? Я пробовал это всё update-е осуществить.

    Лучшим примером послужит кусок кода.

  10. #249
    Пользователь Аватар для amd103
    Регистрация
    08.01.2010
    Страна
    Адрес
    Ульяновск
    Возраст
    32
    Сообщений
    1,022

    По умолчанию

    Код:
    thread void Monitor()
    {
        float checkInterval = %some_time%;
        float timerTime = %some_another_time%;
        
        bool conditionState = false;
        float conditionStartTime;
        
        while (true)
        {
            bool condition = %condition%;
            float time = World.GetTimeElapsed();
            if (condition and !conditionState)
            {
                conditionState = true;
                conditionStartTime = time
            }
            
            if (!condition and conditionState)
            {
                conditionState = false;
                %do_second%();
            }
            
            if (conditionState)
            {
                float condTime = time - conditionStartTime;
                if (condTime > timerTime)
                {
                    %do_first%();
                }
            }
        }
    }
    Нужную периодичность ты лучше знаешь, зависит от того, что ты мониторишь.

  11. #250
    Дорписатель Аватар для Don_Capone
    Регистрация
    18.05.2010
    Адрес
    Хабаровск
    Сообщений
    934

    По умолчанию

    По-моему checkinterval нигде не используется. Так и надо?
    Однако не работает :/

    В общем мне нужно сделать отказ локомотива при езде на реостатной позиции
    Выглядит это так:

    Код:
        thread void hod_position_check()
    {
        float checkInterval = 1.0;
        float timerTime = 25.0;
        
        bool conditionState = false;
        float conditionStartTime;
        while(true)
        {
        float time1 = World.GetTimeElapsed();
            if(!hod_pos and !conditionState)
            {
            conditionState = true;
            conditionStartTime = time1;
            }
                if (hod_pos and conditionState)
                {
                conditionState = false;
                }
            if (conditionState)
            {
            float failtime = time1 - conditionStartTime;
                if(failtime > timerTime)
                {
                locofail = true;
                }
            }
        }
    }
    Соответственно
    hod_pos - условие ходовой позиции
    locofail - условие поломки
    Интервал 1 секунда(он же в секундах измеряется?)
    таймер 25 секунд(ну просто для проверки)

    Запускается тред при наборе реостатной позиции, то есть
    if(!hod_pos)
    {
    hod_position_check();
    }

    При наборе реостатной позиции вся эта халабуда начинает жутко тормозить и выдавать эрроры "Thread Exception: ER_timeout, line 930"(в коде желтая строка).

    Что я делаю не так?

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

Ваши права

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