|
|
|||||||
| Регистрация | Справка | Пользователи | Социальные группы | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
|
#1 |
|
Местный
Регистрация: 12.07.2015
Сообщений: 417
|
Для лучшего понимания нужно ознакомится с базовыми принципами Объектно-Ориентированного Программирования, оно же - ООП.
Вкратце. У вас есть базовые классы. Они описывают общую логику и базовые принципы построения некоего объекта. Это нечто общее, что объединяет всю цепочку описываемых вами объектов, событий, действий и т.д., и т.п. Далее, вы создаёте классы-наследники, в которых описываете индивидуальные особенности тех, либо иных объектов. Например. Базовый класс - мебель. Наследники - стол, стул, шкаф. Базовые свойства (properties) - предназначены для обслуживания потребностей человека в быту. Индивидуальные свойства - стол для приёма пищи, работы и т.д. (можно написать несколько наследников для стола раскрывающих их сущность). Стул - сидеть на нём. Шкаф - хранить барахло. Свойства у нас тоже бывают разные. Публичные, видимые всем из всех классов. Приватные, видимые только внутри класса. Классовые, специфичные для класса. Виртуальные, Абстрактные и т.д. Задача всего этого многообразия так описать объект, чтоб обеспечить безопасность его функционирования и всю полноту управления им упростив доступ к свойствам и прочему повышая уровень абстракции. Примерно так, на примере: базовый класс - человек, у него куча методов и свойств, но наружу мы выводим только один метод (делаем его публичным), способность ходить. В результате все наследники Человека у нас ходят, но вся механика хождения скрыта в базовом классе. И если мы изменим механику в базовом классе, то у нас автоматом эти изменения отразятся на поведении наследников. Код наследников, при этом, будет осень простым и будет описывать только то, что свойственно только ему. Очень удобно при правильном использовании. Представление о том, как нужно рассматривать ООП код быстро поставит всё на место и позволит ПРАВИЛЬНО его писАть. А частности, характерные для того, либо иного языка, это уже вторично, это особенности реализации общих подходов к объединяющей концепции. Это очень-очень кратко, даже не по верхам, исключительно для привлечение внимания к тому, что надо изучить основы, это сэкономит прорву времени.
|
|
|
|
|
|
#2 |
|
Местный
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
|
Спасибо, для меня ява, это как английский, я его не знаю и очень не люблю. Но знать его надо...
|
|
|
|
|
|
#3 |
|
Местный
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
|
При ближайшем изучении модели и кода Ки-36 от САС, я обнаружил, что посадочный крюк и лепестки юбки мотора были сохранены в коде, а в модели созданы безматериальными мешами. Что то вроде картинки с сусликом
. Лепестки в модели представлены точками-единичными вершинами. Попробовал удалить фрагменты кода с крюком PHP код:
В дочернем классе Ки-36 изменил часть кода с названием самолета и путь к ФМ. PHP код:
К готовым классам добавил класс кокпита (класса бомбардира нет в принципе) захешировал и бросил их в папку с моделью, попробовал запустить игру. В итоге вылет на 20%. В логе ругань на отсутствие класса бомбардирского кокпита. ![]() Тo be continued... |
|
|
|
|
|
#4 |
|
Местный
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
|
Удалил все строки где упоминается кокпит бомбардира-пулеметчика. В дочернем классе Ки-36 есть два таких фрагмента.
PHP код:
PHP код:
PHP код:
Пробовал так и эдак, но все без толку. В итоге выдрал кусок кода с кокпитом из файла Ки-27КО. И переименовав все названия самолета на Ки-36 воткнул на место САС-овской строки. Вот как получилось. PHP код:
![]() Особо не переживаю с учетом того, что классы от разных моделей и что то я мог пропустить. А наш друг и помощник Log так и рапортует: PHP код:
|
|
|
|
|
|
#5 |
|
Местный
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
|
Становится интереснее. Дело в том, что ни в коде, ни в модели, нет имен WindowL1_D0 , WindowR1_D0.
Что то я пропустил...
|
|
|
|
|
|
#6 |
|
Звичайна людина на Землі
Регистрация: 06.11.2011
Адрес: Україна, м.Київ, Печерський район, вул. Кіквідзе
Сообщений: 8,363
|
Конечно хуки.
Без хуков 3До в окне простого редактора не соберётся. На нахер вар_класс. Только Property.set(class1. Я всегда исправляю, что бы Ил не сходил с ума от разночтений в коде. |
|
|
|
|
|
#7 |
|
Звичайна людина на Землі
Регистрация: 06.11.2011
Адрес: Україна, м.Київ, Печерський район, вул. Кіквідзе
Сообщений: 8,363
|
У меня большая прозьба:
нужно организовать ручное управление радиатором при автомате шага. Такой вид кода не компилится. Код:
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);
}
|
|
|
|
|
|
#8 |
|
Местный
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
|
Василий, я не специалист и у нас разные компиляторы-декомпиляторы, но постараюсь помочь.
Первое, у меня не компилировался код с двумя методами управления чем либо, створки юбки капота, или масляный радиатор, управляющие поверхности, не важно. Метод управления для данной части должен быть один. Вот как на Ки-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);
}
|
|
|
|
|
|
#9 |
|
Местный
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
|
Вот пример Ки-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);
}
|
|
|
|
|
|
#10 | |
|
Звичайна людина на Землі
Регистрация: 06.11.2011
Адрес: Україна, м.Київ, Печерський район, вул. Кіквідзе
Сообщений: 8,363
|
Цитата:
Мне не анимация нужна. Анимацию я вписывать немного умею - несколько створок заставить двигаться - не проблема. У меня другой вопрос: нужно заставить работать радиатор именно в ручном режиме., сейчас радиатор в автоматическом режиме., пропеллер тип-8(лучше - конечно - тип 7, так будет оригиналнее)., у Фоки-4-8 нет раздела анимации створок, поэтому радиатор ручной., у Фоки-9 есть в классе код анимации, поэтому шаг автоматический., для Темпеста нужно заставить кодом работать радиатор в ручном режиме при автомате винта, а они увязаны в коде в глубинах классов. Если поставить шаг винта ручной - то и радиатор будет ручной. Но.... у мотора Темпеста обороты 3700 и винт весом 225 кг. При сбросе газа самолёт переворачивается и устремляется к земле, никакие манипуляции русом не помогают, только добавление тяги до 100 проц. Это такой баг в игре - сильно большие обороты - не стандартные для Ила. В дефолте обороты снизили до 3150, что бы не было бага переворачивания самолёта. Поэтому и спрашивал тут как вписать принудительное регулирование радиатора именно кодом в классе. Есть код на тип афтербуннера - и он работает. Причём тип и название афтербуннера пишется двумя разными методами и они прекрасно уживаются в одном классе. Такие пояснения относительного моего вопроса.
Последний раз редактировалось Vasya; 15.10.2019 в 22:39. |
|
|
|
|
|
|
#11 |
|
Местный
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
|
|
|
|
|
|
|
#12 |
|
Модератор
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,892
|
тут сложный вопрос - как разделить однотипные объекты?
В общем наверно можно в КП читать параметры с объектов (например высоту и удаленность) и после сортировки их выводить на экран. то есть в RotatingRadarGeneric ты создаешь переменные public float h; public float d; эти переменные внутри класса меняются у каждого объекта по своему в классе КП private RotatingRadarGeneric rrg; и читаешь переменные из класса rrg.h rrg.d остается вопрос - как распознать чьи это переменные? наверно можно при создании объекта генерить его уникальный код и передавать так же в КП |
|
|
|
|
|
#13 |
|
Модератор
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,892
|
А если попробовать сделать так -
Сделать основной класс NewRadarGeneric, в нем создавать массив целей. Класс RotatingRadarGeneric сделать наследником NewRadarGeneric public class RotatingRadarGeneric extends NewRadarGeneric и в нем заполнять массив класс КП тоже наследник NewRadarGeneric - в нем читать массив и выдавать целеуказания. |
|
|
|
|
|
#14 |
|
Модератор
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,892
|
А если попробовать сделать так -
Сделать основной класс NewRadarGeneric, в нем создавать массив целей. Класс RotatingRadarGeneric сделать наследником NewRadarGeneric public class RotatingRadarGeneric extends NewRadarGeneric и в нем заполнять массив класс КП тоже наследник NewRadarGeneric - в нем читать массив и выдавать целеуказания. |
|
|
|
|
|
#15 |
|
Модератор
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,892
|
А наследником ActorHMesh сделать класс КП. Изменить иерархию.
|
|
|
|
|
|
#16 |
|
Модератор
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,892
|
Я бы все таки попробовал сделать по аналогии классов тех же маяков - поменять иерархию наследования.
|
|
|
|
|
|
#17 |
|
Местный
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
|
Доброго времени суток! Вопрос к знатокам...
Вот класс "Либерти", кораблик с тремя световыми эффектами которые включаются в ночное время суток. Подскажите пожалуйста как добавить еще один эффект, работающий постоянно, не зависимый от времени? Код:
/* Liberty_cargo_ship - Decompiled by JODE
* Visit http://jode.sourceforge.net/
*/
package com.maddox.il2.objects.ships;
import com.maddox.JGP.Point3d;
import com.maddox.il2.ai.World;
import com.maddox.il2.ai.ground.TgtShip;
import com.maddox.il2.engine.Eff3DActor;
import com.maddox.il2.engine.HookNamed;
import com.maddox.il2.engine.LightPointActor;
import com.maddox.il2.engine.LightPointWorld;
import com.maddox.il2.engine.Loc;
import com.maddox.rts.SectFile;
public abstract class Liberty_cargo_ship extends Ship
{
/*synthetic*/ static Class class$com$maddox$il2$objects$ships$Liberty_cargo_ship$Liberty;
public static class Liberty extends BigshipGeneric implements TgtShip
{
public LightPointActor light1;
public LightPointActor light2;
public LightPointActor light3;
public LightPointActor light4;
public LightPointActor[] lightk;
public Liberty() {
lightk = new LightPointActor[5];
}
public Liberty(String string, int i, SectFile sectfile,
String string_0_, SectFile sectfile_1_,
String string_2_) {
super(string, i, sectfile, string_0_, sectfile_1_, string_2_);
lightk = new LightPointActor[5];
Loc loc = new Loc(0.0, 0.0, 0.0, 0.0F, 0.0F, 0.0F);
Loc loc_3_ = new Loc();
Loc loc_4_ = new Loc();
Loc loc_5_ = new Loc();
Loc loc_6_ = new Loc();
Loc loc_7_ = new Loc();
if (World.getTimeofDay() >= 0.5F && World.getTimeofDay() <= 6.0F) {
for (int i_8_ = 0; i_8_ < 6; i_8_++)
Eff3DActor.New(this, findHook("_CLight" + i_8_), null,
1.0F, "3DO/Effects/Lights/FlareWhitek.eff",
-1.0F);
Eff3DActor.New(this, findHook("_GLigth"), null, 1.0F,
"3DO/Effects/Lights/FlareGreenkb.eff", -1.0F);
Eff3DActor.New(this, findHook("_RLight"), null, 1.0F,
"3DO/Effects/Lights/FlareRedkb.eff", -1.0F);
{
}
}
}
}
/*synthetic*/ static Class class$(String string) {
Class var_class;
try {
var_class = Class.forName(string);
} catch (ClassNotFoundException classnotfoundexception) {
throw new NoClassDefFoundError(classnotfoundexception
.getMessage());
}
return var_class;
}
static {
new BigshipGeneric.SPAWN
(class$com$maddox$il2$objects$ships$Liberty_cargo_ship$Liberty == null
? (class$com$maddox$il2$objects$ships$Liberty_cargo_ship$Liberty
= class$("com.maddox.il2.objects.ships.Liberty_cargo_ship$Liberty"))
: class$com$maddox$il2$objects$ships$Liberty_cargo_ship$Liberty);
}
}
|
|
|
|
|
|
#18 |
|
Местный
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
|
Еще бы хорошо, к коду в предыдущем посте, кроме постоянно работающего эффекта, добавить строки вращающегося меша. Подскажите как сделать плз.
|
|
|
|
|
|
#19 |
|
Модератор
Регистрация: 05.11.2007
Адрес: Кемеровская область
Сообщений: 7,639
|
В БАТ есть объекты сигнальные маяки, как раз вращаются, светят в две стороны
|
|
|
|
|
|
#20 |
|
Местный
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
|
Спасибо за идею, но видимо плохо ищу...
чего то не могу найти. За то вскрыл мод паровозов от wcat, с крутящимися колесами и... С явой в общем у меня проблемы. Разбираемся...
|
|
|
|
![]() |
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|