forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Проблемы с 'forward' (http://forum.boolean.name/showthread.php?t=16971)

Yadro 26.06.2012 16:30

Проблемы с ...
 
Пишу игру, и на днях появилась проблемка. Когда приходит время начинать процедуру, вызванную зараннее forward-ом, игра виснет, можно выйти из ситуации если часто нажимать на кр кнопку, а потом отменять выход (nokia). В эмуляторе всё работает гладко, без ошибок. В этой же игре используется ещё одна процедура с forward-ом, но она работает прекрасно. Ни кто не сталкивался с этим?

PS: может проблема вообще не в нём. Используются библеотеки: arcade,keys,turn,font32,menu32,parse,memory.

AVL 26.06.2012 21:42

Ответ: Проблемы с 'forward'
 
Если так важно forward описание - попробуй вынести процедуру в модуль.
Но интуиция мне подсказывает что проблема не в этом.

Yadro 26.06.2012 22:10

Ответ: Проблемы с 'forward'
 
Цитата:

Сообщение от AVL (Сообщение 231529)
Если так важно forward описание - попробуй вынести процедуру в модуль.
Но интуиция мне подсказывает что проблема не в этом.

А можно поподробнее про модули, или где про них можно почитать?

Проблема может и не в этом, но в эмуле всё нормално работает, а на телефоне в зависимости от нажимания "часто нажимать на кр кнопку, а потом отменять выход" зависит будет работать или нет или с пониженным fps.

AVL 26.06.2012 22:19

Ответ: Проблемы с 'forward'
 
http://ru.wikipedia.org/wiki/Модуль_(программирование)

Почитай мануалы мидлетпаскаля, изучи примеры... И изучи, в конце концов, язык Pascal.

Yadro 29.06.2012 21:13

Ответ: Проблемы с 'forward'
 
Попробовал код без forward та же проблема. Дык как можно это устранить? Такое чувство, что ему не хватает repaint'а.

PassCall 29.06.2012 22:27

Ответ: Проблемы с 'forward'
 
Распространенные причины зависона:

а) загрузка несуществующей картинки (то есть указал неверный путь). Соблюдай регистр, блеать!

бэ) выход за пределы массива.
Например - описано matrix:array [0..1] of integer; а в коде - matrix[2]:=100500;
Это - явный путь в ступор приложения.

вэ) Неверные математические функции. Делить на ноль МП не любит, так же, как и вычислять арктангес из 2, вычислить корень из отрицательно числа и прочее.

гэ) "Неквадратные" массивы типов Image и String. То есть сделать img:array [0..5,0..15] не получиться. Код компилиться, а работать - фигушки. Такой вот неприятный баг.

Ну вот вроде все. А вообще юзай дебаг, чтобы локализовать место ошибки, и устранить её.

Удачи!

P.S. Данные рекомендации написаны для версии 2.02.

Yadro 29.06.2012 22:33

Ответ: Проблемы с 'forward'
 
Цитата:

в эмуле всё нормално работает
, это значит что все перечисленные ошибки вроде как исключены.
а как пользоваться debag'om?

PassCall 30.06.2012 15:12

Ответ: Проблемы с 'forward'
 
Проверь регистр расширений файлов. Эмулятор чисто пофигу на регистр, .png и .PNG для него едины.

А вот телефонам - в точности наоборот.



Дебаг? Есть спец функция, но она работает только в эмуляторах. По этому я предпочитаю свою, велосипедную процедурку.


Код:

procedure z(_z:string);
begin
        setcolor (random(128),random(128),random(128));
        fillrect (0,0,240,21);
        setcolor (random(128)+128,random(128)+128,random(128)+128);
        drawtext(_z,0,0);
        repaint;
                               
        delay (512);
end;

Суть: пишет вверху заданный текст.

Пример использования

Код:

bla_bla_bla_bla_bla;
z ('прорисовка персонажа');
bla_bla_bla_bla_bla;
bla_bla_bla_bla_bla;
bla_bla_bla_bla_bla;
z ('вычисление скорости');
bla_bla_bla_bla_bla;
bla_bla_bla_bla_bla;
bla_bla_bla_bla_bla;
bla_bla_bla_bla_bla;
bla_bla_bla_bla_bla;
z ('проверка на столкновение');

если дебаг не появляется, значит - код после него не выполняется.

Yadro 30.06.2012 15:22

Ответ: Проблемы с 'forward'
 
Проверил регистр, всё нормально. Игра зависает после использования процедур NewMap, MoveMap библиотеки arcade. Повторюсь, что она запускается, если её приостановливать и запускать несколько раз. Может это проблема в нокиа.
ЗЫ Может мне скинуть ту часть кода где виснет?

PassCall 30.06.2012 15:37

Ответ: Проблемы с 'forward'
 
