Вниз  KEmulator, модификация интерфейса.
- 12.07.2019 / 13:18
sasa961
  Пользователь

sasa961 
Сейчас: Offline
Проверил на других эмуляторах: есть результат.
1) да, игра реализована так, что герой поднимается с положения сидя после первого выстрела и так же когда прыгаешь, он прекращает прыгать после выстрелов. Тут это реализовано на уровне классов, надо редактировать игру.
2) в KEmulator-e таки есть ошибка, после смены нажатия кнопки, какой то флаг не дает их использовать снова. Без дебаггера этот флаг придется искать долго.
- 12.07.2019 / 14:36
sasa961
  Пользователь

sasa961 
Сейчас: Offline
Ошибку понял: между адаптером и вводом в программу есть неподнятый один флаг.
Признак:
1) Нажимаю и держу кнопку вверх(2), происходит событие прыжка, оно зациклено.
2) Не отпуская кнопку вверх(2), нажимаю огонь(5), персонаж производит выстрелы в прыжке.
3) Игра сбрасывает функцию прыжка, персонаж приземляется на землю. Я отпускаю кнопку огня(5). Персонаж стоит и ничего не делает, хоть до сих пор нажата кнопка прыжка(2).
4) Отпускаю кнопку прыжка(2), персонаж ничего не делает.
5) Снова нажимаю на кнопку прыжка(2), персонаж ничего не делает.
6) Отпускаю кнопку, персонаж ничего не делает.
7) Снова нажимаю на кнопку прыжка(2), персонаж снова переход в событие прыжка.

Пока писал, понял, что скорее всего флаг поднимается после события keyReleased(), а из-за того, что я не отпустил кнопку и нажал на другую, событие не происходит и флаг не меняет значение. Ошибка допущена на на первичном уровне, так как переменная отвечающая за текущую клавишу не меняет значение, а значит, какой то true||false не дает выполнить событие.

При чем это касается кнопки Огонь(5) или центр Джойстика. По крайней мере, такого поведения из-за кнопок направления я не заметил. Пока еще проверяю код.

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

UPD:: Нет, таки это все касается всех кнопок. При направлениях происходит так само.

Изменено sasa961 (12.07 / 14:47) (всего 2 раза)
- 12.07.2019 / 15:17
sasa961
  Пользователь

sasa961 
Сейчас: Offline
Нашел о чем говорил, по поведению и по сигнатуре это должно быть оно.
  1. org.eclipse.swt.widgets.Event.class
тут обьявлена переменная
  1. public boolean doit = true;
тут же рядом есть ее поведение
  1. ...
  2.    break;
  3.       case 2:
  4.         keyEvent = new KeyEvent(paramEvent);
  5.         ((KeyListener)this.eventListener).keyReleased(keyEvent);
  6.         paramEvent.doit = keyEvent.doit;
  7.         break;
  8.       case 24:
  9. ...

Как мы видим, переменная изменяется, только после события keyReleased().

Ну...хоть я и нашел это, но пока не знаю, что с этим делать.

Есть идеи? Подскажите, буду двигать дальше.
- 12.07.2019 / 16:35
sasa961
  Пользователь

sasa961 
Сейчас: Offline
Увы, без правильного Debug-ера, я не отковыряю этот момент.
- 12.07.2019 / 16:40
HoldFast
  Пользователь

HoldFast 
Сейчас: Offline
Сиди да ковыряй, чо по каждому пуку мессаги строчить
__________________
 Да, детка, я - Король Ящериц!!!
- 12.07.2019 / 18:12
vl@volk
  Пользователь

vl@volk 
Сейчас: Offline
HoldFast, пусть, складно пишет, читать интересно
__________________
 знает толк
- 12.07.2019 / 19:20
sasa961
  Пользователь

sasa961 
Сейчас: Offline
vl@volk, был бы сорс, не пришлось бы заходить кто знает с какой стороны и заниматься камасутрой) тут даже шаман с бубном сам не справится.
- 12.07.2019 / 20:21
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Online
sasa961, не думаю, что в org.eclipse.swt.widgets вообще стоит лезть. Ещё раз повторюсь, SWT это библиотека, по ней есть документация, исходный код открытый.
Вот этот boolean doit, а вот тот самый код, где он изменяется, узнаёте?
__________________
 let live
- 7.10.2019 / 05:56
sasa961
  Пользователь

sasa961 
Сейчас: Offline
aNNiMON, в общем: вернулся я к этому делу) маленько подучил некоторую информацию по J2ME и исправил ошибку разработчиков игры.(ну может это была и не ошибка, но явная недоработка добавляющая хардкор игре). Через luyten-0.5.4 смог прочитать поведение кода и нашел функцию, которая сбрасывала все состояния кнопок. Как мы помним за кнопки управления отвечает класс наследующий Canvas, где и запрятаны нужные функции-события для нажатых кнопок: keyPressed и keyReleased.
keyPressed: //срабатывает, когда какая-то из кнопок нажимается(в нашем случае задает состояния обьекта)
Открыть спойлер
keyReleased://задается при отпускании кнопки
Открыть спойлер
Вот тут я и насторожился, что опускается любая из кнопок а функция на всех одна и не особо был удивлен когда увидел это:
Открыть спойлер
немного поискав декомпиляторов, я понял, что изменить class на уровне того что я вижу, никак нельзя - class-файл это бинарный файл и в него никак не запихнуть элементарное if else т.е. декомпилятор можн использовать как средство чтения и мониторинга изменений в нем. В долгих поисках байт редакторов, перебрав пару десятков то ли с кривым интерфейсом, то ли с некорректной функциональностью, я смог найти парочку что бы реализовать, хоть какие то изменения. Открыв файл в байткод виде, я смог изучить поведение и значения команд
Открыть спойлер
Использовав байт-редактор recaf-1.15.8.jar(просто офигенный байт-редактор) я смог удалить ненужные строки и добавить свои. При чем class-файл не пришлось даже с архива извлекать. И вот что я сделал:
Открыть спойлер
и вуаля: состояние снимается тогда и только тогда, когда соответствующая кнопка будет отпущена. Игра стала в разы комфортнее) Прикрепляю ее сюда.

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

Благодарю тебя за начальную помощь. Условно говоря: ты действительно сделал все за меня. Сейчас я задумался над тем, что на ПК на тек момент ни одного годного эмулятора J2ME, так как даже KEmulator надо жестко проредактировать в плане как интерфейса так и функций, так бы можно было использовать с открытым кодом MicroEmulator в котором помимо интерфейсных недоработок, еще надо бы прикрутить поддержку JSR-184 и хотелось бы попытаться сделать, то что пока никому не было доступно: сделать легендарный MascotCapsule 3D, тот самый который доступен только SonyEricsson-ам и то не всем) Ну в общем: у меня все. Будет что интересное поделюсь.


Прикрепленные файлы:
Bravian_Lands_0(…).jar (147.64 кб.) Скачано 208 раз
- 7.10.2019 / 06:03
sasa961
  Пользователь

sasa961 
Сейчас: Offline
Ну а сейчас нужно хотя бы научиться запускать элементарный J2ME проект в Eclipse) в конце 2019 года))
А для того что бы использовать сорсы с гит нужно понять вообще как все работает. Так как я в этом нуб, а Eclipse это тебе не VisualStudio где даже не не нужно знать что и как работает.
Буду рад, если научите пользоваться этой средой)

________________________
Мир сошел с ума, - я с ним.(с)
Наверх  Всего сообщений: 42
Фильтровать сообщения
Поиск по теме
Файлы топика (18)