AviaSkins.Forums

Вернуться   AviaSkins.Forums > Основные разделы > Моделирование и конструирование

Важная информация

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2019, 11:36   #1
NB79
Местный
 
Регистрация: 12.07.2015
Сообщений: 417
По умолчанию

Для лучшего понимания нужно ознакомится с базовыми принципами Объектно-Ориентированного Программирования, оно же - ООП.

Вкратце. У вас есть базовые классы. Они описывают общую логику и базовые принципы построения некоего объекта. Это нечто общее, что объединяет всю цепочку описываемых вами объектов, событий, действий и т.д., и т.п.

Далее, вы создаёте классы-наследники, в которых описываете индивидуальные особенности тех, либо иных объектов.

Например. Базовый класс - мебель. Наследники - стол, стул, шкаф. Базовые свойства (properties) - предназначены для обслуживания потребностей человека в быту. Индивидуальные свойства - стол для приёма пищи, работы и т.д. (можно написать несколько наследников для стола раскрывающих их сущность). Стул - сидеть на нём. Шкаф - хранить барахло.

Свойства у нас тоже бывают разные. Публичные, видимые всем из всех классов. Приватные, видимые только внутри класса. Классовые, специфичные для класса. Виртуальные, Абстрактные и т.д. Задача всего этого многообразия так описать объект, чтоб обеспечить безопасность его функционирования и всю полноту управления им упростив доступ к свойствам и прочему повышая уровень абстракции. Примерно так, на примере: базовый класс - человек, у него куча методов и свойств, но наружу мы выводим только один метод (делаем его публичным), способность ходить. В результате все наследники Человека у нас ходят, но вся механика хождения скрыта в базовом классе. И если мы изменим механику в базовом классе, то у нас автоматом эти изменения отразятся на поведении наследников. Код наследников, при этом, будет осень простым и будет описывать только то, что свойственно только ему. Очень удобно при правильном использовании.

Представление о том, как нужно рассматривать ООП код быстро поставит всё на место и позволит ПРАВИЛЬНО его писАть. А частности, характерные для того, либо иного языка, это уже вторично, это особенности реализации общих подходов к объединяющей концепции.

Это очень-очень кратко, даже не по верхам, исключительно для привлечение внимания к тому, что надо изучить основы, это сэкономит прорву времени.
NB79 вне форума   Ответить с цитированием
Старый 30.03.2019, 14:17   #2
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
По умолчанию

Спасибо, для меня ява, это как английский, я его не знаю и очень не люблю. Но знать его надо...
tvister вне форума   Ответить с цитированием
Старый 30.03.2019, 19:19   #3
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
По умолчанию

При ближайшем изучении модели и кода Ки-36 от САС, я обнаружил, что посадочный крюк и лепестки юбки мотора были сохранены в коде, а в модели созданы безматериальными мешами. Что то вроде картинки с сусликом. Лепестки в модели представлены точками-единичными вершинами. Попробовал удалить фрагменты кода с крюком
PHP код:
    }
    
    public 
