Вниз  OwnLang
- 12.12.2019 / 21:20
vl@volk
  Пользователь

vl@volk 
Сейчас: Offline
aNNiMON, а если онли с GPlay ставил, всё норм работать будя?
__________________
 знает толк
- 13.12.2019 / 00:42
Alexandr
  Пользователь

Alexandr 
Сейчас: Offline
Почему, время от времени оно вылетает с такой ошибкой? :gg:
https://annimon.com/forum/file22148/Screenshot_20191213-003052~01.png
Открыть спойлер



Прикрепленные файлы:
Screenshot_2019(…).png (87.62 кб.) Скачано 444 раза
- 13.12.2019 / 14:07
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Alexandr, ошибка где-то при обращении к массиву b на одной из строчек 75, 76, 78, 82 или 83.
Предполагаю, это из-за того, что на 99 строке ссылка на массив b обновляется в тот самый момент, когда в потоке интерпретатора (а touch выполняется в ui-потоке) происходит обращение к элементам массива.
Похоже, что нужно вводить блокировку на уровне языка.

:ps: С arraySplice разберись чуток, там не так сложно. Тебе нужно вырезать только один i-ый/j-ый элемент, а пытаешься вырезать i/j таких. Из-за этого при "съедании" старого элемента у тебя пропадают все созданные после него.
__________________
 let live

Изменено aNNiMON (13.12 / 14:10) (всего 3 раза)
- 13.12.2019 / 14:36
Alexandr
  Пользователь

Alexandr 
Сейчас: Offline
aNNiMON, Тебе нужно вырезать только один i-ый/j-ый элемент, а пытаешься вырезать i/j такихТогда для удаления одного элемента, нужно arraySplice(array, start, 1)?
Прост думал что второй и третий параметры это start и end.
- 13.12.2019 / 15:03
Alexandr
  Пользователь

Alexandr 
Сейчас: Offline
aNNiMON, Предполагаю, это из-за того, что на 99 строке ссылка на массив b обновляется в тот самый момент, когда в потоке интерпретатора (а touch выполняется в ui-потоке) происходит обращение к элементам массива.И как это можно по фиксить, здесь есть что-то подобное synchronized?
- 13.12.2019 / 15:51
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Alexandr, Пост #513873 да, arraySplice(arr, i, 1)
Пост #513874, можно попробовать три варианта.
1. Держать массив из N элементов и просто обнулять значения вместо удаления.
2. Переписать так, чтобы в момент прохода по циклам в update использовался другой массив. Таким образом, добавление новых элементов гарантированно не будет происходить в момент обновления. Но тогда нужно как-то информировать об удалении элемента.
3. Сделать отдельный массив для добавления. В onTouch будет добавляться элемент в этот массив, а потом после/перед циклами добавлять из него в массив b, а потом очищать. Получится как бы буфер добавления.

И ещё, ты можешь вынести
  1. canvas.setTextSize(25)
до цикла отрисовки. А очищать экран при помощи
  1. g.drawColor(#ff000000)

__________________
 let live

Изменено aNNiMON (13.12 / 16:14) (всего 2 раза)
- 13.12.2019 / 16:19
Alexandr
  Пользователь

Alexandr 
Сейчас: Offline
aNNiMON, ааа, благодарю!
- 13.12.2019 / 17:05
Alexandr
  Пользователь

Alexandr 
Сейчас: Offline
Вообщем, я зделат ему буффер, теперь скриптек падает реже. :gg:
Ошибки



Прикрепленные файлы:
StarSystem.own (2.22 кб.) Скачано 563 раза
- 13.12.2019 / 17:31
vl@volk
  Пользователь

vl@volk 
Сейчас: Offline
Тупа кафе, попробуй еще сделать деление на ноль в коде
__________________
 знает толк
- 13.12.2019 / 19:56
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Alexandr, ты только g используешь при отрисовке, но в update у тебя используется b, как и в touch.
Предлагаю завести массив
buffer = []
В touch добавлять не в b, а в buffer
А перед отрисовкой добавлять из буфера в b:
  1. if (!buffer.isEmpty()) {
  2.   b <<= buffer
  3.   buffer = []
  4. }

__________________
 let live

Изменено aNNiMON (13.12 / 19:59) (всего 1 раз)


Прикрепленные файлы:
x.own (1.95 кб.) Скачано 542 раза
Наверх  Всего сообщений: 600
Фильтровать сообщения
Поиск по теме
Файлы топика (60)