Здравствуйте! Друзья, подскажите, как вытянуть данные с FSX?
Я в соседней ветке читал, надо вызвать AddToDataDefinition, затем RequestDataOnSimObject.
Ну вот и что дальше делать? Проблема в том, что в С/С++ я ничего сложнее HelloWorld-а не писал, а документация вся идет на С++((
Програмку пишу на С#. С этим языком я довольно хорошо знаком. Но примеров под C# не нашел, во всяком случае на русском.
В общем, прошу помощи по следующим пунктам:
- Как исправить ошибки «Имя не существует в текущем контексте.»? Ведь все перечисления лежат в одном классе что и функция.
- В Simulation Variables есть записи вроде этой GENERAL ENG RPM:index, что означает :index?
- Как всё таки получить данные? Ну вызвал я эти два метода, дальше что? Как конкретно Value получить??
Огромное спасибо всем за отклики!
То ли лыжи не едут, то ли время позднее, то ли я чего не понимаю
Если брать мануал с SDK, то выходит так, что они сначала добавляют всё что нужно, потом вызывают RequestDataOnSimObject и в обработчике события ловят и шлют всё в структуру.
Ну вот я добавляю.
connect.AddToDataDefinition(SIMCONNECT_DATA_DEFINITION_ID.Engines, «ENG N2 RPM:1», «Rpm», SIMCONNECT_DATATYPE.INT32, 0, 0);
connect.AddToDataDefinition(SIMCONNECT_DATA_DEFINITION_ID.Engines, «ENG N2 RPM:2», «Rpm», SIMCONNECT_DATATYPE.INT32, 0, 0);
И вызываю.
connect.RequestDataOnSimObject(DATA_REQUEST_ID.REQUEST_1, SIMCONNECT_DATA_DEFINITION_ID.Engines, SimConnect.SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD.SECOND, 0, 0, 0, 0);
В обработчике всё равно лажа
Что сейчас-то пошло не так?
Так, ладно. Со всей этой ерундой разобрался.
Ошибки из-за того что обращался не правильно, вот так надо:
connect.AddToDataDefinition(SIMCONNECT_DATA_DEFINITION_ID.EngineLeft, «TURB ENG N1:1», «Percent», SIMCONNECT_DATATYPE.INT32, 0, 0);
connect.RequestDataOnSimObject(DATA_REQUEST_ID.REQUEST_1, SIMCONNECT_DATA_DEFINITION_ID.EngineLeft, SimConnect.SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD.SECOND, 0, 0, 0, 0);
С индексом всё тоже просто:
TURB ENG N1:1 левая у 737
TURB ENG N1:2 правая.
Получить значение вроде тоже не сложно:
connect.OnRecvSimobjectData += new SimConnect.RecvSimobjectDataEventHandler(simconnect_RecvSimobjectData);
void simconnect_RecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data)
{
label1.Text = «Left N1:» + data.dwData[0].ToString() + «rn»;
}
Едем дальше… Двигателей у мну 2, а значения получаю по одному. Не порядок. Как получать значения по всем двигателям?
Сообщение отредактировано _777_: 19 August 2015 — 01:39
Вообще нужно придумать какую-то магию для этого всего. Явно в data.dwData[] не зря массив object-ов идет. По сути каждый елемент массива и есть значение того или инного параметра. Всё сводится к вот этим двум строчкам:
connect.AddToDataDefinition(SIMCONNECT_DATA_DEFINITION_ID.EngineLeft, «TURB ENG N1:1», «Percent», SIMCONNECT_DATATYPE.INT32, 0, 0);
connect.RequestDataOnSimObject(DATA_REQUEST_ID.REQUEST_1, SIMCONNECT_DATA_DEFINITION_ID.EngineLeft, SimConnect.SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD.SECOND, 0, 0, 0, 0);
Вот с них и начну. А пока перерыв. Сегодня решил сидеть до победного конца.
По сложившейся традиции сам отвечаю на свой вопрос
Событие OnRecvSimobjectData желательно регистрировать в той же методе, что и предыдущие команды. Однако это не обязательно !
Привожу код:
И пруф, что работает
Вставлю свой вопрос.
Пытаюсь написать свою программку (хочу сделать аппаратный автопилот, а то очень неудобно каждый раз ставить на паузу, вместо джойстика брать мышь, менять что-то, снова брать джойстик и снимать с паузы).
Решил писать на С# (заодно поучу язык), аппаратная основа — Ардуино (уже начал осваивать — ничего сложного пока не вижу).
Сложности возникли с подключением моей программы к SimConnect.
Пишу в коде — using Microsoft.FlightSimulator.SimConnect;
Получаю ошибку:
Тип или имя пространства имен «FlightSimulator» не существует в пространстве имен «Microsoft» (возможно, отсутствует ссылка на сборку)
Сообщение отредактировано -Alex-: 19 March 2016 — 16:16