Свой скриптовый движок с шахматами и поэтессами. — Программирование

прилепил возможность самому задавать свои колбэки, с возможностью указывать интервал времени между вызовами (как в XPlane SDK), т.к. далеко не всегда надо вызывать колбэки на каждом цикле обработки флайт модели.

 

update = function(elapsedSinceLastCall, elapsedSinceLastFlightLoop, counter) {
  fcc.update(elapsedSinceLastCall);
  return 0.066;
}
 
const updId = regFLCallback(update, 0.066);

флайт модели или на каждом кадре?

флайт модели или на каждом кадре?

Сообщение отредактировано skyteacher: 01 March 2016 — 08:10

флайт модели или на каждом кадре?

В самом начале написано, что именно речь о флайт моделе.

 

Хотя в паре мест в доке используется слово cycle и тут же рядом frame как синоним.

http://www.xsquawkbo…:XPLMProcessing

 

This API allows you to get regular callbacks during the flight loop, the part of X-Plane where the plane’s position calculates the physics of flight, etc. Use these APIs to accomplish periodic tasks like logging data and performing I/O.

 

И да, привет sasl’у. Они даже рисуют некоторые вещи на каждом цикле флайт модели  ;)

И да, еще пример колбэка, в стиле «ООП» :))

FlightLoop = function(freq) {
  var freq = freq;
  var T = 1/freq;
  var prevtSinceFl = 0;
  
  this.update = function(dtLastCall, tSinceFl, counter) {
    dt = tSinceFl - prevtSinceFl;
    fcc.update(dt);
    prevtSinceFl = tSinceFl;
    return T;
  }
  var updId = regFLCallback(this.update, T); // register callback, which is called approx. only 15 times per second
}
 
 
var fl = new FlightLoop(15);

К сожалению XPlane не hard realtime система и время до вызова следующего колбэка — это не дэдлайн, а наоборот :) А жаль.

К сожалению XPlane не hard realtime система

Вот тут как раз радоваться надо, что не. По многим причинам :yes:

Вот тут как раз радоваться надо, что не. По многим причинам :yes:

Ну ок, перефразирую. Хотелось бы таки API, которое бы гарантировало вызов моего колбэка в неком интервале времени ;) Разве что самому костылять, увеличивая частоту вызовов.

 

А вообще не вижу проблемы, если риалтайм относительно времени внутри симулятора, XPlane и так время любит тормозить, если не укладывается.  ;)

Ну ок, перефразирую. Хотелось бы таки API, которое бы гарантировало вызов моего колбэка в неком интервале времени ;)

Ну, можно к таймеру прицепиться. Но череповато разбеганием галактик ;)
 

А вообще не вижу проблемы, если риалтайм относительно времени внутри симулятора,

Дык, вот он сообразно этому рИалу и работает. Не стреляйте в пианиста© :sarcastic:

Дык, вот он сообразно этому рИалу и работает. Не стреляйте в пианиста© :sarcastic:

Кстати, тогда у меня тут вопрос возникает попутно. Какое время я получаю в параметрах sinceLastCall и sinceLastFlightLoop? :)

Это время внутри симулятора или вне симулятора?

Какое время я получаю в параметрах sinceLastCall и sinceLastFlightLoop? :)
Это время внутри симулятора или вне симулятора?

По логике — модельное. В противном случае невозможна реализация внешних автопилотов, флаев-по-верёвкам и прочих артификал стабильностей. Другое дело, что это время в нормальных условиях отличается от реального чисто символически

флайт модели или на каждом кадре?

В самом начале написано, что именно речь о флайт моделе.

 

Хотя в паре мест в доке используется слово cycle и тут же рядом frame как синоним.

http://www.xsquawkbo…:XPLMProcessing

 

This API allows you to get regular callbacks during the flight loop, the part of X-Plane where the plane’s position calculates the physics of flight, etc. Use these APIs to accomplish periodic tasks like logging data and performing I/O.

 

