AMPASIDE / ANPASIDE — IDE для MIDletPascal Позавчера, 16:54 | | Helltar  Пользователь
Сейчас: Offline
Регистрация: 29.11.2011
| |
Позавчера, 17:01 | | GOAR  Пользователь
Сейчас: Offline
Имя: Николай Николаевич Откуда: Одесса, Украина Регистрация: 29.11.2014
| Helltar, одним словом дабы нормально функционировало с закругленным экраном учитывать , переменные с библиотеки screen?
|
Позавчера, 17:04 | | Helltar  Пользователь
Сейчас: Offline
Регистрация: 29.11.2011
| GOAR, да, но только для кнопок и текста у края экрана. мир рисуй как раньше, на весь экран
где у тебя кнопка прижата к краю, добавь отступ: слева screen_inset_left, сверху screen_inset_top, справа и снизу вычти screen_inset_right и screen_inset_bottom. область нажатия сдвинь так же
в J2ME Loader и на старых телефонах функции возвращают 0, так что код один для всех
|
Позавчера, 17:25 | | GOAR  Пользователь
Сейчас: Offline
Имя: Николай Николаевич Откуда: Одесса, Украина Регистрация: 29.11.2014
| Helltar, понял. глянь, может это у меня тел тупит, но бывает такой баг. Не только в твоём примере, а и эмуляторе. Будет время глянь
Изменено GOAR (позавчера, 17:25) (всего 1 раз)
Прикрепленные файлы: Screenshot_2026(…).jpg (17.58 кб.) Скачано 14 раз |
Позавчера, 17:48 | | Helltar  Пользователь
Сейчас: Offline
Регистрация: 29.11.2011
| GOAR, у себя не воспроизвел: на Pixel 9 (Android 17) и в эмуляторе на Android 9 демо запускается нормально, пробовал разные варианты (повторный запуск, выход и сразу запуск, блокировка экрана при старте)
когда и как это бывает? чтобы не гадать:
- телефон и версия android - в какой момент: первый запуск после установки, повторный, после выхода назад или сворачивания - "в эмуляторе" это запуск из ANPASIDE или J2ME Loader - если подождать или нажать на экран, появляется или так и остается пусто
|
Позавчера, 20:17 | | GOAR  Пользователь
Сейчас: Offline
Имя: Николай Николаевич Откуда: Одесса, Украина Регистрация: 29.11.2014
| redmi 7A андроид 9. Запуск в собранном апк и внутри Anpaside. J2me loader'ом не пользуюсь Скороее всего это дело в телефоне, так как заметил что когда заряд менее 20% , то очень редко но встречается такой баг. А на redmi 14, с такой же ситуацией все ок.. Так что забей  |
Вчера, 14:17 | | GOAR  Пользователь
Сейчас: Offline
Имя: Николай Николаевич Откуда: Одесса, Украина Регистрация: 29.11.2014
| Есть пару вопросов: 1) Таким образом все клавиши обрабатывать , в смысле через цикл? Елси делаю так, то привязке к джойстику управления нету, pointer_pressed_x,y не воруют курсор. Хочу оставить управление персонажа на первом пальце pointer_pressed_x,y правлень? А ломание и строительство и другое на остальные 8. // выбрать слот for i:=0 to 9 do if touch_down(i)=1 then if (touch_x(i)>=ix) and (touch_x(i)<=ix+7*s) and (touch_y(i)>=iy) and (touch_y(i)<=iy+s) then begin px:=(touch_x(i)-ix) div s; py:=(touch_y(i)-iy) div s; if (invslot>=0) and (invslot<=6) then invslot:=px+py; end; 2) // палец для тапа по миру: на экране и не на кнопке, -1 если такого нет function world_finger: integer; var i: integer; begin Result := -1; for i := 0 to 9 do if (touch_down(i) = 1) and not on_button(touch_x(i), touch_y(i)) then Result := i; end; Как я понял это обработка что если курсор попал на кнопку, верно ? Если да, куда пихать так впихивать тип так: if world_finger<>-1 then if touch(i)... ? Так? Сорян я тупой  |
Вчера, 20:08 | | Helltar  Пользователь
Сейчас: Offline
Регистрация: 29.11.2011
| GOAR, 1) не привязывай управление к номеру пальца. палец 0 это тот, что коснулся экрана первым: если сначала тапнул по миру, а потом взялся за стрелку, то нулевым будет палец на мире, и pointer_pressed_x/y поедут за ним. так что pointer_* лучше вообще убрать: - стрелки, прыжок, меч через touch_area, она видит все пальцы, неважно каким держишь - инвентарь и мир через цикл по пальцам, как у тебя в коде слота две мелочи: правая граница < ix + 7 * s, а не <=, иначе тап по самому краю даст px = 7. и проверять надо px, а не старый invslot. проще так: for i := 0 to 9 do
if touch_down(i) = 1 then
if (touch_x(i) >= ix) and (touch_x(i) < ix + 7 * s)
and (touch_y(i) >= iy) and (touch_y(i) < iy + s) then
invslot := (touch_x(i) - ix) div s;
2) да. on_button это твоя функция: попала ли точка в какую-нибудь кнопку. world_finger возвращает номер пальца, который на мире, а не на кнопке, или -1. touch(i) внутри не нужен, берешь координаты этого пальца: function in_rect(x, y, rx, ry, rw, rh: integer): boolean;
begin
Result := (x >= rx) and (x < rx + rw) and (y >= ry) and (y < ry + rh);
end;
function on_button(x, y: integer): boolean;
begin
Result := in_rect(x, y, left_x, left_y, bs, bs)
or in_rect(x, y, right_x, right_y, bs, bs)
or in_rect(x, y, jump_x, jump_y, bs, bs)
or in_rect(x, y, ix, iy, 7 * s, s);
end;
...
f := world_finger;
if f <> -1 then
begin
wx := touch_x(f); // тут ломаешь/ставишь блок
wy := touch_y(f);
end;
left_x, bs и т.д. замени на свои координаты и размер кнопок. если блок надо ставить один раз на тап, а не каждый кадр, пока палец лежит, добавь проверку touch_pressed(f) = 1 |
Вчера, 20:53 | | GOAR  Пользователь
Сейчас: Offline
Имя: Николай Николаевич Откуда: Одесса, Украина Регистрация: 29.11.2014
| Понял, принял, по чуть разбераюсь. С <=ix+7*s ты прав, если постараться то можно вылезти за рамку, и invslot даст ид не существующей ячейки . Спасибо, уже и справил  |
Сегодня, 07:11 | | GOAR  Пользователь
Сейчас: Offline
Имя: Николай Николаевич Откуда: Одесса, Украина Регистрация: 29.11.2014
| Helltar, Реально реализовать такую функцию по типу ' Действие если закрыли/свернули или вышли из игры/программы ', то выполняем код: SaveGame; Фича не помешала бы , так допустим срочно надо свернуть игру, потом заходишь, а у тебя всё сохранено. Если сможешь реализовать, то лишним не будет  |
 Всего сообщений: 623 Фильтровать сообщения
Поиск по теме
Файлы топика (26)
|