"ЗЫ Может мне скинуть ту часть кода где виснет?"

Годная идея.

Yadro 30.06.2012 15:48

Ответ: Проблемы с 'forward'
 
PHP код:

procedure load_map;

begin
im
:=LoadImage('/spriteshero2.png');
im2:=LoadImage('/spritessave.png');
SetColor(255255255);drawtext('Создание карты',2,2);repaint;
NewMap(100,100LoadImage('/sprites.png'),32,32);
If 
select=1 then LoadCSV('/map3test.CSV');
If 
select=2 then LoadCSV('/map4test.CSV');
SetColor(255255255);drawtext('Заполнение',2,2);repaint;
MoveMap(xm,ym);
end;


procedure Loading;

begin
SetColor
(000);
FillRect(00GetWidthGetHeight);
setcolor(255,255,255);
drawtext('Load...',GetWidth/2-getStringWidth('Loading...')/2,GetHeight/2-getStringHeight('Load...')/2);
repaint;
end;

Procedure level_select;
var 
key,i:integer;

begin
    SetColor
(000);
    
FillRect(00GetWidthGetHeight);
    
// ------------------------ Установка шрифтов --------------------------------
    
font32.init(1); // Всего 2 шрифта
    
Font(0); LoadFont('Verdana_11'); // Основной шрифт
    // ------------------------ Установка меню --------------------------------
    
menu32.init// инициализация меню
    
LoadCursor(LoadImage('/selector.png')); // Создаем курсор
    
SetMenuWindow(5GetHeight/2GetWidth-5GetHeight); // Задаем окно, в котором будет отображаться меню
    
MenuFonts(00); // Основной и курсорный шрифты
    
addItem2(None'Назад''back');
    for 
i:=1 to 10 do addItem2(None'Level '+i'Level'); // Добавляем элементы меню
    
DrawMenuRepaint;
    
repeat
        key
:=KeyToAction(GetKeyClicked);
        
Delay(50);
        if 
key=GA_DOWN then begin CursorDownDrawMenuRepaintDelay(100); end// Вниз
        
if key=GA_UP then begin CursorUpDrawMenuRepaintDelay(100); end// Вверх
        
if (key=GA_FIREthen // Нажали огонь джойстика или двойной клик по сенсорному экрану
            
begin
                
for i:=1 to 10 do
                
begin
                
If Selected 0 then 
                    begin menu32
.init;font32.Init(0);
                    
Im:=nil;
                    
Im2:=nil;
                    
memclean.clean;//чистим память
                    
menu;
                    
end;
                if 
Selected i    then select:=i;
                
end;
            
end
        Delay
(100);Scroll;
    
until (key=GA_FIRE);
end;

Procedure game;

begin
    repeat
//все процедуры объявлены ранее
    
getkeys;
    
map;
    
sprite;
    
fps;
    
preplay;
    if (
GetKeyClicked=skl) or (GetKeyClicked=skrthen pause;
    while 
isMidletPaused do 
        
begin 
            repeat
                SetColor
(000);
                
FillRect(00GetWidthGetHeight);
                
setcolor(255,255,255);
                
drawtext('Приложение приостоновлено',GetWidth/2-getStringWidth('Приложение приостоновлено')/2,GetHeight/2-getStringHeight('0'));
                
repaint;
                
delay(100);
            
until (KeyToAction(GetKeyClicked)=GA_FIRE);
        
end;
    if 
n>28 then delay(1); 
    
repaint;
    
key := GetKeyClicked;
    
until (key skl)or(key skr);
    
pause;
end;

begin
level_select
;
Loading;
load_map;
//ступор*********************************************
game;
end


Сократил как мог.

PassCall 30.06.2012 15:49

Ответ: Проблемы с 'forward'
 
/map3test.CSV

Ты точно уверен, что соблюдил регистр?

Yadro 30.06.2012 15:51

Ответ: Проблемы с 'forward'
 
Да. Может скинуть саму игру на других аппаратах потестить?
Ещё вопрос появился, а когда forward используется, оператика тем самым нагружается?

PassCall 30.06.2012 16:23

Ответ: Проблемы с 'forward'
 
"Ещё вопрос появился, а когда forward используется, оператика тем самым нагружается?"

Вряд ли. Это просто указатель на то, что существует такая процедура/функция (где-то там, внизу).

Ну а ты все таки сделай расширения файлов в нижнем регистре. Во избежание...

Yadro 09.07.2012 20:09

Ответ: Проблемы с 'forward'
 
Нашёл 'причинное' место повисание, это NewMap(100,100, LoadImage('/sprites.png'),32,32); из arcade, у кого нидь были с ним проблемы?, недоработка либы? Знаю что если использовать разные значения клеток, те отрисовка не квадратом NewMap(100,50,..., то отображение не правильное. Хотя это похоже в другую тему.


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

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