И да, привет sasl’у. Они даже рисуют некоторые вещи на каждом цикле флайт модели  ;)

Сообщение отредактировано inv: 01 March 2016 — 16:32

По логике — модельное. В противном случае невозможна реализация внешних автопилотов, флаев-по-верёвкам и прочих артификал стабильностей. Другое дело, что это время в нормальных условиях отличается от реального чисто символически

Так вот тут-то и проблема. Это время плавает (и я бы не сказал, что символически)… Грубо говоря на примере выше (обновления 15 раз в секунду). Вид из кабины — 0.076с, переключил на внешний — 0.066с, т.е. 15%, что мягко говоря, дофига. Потому есть все основания предполагать, что это таки не модельное время.

 

upd: Таки да. То, что я получаю/задаю в колбэках — это реальное время.

http://www.xsquawkbo…/Simulated_Time

 

Real time can be tracked using XPLMGetElaspedTime. Real time is also the time passed to the XPLMProcessing callback functions, and is the time used to schedule periodic flight loop callbacks.

Так что вот я и говорю — проблема в том, что я не могу привязать колбэк к времени в симуляторе. И не могу потребовать (и получить гарантию) его выполнения каждые t секунд модельного времени.

И да, еще пример колбэка, в стиле «ООП» :))

FlightLoop = function(freq) {
  var freq = freq;
  var T = 1/freq;
  var prevtSinceFl = 0;
  
  this.update = function(dtLastCall, tSinceFl, counter) {
    dt = tSinceFl - prevtSinceFl;
    fcc.update(dt);
    prevtSinceFl = tSinceFl;
    return T;
  }
  var updId = regFLCallback(this.update, T); // register callback, which is called approx. only 15 times per second
}
 
 
var fl = new FlightLoop(15);

К сожалению XPlane не hard realtime система и время до вызова следующего колбэка — это не дэдлайн, а наоборот :) А жаль.

Сообщение отредактировано inv: 01 March 2016 — 17:13

upd: Таки да. То, что я получаю/задаю в колбэках — это реальное время.

Что, в принципе, не сильно портит картину при наличии sim/time/sim_speed

Так что вот я и говорю — проблема в том, что я не могу привязать колбэк к времени в симуляторе. И не могу потребовать (и получить гарантию) его выполнения каждые t секунд модельного времени.

(слегка поразмыслив) А так ли уж оно надо? Если sim_speed≈1, то особой проблемы нет. КМК писатели плагинов не сильно заморачиваются отклонениями от такого состояния

К сожалению XPlane не hard realtime система

Вот тут как раз радоваться надо, что не. По многим причинам :yes:

Вот тут как раз радоваться надо, что не. По многим причинам :yes:

Ну ок, перефразирую. Хотелось бы таки API, которое бы гарантировало вызов моего колбэка в неком интервале времени ;) Разве что самому костылять, увеличивая частоту вызовов.

 

А вообще не вижу проблемы, если риалтайм относительно времени внутри симулятора, XPlane и так время любит тормозить, если не укладывается.  ;)

Сообщение отредактировано inv: 01 March 2016 — 18:24

Ну ок, перефразирую. Хотелось бы таки API, которое бы гарантировало вызов моего колбэка в неком интервале времени ;)

Ну, можно к таймеру прицепиться. Но череповато разбеганием галактик ;)
 

А вообще не вижу проблемы, если риалтайм относительно времени внутри симулятора,

Дык, вот он сообразно этому рИалу и работает. Не стреляйте в пианиста© :sarcastic:

Дык, вот он сообразно этому рИалу и работает. Не стреляйте в пианиста© :sarcastic:

Кстати, тогда у меня тут вопрос возникает попутно. Какое время я получаю в параметрах sinceLastCall и sinceLastFlightLoop? :)

Это время внутри симулятора или вне симулятора?

Сообщение отредактировано inv: 01 March 2016 — 18:56

