AviaSkins.Forums

AviaSkins.Forums (http://forum.aviaskins.com/index.php)
-   Моделирование и конструирование (http://forum.aviaskins.com/forumdisplay.php?f=18)
-   -   Несколько вопросов по Java (http://forum.aviaskins.com/showthread.php?t=3499)

Vasya 27.05.2018 11:45

Пояснение по настройке ресурсов для работы с классами
 
Цитата:

Сообщение от tvister (Сообщение 177859)
Эта метода и помогла. Врагом оказался архиватор ВИНРАР. При архивации папки com, нужно выбирать архивацию "без сжатия". Таким образом на Вин7 и семерке ява получил классы. Правда рабочие ли, не знаю, завтра буду пробовать. Тройке на вин 10 такое лекарство не помогло. Завтра попробую поставить седьмую яву на десятку.



Спасибо Вам, правильное слово вовремя сказанное очень помогает :beer:.

Я, конечно, рад что получилось.
Не пойму только зачем архивировать папку сом.
Она у меня в открытом виде; в открытом - это не в декомпиллированом, а просто все классы требуемого патча лежат на своих местах.
В подпапке - допустим - D:\Lab_4.13.4\com\maddox\il2\objects\ships я декомпиллирую класс и полученный джава-файл исправляю от ошибок декомпилятора и пробую закомпиллить; потом правлю под то, что мне нужно, закрываю и снова пробую закомпиллить созданным под этот класс батником. Если всё получается - то переношу полученные классы в другую рабочую папку( !_MakeMOD_412_ или Il2_RESOLVER) для хеширования.
И никакой мороки с архиваторами и другой лабутени типа Еклипса.
То есть:
1 - в переменные среды прописана основная джава 6 (для ХР);
2 - на дисках С и Д просто лежат джавы 1.3.1_20 и 1.3.1_01;
3 - в папке Lab_4.13.4 лежит среда патча сом с классами; так же там лежат нужные батники;
4 - в папке Il2_RESOLVER лежат подпапки RESOLV и HESH; так же - нужные батники(две штуки) и папка jar с джарами classresolver.jar и classhasher.jar.
Всё.
Все папки в открытом виде и после перепрописки
в батниках названия диска(С. Д, или Е) могут быть перемещаемы по всему компу для удобства.
Такие дела.

tvister 27.05.2018 17:20

Все вопросы к камраду Slon. Сделанная по его инструкциям машинко, работает, это самое для меня важное (пока что). Однако она не идеальна, некоторые файлы не компилируются и это очень меня подвело в работе с прожекторами. По этому Ваши рекомендации взяты на изготовку, еще "Иду" заканчивать, на горизонте авианосец и прожектора очень хочется закончить.

Vasya 27.05.2018 22:35

Цитата:

Сообщение от tvister (Сообщение 177871)
Все вопросы к камраду Slon. Сделанная по его инструкциям машинко, работает, это самое для меня важное (пока что). Однако она не идеальна, некоторые файлы не компилируются и это очень меня подвело в работе с прожекторами. По этому Ваши рекомендации взяты на изготовку, еще "Иду" заканчивать, на горизонте авианосец и прожектора очень хочется закончить.

УДАЧИ!
https://img12.postila.ru/resize?w=55...0e298e36b5.gif

tvister 28.05.2018 00:09

Спасибо, она всем нам очень пригодится.

Vasya 28.05.2018 20:09

Цитата:

Сообщение от tvister (Сообщение 177873)
Спасибо, она всем нам очень пригодится.

Забыл сказать:
компиллить джава-файл в класс ОЧЕНЬ желательно в среде недекомпиллированных классов.
Возле джава-файла, который в "работе" могут присуствовать несколько (5-20) штук джава-файлов, но которые ГАРАНТИРОВАНО компиллятся и их классы идентичны исходникам.
Ни в коем случае нельзя держать открытые джава-файлы основных управляющих классов типа Мотор, Енжин или Дженерик Шипс.
Такие мои наблюдения.

tvister 28.05.2018 23:11

Спасибо. Камрад Slon об этом тоже говорит, так и делаю.

Sita. 04.06.2018 14:04

это надо в спец раздел по ФМ выносить ... такие данные то.

tvister 29.03.2019 22:57

Доброго времени суток.
Пробую создать класс для Ки-36 "Ида", на основе Д3А "Вэл". Для этого все меши созданной модели Ки-36 проименовал как в Д3А1. Постараюсь описать процесс занудно-подробно, может кому то пригодится. Все желающие приглашаются к обсуждению.
Открыл классы Д3А1, скомпилировались два файла материнский Д3А и дочерний Д3А1. Классы Ки-36 тоже открылись образовав три файла, материнский Ки-36Х и дочерние Ки-36 и Ки-36NS.
Класс Ки-36NS пока удалил, позже изменю и перепишу его как Ки-55. Класс Д3А переписал, заменив в названии и содержимом файла на Ки-36М (материнский).
У "Вел" и "Иды" имеются важные различия в работе подвижных частей:
1. У Вел одна сдвижная часть блистера, у Иды три, причем первая и вторая части движутся разно направленно (на встречу друг дружке).
2. Вел, самолет авианосного базирования, у него складываются законцовки крыльев и есть посадочный крюк-гак. У Иды ничего этого нет.
3. Вел - пикирующий бомбардировщик, у него в отличии от Иды есть воздушные тормоза.
4. У Иды створки радиатора не регулирующиеся, у Вел для регулирования охлаждающего потока воздуха есть "юбка".
5. У Иды, стрелок-наблюдатель должен в обычном полете находиться лицом вперед, в боевой обстановке разворачиваться, и открывать блистер.
6. Есть вопросы по прочности планера Иды, есть моменты по вооружению.
Постараемся все эти вопросы решить.
Для наглядности буду приводить фрагменты кода.

tvister 30.03.2019 01:40

Все, что написано далее, это предположения.
Больше всего, меня почему то тревожат различия в устройстве сдвижных частей фонаря.
В материнском файле Д3А нет упоминания о меше Blister1_D0 но такой фрагмент есть в дочернем файле Д3А1.

PHP код:

   }
    
    public 
void moveCockpitDoor(float f) {
    
resetYPRmodifier();
    
xyz[1] = cvt(f0.01F0.99F0.0F0.44F);
    
hierMesh().chunkSetLocate("Blister1_D0"xyzypr);
    if (
Config.isUSE_RENDER()) {
        if (
Main3D.cur3D().cockpits != null
        
&& Main3D.cur3D().cockpits[0] != null)
        
Main3D.cur3D().cockpits[0].onDoorMoved(f);
        
setDoorSnd(f);
    } 

Заменим его на код извлеченный из материнского Ки-36Х
PHP код:

    }
    
    public 
void moveCockpitDoor(float f) {
    
this.resetYPRmodifier();
    
Aircraft.xyz[1] = Aircraft.cvt(f0.01F0.99F0.0F0.55F);
    
this.hierMesh().chunkSetLocate("Blister1_D0"Aircraft.xyz,
                       
Aircraft.ypr);
    
Aircraft.xyz[1] = Aircraft.cvt(f0.01F0.99F0.0F0.55F);
    
this.hierMesh().chunkSetLocate("Blister2_D0"Aircraft.xyz,
                       
Aircraft.ypr);
    
Aircraft.xyz[1] = Aircraft.cvt(f0.01F0.99F0.0F0.9F);
    
this.hierMesh().chunkSetLocate("Blister3_D0"Aircraft.xyz,
                       
Aircraft.ypr);
    } 

Пробую скомпилировать класс-файлы - получилось.
Не знаю, будет ли это работать, но мне не ясно как поймут меши куда и на сколько им двигаться.
Продолжение следует.

tvister 30.03.2019 01:49

Удалим вот этот фрагмент с мешами Brake01_D0 и Brake02_D0. Это воздушные тормоза.

PHP код:

    protected void moveAirBrake(float f) {
    
hierMesh().chunkSetAngles("Brake01_D0"0.0F, -90.0F f0.0F);
    
hierMesh().chunkSetAngles("Brake02_D0"0.0F90.0F f0.0F);
    } 

Пробуем скомпилировать классы, классы создаются.

tarakan67 30.03.2019 07:49

Цитата:

Сообщение от tvister (Сообщение 192066)
Не знаю, будет ли это работать, но мне не ясно как поймут меши куда и на сколько им двигаться.
Продолжение следует.

Все три меша будут двигаться как одно целое.
P.S Прошу прощения, первые два меша будут двигаться одинаково, третий будет двигаться в ту же сторону но конечные координаты его будут отличаться от координат первых двух, я так думаю

tvister 30.03.2019 09:00

Посмотрим на практике. Пока самолет с именами Ки-36 (Д3А1) появляется только в окне просмотра полного редактора. Что вполне логично, классы мы только начали править.
Столкнулся с таинственным словом "пропертис". Что это такое, зачем они? Если я правильно понял, пропертисы находятся в этой части кода.
Для материнских файлов:
Ки-36Х
PHP код:

package com.maddox.il2.objects.air;
import com.maddox.JGP.Point3d;
import com.maddox.il2.ai.Shot;
import com.maddox.il2.ai.World;
import com.maddox.il2.engine.Actor;
import com.maddox.il2.engine.Eff3DActor;
import com.maddox.il2.engine.HierMesh;
import com.maddox.rts.Property

Д3А
PHP код:

package com.maddox.il2.objects.air;
import java.io.IOException;

import com.maddox.JGP.Point3d;
import com.maddox.il2.ai.Shot;
import com.maddox.il2.ai.World;
import com.maddox.il2.engine.Eff3DActor;
import com.maddox.rts.NetMsgGuaranted;
import com.maddox.rts.NetMsgInput;
import com.maddox.rts.Property

Если присмотреться, можно заметить, что они разные.

tvister 30.03.2019 09:23

Вложений: 4
Исправил ошибку, класс не Д3А2 а Д3А1. Вот основные, исходные коды, где Ки_36-САС, код модели от САС.

NB79 30.03.2019 11:36

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

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

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

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

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

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

Это очень-очень кратко, даже не по верхам, исключительно для привлечение внимания к тому, что надо изучить основы, это сэкономит прорву времени. :)

tvister 30.03.2019 14:17

Спасибо, для меня ява, это как английский, я его не знаю и очень не люблю. Но знать его надо...:I'm_thinking:

tvister 30.03.2019 19:19

При ближайшем изучении модели и кода Ки-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

Удалил все строки где упоминается кокпит бомбардира-пулеметчика. В дочернем классе Ки-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))); 

Теперь игра запускается, запускаются даже миссии, но самолета в них нет. Он виден в окне полного редактора с почему то исчезающим рулем высоты.:I'm_thinking:
Особо не переживаю с учетом того, что классы от разных моделей и что то я мог пропустить. А наш друг и помощник 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

Становится интереснее. Дело в том, что ни в коде, ни в модели, нет имен WindowL1_D0 , WindowR1_D0.
Что то я пропустил...:I'm_thinking:

tvister 30.03.2019 21:24

Вроде как лекарство... https://www.sas1946.com/main/index.p...c,51123.0.html
Разбираемся ...

tvister 30.03.2019 22:27

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


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

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot