|
|
Регистрация | Справка | Пользователи | Социальные группы | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
![]() |
#401 |
Звичайна людина на Землі
Регистрация: 06.11.2011
Адрес: Україна, м.Київ, Печерський район, вул. Кіквідзе
Сообщений: 7,133
|
![]()
Конечно хуки.
Без хуков 3До в окне простого редактора не соберётся. На нахер вар_класс. Только Property.set(class1. Я всегда исправляю, что бы Ил не сходил с ума от разночтений в коде. |
![]() |
![]() |
![]() |
#402 |
Звичайна людина на Землі
Регистрация: 06.11.2011
Адрес: Україна, м.Київ, Печерський район, вул. Кіквідзе
Сообщений: 7,133
|
![]()
У меня большая прозьба:
нужно организовать ручное управление радиатором при автомате шага. Такой вид кода не компилится. Код:
public void onAircraftLoaded() { super.onAircraftLoaded(); if(super.FM.isPlayers()) ((FlightModelMain) (super.FM)).EI.engines[0].setControlRadiatorAuto(false); } При том, что в классе уже есть метод радиатора. Код:
public void update(float f) { if(Math.abs(flapps - kangle) > 0.01F) { flapps = kangle; hierMesh().chunkSetAngles("Oil1_D0", 0.0F, -20F * kangle, 0.0F); } kangle = 0.95F * kangle + 0.05F * FM.EI.engines[0].getControlRadiator(); if(kangle > 1.0F) kangle = 1.0F; afterburnerhud(); super.update(f); } |
![]() |
![]() |
![]() |
#403 |
Местный
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,659
|
![]()
Василий, я не специалист и у нас разные компиляторы-декомпиляторы, но постараюсь помочь.
Первое, у меня не компилировался код с двумя методами управления чем либо, створки юбки капота, или масляный радиатор, управляющие поверхности, не важно. Метод управления для данной части должен быть один. Вот как на Ки-30 (на скрине). Требуется уточнение, для каких частей системы охлаждения мотора нужна анимация? К примеру на Гамма-5 или R-5 есть анимация только масляного радиатора. Вот пример выдвижного радиатора Р-5 Код:
public void update(float f) { float f_6_ = FM.EI.engines[0].getControlRadiator(); Aircraft.xyz[0] = 0.0F; Aircraft.xyz[1] = 0.0F; Aircraft.xyz[2] = f_6_ * -0.45F; Aircraft.ypr[0] = 0.0F; Aircraft.ypr[1] = 0.0F; Aircraft.ypr[2] = 0.0F; if (Math.abs(flapps - xyz[2]) > 0.01F) { flapps = xyz[2]; hierMesh().chunkSetLocate("Water_D0", Aircraft.xyz, Aircraft.ypr); } |
![]() |
![]() |
![]() |
#404 |
Местный
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,659
|
![]()
Вот пример Ки-51, у этой модели анимированы и створки юбки капота и масляный радиатор.
Код:
public void update(float f) { super.update(f); float f_2_ = FM.EI.engines[0].getControlRadiator(); if (Math.abs(flapps - f_2_) > 0.01F) { flapps = f_2_; hierMesh().chunkSetAngles("Oil_radiat_D0", 0.0F, -15.0F * f_2_, 0.0F); for (int i = 1; i < 11; i++) hierMesh().chunkSetAngles("Water" + i + "_D0", 0.0F, 22.0F * f_2_, 0.0F); } |
![]() |
![]() |
![]() |
#405 | |
Звичайна людина на Землі
Регистрация: 06.11.2011
Адрес: Україна, м.Київ, Печерський район, вул. Кіквідзе
Сообщений: 7,133
|
![]() Цитата:
Мне не анимация нужна. Анимацию я вписывать немного умею - несколько створок заставить двигаться - не проблема. У меня другой вопрос: нужно заставить работать радиатор именно в ручном режиме., сейчас радиатор в автоматическом режиме., пропеллер тип-8(лучше - конечно - тип 7, так будет оригиналнее)., у Фоки-4-8 нет раздела анимации створок, поэтому радиатор ручной., у Фоки-9 есть в классе код анимации, поэтому шаг автоматический., для Темпеста нужно заставить кодом работать радиатор в ручном режиме при автомате винта, а они увязаны в коде в глубинах классов. Если поставить шаг винта ручной - то и радиатор будет ручной. Но.... у мотора Темпеста обороты 3700 и винт весом 225 кг. При сбросе газа самолёт переворачивается и устремляется к земле, никакие манипуляции русом не помогают, только добавление тяги до 100 проц. Это такой баг в игре - сильно большие обороты - не стандартные для Ила. В дефолте обороты снизили до 3150, что бы не было бага переворачивания самолёта. Поэтому и спрашивал тут как вписать принудительное регулирование радиатора именно кодом в классе. Есть код на тип афтербуннера - и он работает. Причём тип и название афтербуннера пишется двумя разными методами и они прекрасно уживаются в одном классе. Такие пояснения относительного моего вопроса. ![]() Последний раз редактировалось Vasya; 15.10.2019 в 22:39. |
|
![]() |
![]() |
![]() |
#406 |
Местный
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,659
|
![]() |
![]() |
![]() |
![]() |
#407 |
Чёрный бомбер
Регистрация: 26.11.2018
Адрес: Бишкек, Кыргызстан
Сообщений: 224
|
![]()
Вопрос к знатокам:
Как из одного класса запустить другой класс?
__________________
Я всё понял! Это неправильные пчёлы! И они, наверное, делают неправильный мёд! © Вирпилы о картоделах, админах серверов и разрабах игры От этих пчёл всего можно ждать. Разве знаешь, что придёт в голову этим пчёлам... © Картоделы, админы серверов и разрабы игры о вирпилах |
![]() |
![]() |
![]() |
#408 |
Модератор
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,558
|
![]()
Не совсем понятен вопрос... Что конкретно надо сделать?
|
![]() |
![]() |
![]() |
#409 |
Чёрный бомбер
Регистрация: 26.11.2018
Адрес: Бишкек, Кыргызстан
Сообщений: 224
|
![]()
Как бы это не звучало банально, но надо буквально, чтобы один класс запускал на выполнение другой класс, как программы через батник.
Теперь более подробно, что нужно. Есть мой мод радаров. Он состоит из трех классов: RotatingRadarGeneric - главный класс RotatingRadar - класс, содержащий список радаров RadarFreya - дополнительный класс под каждый радар, содержит код анимации вращения антенны и запускает цикл работы мода в RotatingRadarGeneric Каждый радар выводит на экран игрока свои команды наведения на свою цель. При большом количестве радаров на карте это создает проблему. Я сейчас делаю дополнительный функционал в виде КП наведения, который обрабатывает поступающие данные о целях с нескольких радаров, выбирает одну из них и наводить на неё самолет игрока. По мере работы узнал, что игра для каждого радара запускает свой отдельный экземпляр класса RotatingRadarGeneric, что не позволяет встроить код КП наведения в RotatingRadarGeneric, так как этот код также будет выполнятся в нескольких экземплярах. Поэтому нужно выносить код КП в отдельный класс, однако есть проблема как его запускать. Тут есть два выхода: создать отдельный объект КП наведения при установке на карте которого будет запускаться его класс, либо не делать отдельный объект и запускать его класс по вызову из другого класса, хочу это сделать через RotatingRadar, надеюсь игра не запускает RotatingRadar в нескольких экземплярах, как это она делает с RotatingRadarGeneric
__________________
Я всё понял! Это неправильные пчёлы! И они, наверное, делают неправильный мёд! © Вирпилы о картоделах, админах серверов и разрабах игры От этих пчёл всего можно ждать. Разве знаешь, что придёт в голову этим пчёлам... © Картоделы, админы серверов и разрабы игры о вирпилах |
![]() |
![]() |
![]() |
#410 |
Модератор
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,558
|
![]()
тут сложный вопрос - как разделить однотипные объекты?
В общем наверно можно в КП читать параметры с объектов (например высоту и удаленность) и после сортировки их выводить на экран. то есть в RotatingRadarGeneric ты создаешь переменные public float h; public float d; эти переменные внутри класса меняются у каждого объекта по своему в классе КП private RotatingRadarGeneric rrg; и читаешь переменные из класса rrg.h rrg.d остается вопрос - как распознать чьи это переменные? наверно можно при создании объекта генерить его уникальный код и передавать так же в КП |
![]() |
![]() |
![]() |
#411 |
Чёрный бомбер
Регистрация: 26.11.2018
Адрес: Бишкек, Кыргызстан
Сообщений: 224
|
![]()
Asura
Не совсем так. Вот код метода в классе RotatingRadarGeneric, который позволяет радару выбирать самолет противника на карте: Код:
List var1 = Engine.targets(); \\ Создается массив всех целей на карте (самолетов\кораблей\танков\артиллерии и т.д.) int var2 = var1.size(); \\ определяется размер этого массива (если проще количество целей на карте) Actor var3; \\ создается переменная для цели for(int var4 = 0; var4 < var2; ++var4) { \\ создается цикл, который начинает проверять все цели в массиве на соответствие выбранным ниже фильтрам var3 = (Actor)var1.get(var4); \\ присвоение переменной цели название конкретной цели из массива для проверки if (var3 instanceof Aircraft && var3.getArmy() != World.getPlayerArmy()) { \\ фильтр, выбирает из массива целей только самолеты, которые не принадлежат команде игрока HUD.log("Противник " + var3); \\ пример, дальнейшего действия с полученным названием противника, в данном случае на экране игрока выводится надпись "Противник com.maddox.il2.objects.air.HS_129B2@31e6", где жирный шрифтом указано название цели для игры (синим шрифтом указан его уникальный ID на данной карте) } } Таким образом в переменной var3 мы получаем нужное нам уникальное название цели, с которым мы можем дальше работать. Так вот, этот метод вызывается с определенной периодичностью (обычно 30 секунд). Нам нужно этот var3 внести в другой массив, с которым и будет работать наш КП. Для этого используется такой код Код:
List enemy = new ArrayList(); \\ создаем пустой саморасширяющийся массив enemy, так как мы заранее не знаем сколько будет целей enemy.add(var3); \\ команда добавление значение переменной var3 в массив enemy Так вот, этот код нельзя вставить в метод поиска целей радаром, так как первая команда создает пустой массив, а так как метод поиска целей цикличен (запускается каждый 30 секунд), то при каждом своем выполнение он будет удалять и заново создавать массив enemy Таким образом массив надо создавать вне этого метода, а в методе надо оставить только команду enemy.add(var3); Однако, создавать массив enemy также нельзя создавать и в самом классе RotatingRadarGeneric потому, что как было установлено выше, для каждого радара запускается свой экземпляр класса RotatingRadarGeneric В результате имеем следующее: массив enemy создается в классе КП, в методе поиска радаром целей в классе RotatingRadarGeneric оставляем только команду добавления var3 в массив enemy в классе КП Вопрос в следующем, как именно из метода передать значение var3 в массив enemy в другом классе КП. Если сделать так: В RotatingRadarGeneric добавляем строку Private GroundControlInterception gci; в методе поиска целей добавить gci.enemy.add(var3); а в самом классе КП сделать enemy открытым строкой public Actor enemy; То при компиляции получим следующую ошибку Код:
RotatingRadarGeneric.java:766: error: cannot find symbol gci.enemy.add(var3); ^ symbol: method add(Actor) location: variable enemy of type Actor 1 error
__________________
Я всё понял! Это неправильные пчёлы! И они, наверное, делают неправильный мёд! © Вирпилы о картоделах, админах серверов и разрабах игры От этих пчёл всего можно ждать. Разве знаешь, что придёт в голову этим пчёлам... © Картоделы, админы серверов и разрабы игры о вирпилах Последний раз редактировалось ildar; 27.03.2021 в 15:39. |
![]() |
![]() |
![]() |
#412 |
Модератор
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,558
|
![]()
А если попробовать сделать так -
Сделать основной класс NewRadarGeneric, в нем создавать массив целей. Класс RotatingRadarGeneric сделать наследником NewRadarGeneric public class RotatingRadarGeneric extends NewRadarGeneric и в нем заполнять массив класс КП тоже наследник NewRadarGeneric - в нем читать массив и выдавать целеуказания. |
![]() |
![]() |
![]() |
#413 |
Модератор
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,558
|
![]()
А если попробовать сделать так -
Сделать основной класс NewRadarGeneric, в нем создавать массив целей. Класс RotatingRadarGeneric сделать наследником NewRadarGeneric public class RotatingRadarGeneric extends NewRadarGeneric и в нем заполнять массив класс КП тоже наследник NewRadarGeneric - в нем читать массив и выдавать целеуказания. |
![]() |
![]() |
![]() |
#414 | |
Чёрный бомбер
Регистрация: 26.11.2018
Адрес: Бишкек, Кыргызстан
Сообщений: 224
|
![]() Цитата:
Код:
public abstract class RotatingRadarGeneric extends ActorHMesh implements MsgExplosionListener, MsgShotListener, Obstacle, Prey, ActorAlign
__________________
Я всё понял! Это неправильные пчёлы! И они, наверное, делают неправильный мёд! © Вирпилы о картоделах, админах серверов и разрабах игры От этих пчёл всего можно ждать. Разве знаешь, что придёт в голову этим пчёлам... © Картоделы, админы серверов и разрабы игры о вирпилах |
|
![]() |
![]() |
![]() |
#415 |
Модератор
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,558
|
![]()
А наследником ActorHMesh сделать класс КП. Изменить иерархию.
|
![]() |
![]() |
![]() |
#416 | |
Чёрный бомбер
Регистрация: 26.11.2018
Адрес: Бишкек, Кыргызстан
Сообщений: 224
|
![]()
В общем, вышестоящую ошибку при компиляции я убрал при помощи замены:
Код:
public Actor enemy; Код:
public List enemy; По номеру строки указано это: Код:
gci.enemy.add(var3); Все равно такая же ошибка, что и на скине. Решил вообще сделать самую простую проверку: Цитата:
Везде ошибка, что и на скрине, игра ругается на строку, где указана сокращенная ссылка rrg.h То есть способ с Код:
private RotatingRadarGeneric rrg; rrg.h
__________________
Я всё понял! Это неправильные пчёлы! И они, наверное, делают неправильный мёд! © Вирпилы о картоделах, админах серверов и разрабах игры От этих пчёл всего можно ждать. Разве знаешь, что придёт в голову этим пчёлам... © Картоделы, админы серверов и разрабы игры о вирпилах Последний раз редактировалось ildar; 28.03.2021 в 17:14. |
|
![]() |
![]() |
![]() |
#417 |
Модератор
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,558
|
![]()
Я бы все таки попробовал сделать по аналогии классов тех же маяков - поменять иерархию наследования.
|
![]() |
![]() |
![]() |
#418 | |
Чёрный бомбер
Регистрация: 26.11.2018
Адрес: Бишкек, Кыргызстан
Сообщений: 224
|
![]() Цитата:
Посмотрел как реализован игровой массив Engine.targets и как туда игра добавляет новые значения, и выяснил следующее: Вместо команды Код:
Engine.targets.add(var24); Код:
Engine.targets().add(var24); Теперь все заработало! ![]()
__________________
Я всё понял! Это неправильные пчёлы! И они, наверное, делают неправильный мёд! © Вирпилы о картоделах, админах серверов и разрабах игры От этих пчёл всего можно ждать. Разве знаешь, что придёт в голову этим пчёлам... © Картоделы, админы серверов и разрабы игры о вирпилах |
|
![]() |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|