Что, в принципе, не сильно портит картину при наличии sim/time/sim_speed

(слегка поразмыслив) А так ли уж оно надо? Если sim_speed≈1, то особой проблемы нет. КМК писатели плагинов не сильно заморачиваются отклонениями от такого состояния

Ну, хотелось бы, чтобы всё кошерненько было и не лопатить при этом апдейты на каждом цикле обработки флайт модели.

 

При требуемых 0.0667 оно мне выдает вот такое чудо.

time_sim_vs_real.png

Действия: старт сима. переключение вида, переключение окна, зум, манипуляции с джойстиком.

 

Есть подозрение, что автопилот при таком разбросе будет не всегда адекватно себя вести.

Какое время я получаю в параметрах sinceLastCall и sinceLastFlightLoop? :)
Это время внутри симулятора или вне симулятора?

По логике — модельное. В противном случае невозможна реализация внешних автопилотов, флаев-по-верёвкам и прочих артификал стабильностей. Другое дело, что это время в нормальных условиях отличается от реального чисто символически

Что, в принципе, не сильно портит картину при наличии sim/time/sim_speed

(слегка поразмыслив) А так ли уж оно надо? Если sim_speed≈1, то особой проблемы нет. КМК писатели плагинов не сильно заморачиваются отклонениями от такого состояния

Ну, хотелось бы, чтобы всё кошерненько было и не лопатить при этом апдейты на каждом цикле обработки флайт модели.

 

При требуемых 0.0667 оно мне выдает вот такое чудо.

time_sim_vs_real.png

Действия: старт сима. переключение вида, переключение окна, зум, манипуляции с джойстиком.

 

Есть подозрение, что автопилот при таком разбросе будет не всегда адекватно себя вести.

Сообщение отредактировано inv: 01 March 2016 — 23:30

При требуемых 0.0667 оно мне выдает вот такое чудо.

Живописьненько…
 

Есть подозрение, что автопилот при таком разбросе будет не всегда адекватно себя вести.

Не исключено. Хотя… инерция немного спасёт.

По логике — модельное. В противном случае невозможна реализация внешних автопилотов, флаев-по-верёвкам и прочих артификал стабильностей. Другое дело, что это время в нормальных условиях отличается от реального чисто символически

Так вот тут-то и проблема. Это время плавает (и я бы не сказал, что символически)… Грубо говоря на примере выше (обновления 15 раз в секунду). Вид из кабины — 0.076с, переключил на внешний — 0.066с, т.е. 15%, что мягко говоря, дофига. Потому есть все основания предполагать, что это таки не модельное время.

 

upd: Таки да. То, что я получаю/задаю в колбэках — это реальное время.

http://www.xsquawkbo…/Simulated_Time

 

Real time can be tracked using XPLMGetElaspedTime. Real time is also the time passed to the XPLMProcessing callback functions, and is the time used to schedule periodic flight loop callbacks.

Так что вот я и говорю — проблема в том, что я не могу привязать колбэк к времени в симуляторе. И не могу потребовать (и получить гарантию) его выполнения каждые t секунд модельного времени.

Сообщение отредактировано inv: 01 March 2016 — 21:44

upd: Таки да. То, что я получаю/задаю в колбэках — это реальное время.

Что, в принципе, не сильно портит картину при наличии sim/time/sim_speed

Так что вот я и говорю — проблема в том, что я не могу привязать колбэк к времени в симуляторе. И не могу потребовать (и получить гарантию) его выполнения каждые t секунд модельного времени.

(слегка поразмыслив) А так ли уж оно надо? Если sim_speed≈1, то особой проблемы нет. КМК писатели плагинов не сильно заморачиваются отклонениями от такого состояния

При требуемых 0.0667 оно мне выдает вот такое чудо.

Живописьненько…
 

Есть подозрение, что автопилот при таком разбросе будет не всегда адекватно себя вести.

Не исключено. Хотя… инерция немного спасёт.