forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Глюк с массивом. (http://forum.boolean.name/showthread.php?t=14147)

Gector 31.01.2011 19:53

Глюк с массивом.
 
Если скомпилить jar файл этого кода то ошибки лог не выдаст. Но но в эмуляторе и на телефоне приложение намертво виснет. Чуть не свихнул думалку пока соображал в чем проблема. Нашел. Пришел к выводу, что прога виснет на создании массива изображений(layer1:array). Вопрос. Можно ли создать такой массив и есть ли альтернатива?

Код:

program Scarlet_Trace;
uses sensor;

var x, y, xline, yline, pointer_x, pointer_y, first_pointer_x, first_pointer_y, pointer_time, pe: integer;
    keyCode: integer;
Logo: Image;

Layer1:Array[0..9,0..5] of Image;
Layer2:Array[0..9,0..5] of Image;
Layer3:Array[0..9,0..5] of Image;
Level: integer;
procedure Controls;
begin
        If pe>0 then begin
            first_pointer_x:=pointer_pressed_x;
            first_pointer_y:=pointer_pressed_y;
            pointer_x:=pointer_dragged_x;
            pointer_y:=pointer_dragged_y;
            DrawLine(first_pointer_x,first_pointer_y,pointer_x,pointer_y);
            //DrawText('+',pointer_x,pointer_y);       
        end;
end;

begin
    sensor.init;
    Debug('=====');
  repeat
        SetColor(255, 0, 0);
    FillRect(0, 0, GetWidth, GetHeight);
    SetColor(255, 0, 0);
    keyCode:= GetKeyPressed;
        pe:=pointer_state;
        Controls;
    Repaint;
  until false;
 End.


cherepets 31.01.2011 21:50

Ответ: Глюк с массивом.
 
С картинками вродь только квадратные можно массивы (9х9 например)

Gector 31.01.2011 21:57

Ответ: Глюк с массивом.
 
Спасибо. Заработало.)
Точнее не заработало. Но теперь хоть до дебага доходит)

Igor 31.01.2011 22:47

Ответ: Глюк с массивом.
 
Если хочешь создать двухмерный неквадратный массив,
можно объявить одномерный массив переменных своего типа данных, а свой тип данных является одномерным массивом чего-нить.

Gector 31.01.2011 23:45

Ответ: Глюк с массивом.
 
Да тут уже другая проблема). Out Of Memory).

Igor 01.02.2011 00:26

Ответ: Глюк с массивом.
 
f:image;
...
f:=nil;
Вроде как экономит память.
Или сделать массив строк, в них прописать названия файлов (a:array [1..9,1..9] of string) и использовать более медленный способ.
drawimage(loadimage(a[b,c]),x,y);

cherepets 01.02.2011 00:31

Ответ: Глюк с массивом.
 
"Более медленный способ" приведет к аутОфМемори еще быстрее..

Igor 01.02.2011 00:38

Ответ: Глюк с массивом.
 
У меня хватало и по-нормальному, так я ещё не пробовал.
а почему?

cherepets 01.02.2011 00:43

Ответ: Глюк с массивом.
 
Создаются временные переменные, а удаляются только при system.gc() и то если повезет.
Я раньше пробовал так делать, довольно быстро выкидывало.

Gector 01.02.2011 01:39

Ответ: Глюк с массивом.
 
Да тут даже дело не в этом. Дело в колличестве. Грузятся по сути 180 изображений 32х32(и не спрашивайте зачем))) Я час тупил с этими массивами, а когда исправил - понял, что дурак))).

odd 02.02.2011 20:23

Ответ: Глюк с массивом.
 
Легче все твои 180 изображений поместить на одну картинку и выводить на экран только кадр из этой большой картинки. Либо использовать библиотеку спрайтов + эта большая картинка.

Gector 02.02.2011 20:29

Ответ: Глюк с массивом.
 
Цитата:

Сообщение от odd (Сообщение 177694)
Легче все твои 180 изображений поместить на одну картинку и выводить на экран только кадр из этой большой картинки. Либо использовать библиотеку спрайтов + эта большая картинка.

Я уже исправил. Теперь выводятся предзагруженные картинки. Короче тайловая карта.)
Я даже себя не узнаю). Как мог так ступить).
Кстати а каким образом их можно поместить на одно изображение?


Часовой пояс GMT +4, время: 10:49.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot