Вниз  AMPASIDE / ANPASIDE — IDE для MIDletPascal
- Позавчера, 16:54
Helltar
  Пользователь

Helltar 
Сейчас: Offline
- Позавчера, 17:01
GOAR
  Пользователь

GOAR 
Сейчас: Offline
Helltar, одним словом дабы нормально функционировало с закругленным экраном учитывать , переменные с библиотеки screen?
- Позавчера, 17:04
Helltar
  Пользователь

Helltar 
Сейчас: Offline
GOAR, да, но только для кнопок и текста у края экрана. мир рисуй как раньше, на весь экран

где у тебя кнопка прижата к краю, добавь отступ: слева screen_inset_left, сверху screen_inset_top, справа и снизу вычти screen_inset_right и screen_inset_bottom. область нажатия сдвинь так же

в J2ME Loader и на старых телефонах функции возвращают 0, так что код один для всех
- Позавчера, 17:25
GOAR
  Пользователь

GOAR 
Сейчас: Offline
Helltar, понял.
глянь, может это у меня тел тупит, но бывает такой баг.
Не только в твоём примере, а и эмуляторе.
Будет время глянь

Изменено GOAR (позавчера, 17:25) (всего 1 раз)


Прикрепленные файлы:
Screenshot_2026(…).jpg (17.58 кб.) Скачано 14 раз
- Позавчера, 17:48
Helltar
  Пользователь

Helltar 
Сейчас: Offline
GOAR, у себя не воспроизвел: на Pixel 9 (Android 17) и в эмуляторе на Android 9 демо запускается нормально, пробовал разные варианты (повторный запуск, выход и сразу запуск, блокировка экрана при старте)

когда и как это бывает? чтобы не гадать:

- телефон и версия android
- в какой момент: первый запуск после установки, повторный, после выхода назад или сворачивания
- "в эмуляторе" это запуск из ANPASIDE или J2ME Loader
- если подождать или нажать на экран, появляется или так и остается пусто
- Позавчера, 20:17
GOAR
  Пользователь

GOAR 
Сейчас: Offline
redmi 7A андроид 9.
Запуск в собранном апк и внутри Anpaside.
J2me loader'ом не пользуюсь


Скороее всего это дело в телефоне, так как заметил что когда заряд менее 20% , то очень редко но встречается такой баг.

А на redmi 14, с такой же ситуацией все ок..
Так что забей :gg:
- Вчера, 14:17
GOAR
  Пользователь

GOAR 
Сейчас: Offline
Есть пару вопросов:

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)... ? Так? Сорян я тупой :gg:
- Вчера, 20:08
Helltar
  Пользователь

Helltar 
Сейчас: Offline
GOAR,

1) не привязывай управление к номеру пальца. палец 0 это тот, что коснулся экрана первым: если сначала тапнул по миру, а потом взялся за стрелку, то нулевым будет палец на мире, и pointer_pressed_x/y поедут за ним. так что pointer_* лучше вообще убрать:

- стрелки, прыжок, меч через touch_area, она видит все пальцы, неважно каким держишь
- инвентарь и мир через цикл по пальцам, как у тебя

в коде слота две мелочи: правая граница < ix + 7 * s, а не <=, иначе тап по самому краю даст px = 7. и проверять надо px, а не старый invslot. проще так:

  1. for i := 0 to 9 do
  2.   if touch_down(i) = 1 then
  3.     if (touch_x(i) >= ix) and (touch_x(i) < ix + 7 * s)
  4.       and (touch_y(i) >= iy) and (touch_y(i) < iy + s) then
  5.       invslot := (touch_x(i) - ix) div s;

2) да. on_button это твоя функция: попала ли точка в какую-нибудь кнопку. world_finger возвращает номер пальца, который на мире, а не на кнопке, или -1. touch(i) внутри не нужен, берешь координаты этого пальца:

  1. function in_rect(x, y, rx, ry, rw, rh: integer): boolean;
  2. begin
  3.   Result := (x >= rx) and (x < rx + rw) and (y >= ry) and (y < ry + rh);
  4. end;
  5.  
  6. function on_button(x, y: integer): boolean;
  7. begin
  8.   Result := in_rect(x, y, left_x, left_y, bs, bs)
  9.     or in_rect(x, y, right_x, right_y, bs, bs)
  10.     or in_rect(x, y, jump_x, jump_y, bs, bs)
  11.     or in_rect(x, y, ix, iy, 7 * s, s);
  12. end;
  13.  
  14. ...
  15. f := world_finger;
  16.  
  17. if f <> -1 then
  18. begin
  19.   wx := touch_x(f); // тут ломаешь/ставишь блок
  20.   wy := touch_y(f);
  21. end;

left_x, bs и т.д. замени на свои координаты и размер кнопок. если блок надо ставить один раз на тап, а не каждый кадр, пока палец лежит, добавь проверку touch_pressed(f) = 1
- Вчера, 20:53
GOAR
  Пользователь

GOAR 
Сейчас: Offline
Понял, принял, по чуть разбераюсь.
С <=ix+7*s ты прав, если постараться то можно вылезти за рамку, и invslot даст ид не существующей ячейки . Спасибо, уже и справил :)
- Сегодня, 07:11
GOAR
  Пользователь

GOAR 
Сейчас: Offline
Helltar, Реально реализовать такую функцию по типу ' Действие если закрыли/свернули или вышли из игры/программы ', то выполняем код: SaveGame;

Фича не помешала бы , так допустим срочно надо свернуть игру, потом заходишь, а у тебя всё сохранено.
Если сможешь реализовать, то лишним не будет :)
Наверх  Всего сообщений: 623
Фильтровать сообщения
Поиск по теме
Файлы топика (26)