void moveArrestorHook(float f) {
    
hierMesh().chunkSetAngles("Hook1_D0"0.0F60.0F f0.0F);
    
arrestor f
Удалил, код компилируется в класс нормально. Часть кода в которой упоминаются лепестки юбки мотора, оставил, а модель сделаю по образцу САС-овской. Как то надо регулировать тепловой режим мотора.
В дочернем классе Ки-36 изменил часть кода с названием самолета и путь к ФМ.
PHP код:
 static {
    Class 
var_class = (class$com$maddox$il2$objects$air$Ki_36 == null
               
? (class$com$maddox$il2$objects$air$Ki_36
                  
= class$("com.maddox.il2.objects.air.Ki_36"))
               : class
$com$maddox$il2$objects$air$Ki_36);
    new 
NetAircraft.SPAWN(var_class);
    
Property.set(var_class"iconFar_shortClassName""Ida");
    
Property.set(var_class"meshName""3DO/Plane/Ki36/hier.him");
    
Property.set(var_class"PaintScheme", new PaintSchemeBMPar00());
    
Property.set(var_class"yearService"1938.0F);
    
Property.set(var_class"yearExpired"1946.5F);
        
Property.set(var_class"FlightModel",
             
"FlightModels/KI-36-NEW.fmd:Ki36_FM");
    
Property.set(var_class"cockpitClass",
             ((Object) 
Все по образцу и подобию САС-овских классов.
К готовым классам добавил класс кокпита (класса бомбардира нет в принципе) захешировал и бросил их в папку с моделью, попробовал запустить игру. В итоге вылет на 20%. В логе ругань на отсутствие класса бомбардирского кокпита.

Тo be continued...
tvister вне форума   Ответить с цитированием
Старый 30.03.2019, 20:58   #4
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
По умолчанию

Удалил все строки где упоминается кокпит бомбардира-пулеметчика. В дочернем классе Ки-36 есть два таких фрагмента.

PHP код:
    /*synthetic*/ static Class class$com$maddox$il2$objects$air$CockpitKi_36_Bombardier;
    
/*synthetic*/ static Class class$com$maddox$il2$objects$air$CockpitKi_36_TGunner

PHP код:
        ((class$com$maddox$il2$objects$air$CockpitKi_36_Bombardier
          
== null)
         ? (class
$com$maddox$il2$objects$air$CockpitKi_36_Bombardier
            
= (class$
               (
"com.maddox.il2.objects.air.CockpitKi_36_Bombardier")))
         : class
$com$maddox$il2$objects$air$CockpitKi_36_Bombardier),
        (class
$com$maddox$il2$objects$air$CockpitKi_36_TGunner == null
         
? (class$com$maddox$il2$objects$air$CockpitKi_36_TGunner
            
= class$("com.maddox.il2.objects.air.CockpitKi_36_TGunner"))
         : class
$com$maddox$il2$objects$air$CockpitKi_36_TGunner) })); 
заменив последний блок на родные САС-овские строки
PHP код:
    Property.set(var_class"cockpitClass",
             new Class[] { 
CockpitKi_36.class }); 
В итоге код перестал компилироваться.
Пробовал так и эдак, но все без толку.
В итоге выдрал кусок кода с кокпитом из файла Ки-27КО. И переименовав все названия самолета на Ки-36 воткнул на место САС-овской строки. Вот как получилось.
PHP код:
    Property.set
        
(var_class"cockpitClass",
         ((Object)
          (class
$com$maddox$il2$objects$air$CockpitKi_36 == null
           
? (class$com$maddox$il2$objects$air$CockpitKi_36
          
= class$("com.maddox.il2.objects.air.CockpitKi_36"))
           : class
$com$maddox$il2$objects$air$CockpitKi_36))); 
Теперь игра запускается, запускаются даже миссии, но самолета в них нет. Он виден в окне полного редактора с почему то исчезающим рулем высоты.
Особо не переживаю с учетом того, что классы от разных моделей и что то я мог пропустить. А наш друг и помощник Log так и рапортует:
PHP код:
ERROR fileFile users/doe/Icons not found
Mission
QuickQMBPro/NWEurope/NWEuropeBlueNone00.mis is Playing
INTERNAL ERROR
HierMeshCan't find chunk 'WindowL1_D0'
INTERNAL ERROR: HierMesh: Can'
t find chunk 'WindowR1_D0'
Time overflow (0): speed 0.53097343
warning
no files music/inflight
INTERNAL ERROR
Str2FloatClamp() - Clamped 4096 -> 512 (delta = -3584to Range 1..512
-------------------------------- MISSION FAILED ---------------------
INTERNAL ERRORHierMeshCan't find chunk 'WindowL1_D0'
INTERNAL ERROR: HierMesh: Can'
t find chunk 'WindowR1_D0'
warningno files music/crash
WARNING
Clear VBuf 174961
WARNING
Clear IBuf 654888
WARNING
Clear VBuf 162728
WARNING
Clear IBuf 654798
WARNING
Clear VBuf 162728
WARNING
Clear IBuf 654798
WARNING
Clear VBuf 162728
WARNING
Clear IBuf 654798
WARNING
Clear VBuf 162788
WARNING
Clear IBuf 654798
WARNING
Clear VBuf 162586
WARNING
Clear IBuf 654798
WARNING
Clear VBuf 162698
WARNING
Clear IBuf 654798
WARNING
Clear VBuf 162728
WARNING
Clear IBuf 654798
WARNING
Clear VBuf 162806
WARNING
Clear IBuf 654798
WARNING
Clear VBuf 162728
WARNING
Clear IBuf 654798
[30.03.2019 17:27:10] -------------- END log session ------------- 
Роем дальше!
tvister вне форума   Ответить с цитированием
Старый 30.03.2019, 21:16   #5
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
По умолчанию

Становится интереснее. Дело в том, что ни в коде, ни в модели, нет имен WindowL1_D0 , WindowR1_D0.
Что то я пропустил...
tvister вне форума   Ответить с цитированием
Старый 30.03.2019, 21:24   #6
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
По умолчанию

Вроде как лекарство... https://www.sas1946.com/main/index.p...c,51123.0.html
Разбираемся ...
tvister вне форума   Ответить с цитированием
Старый 30.03.2019, 22:27   #7
tvister
Местный
 
Аватар для tvister
 
Регистрация: 26.12.2013
Адрес: Донецьк Україна
Сообщений: 1,848
По умолчанию

Чудеса встречаются... Ничего не делал, все нормализовалось само собой. Лог чистый, но модели в простом редакторе нет. С учетом недоведенного вооружения и в целом не законченной 3д модели, результат вполне предсказуем. Попробую добавить хуки.
tvister вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 03:51. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
Рейтинг@Mail.ru