Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 26.06.2012, 16:30   #1
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Вопрос Проблемы с ...

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

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

Последний раз редактировалось Yadro, 29.06.2012 в 21:15.
(Offline)
 
Ответить с цитированием
Старый 26.06.2012, 21:42   #2
AVL
Разработчик
 
Регистрация: 27.01.2011
Адрес: Афипский
Сообщений: 419
Написано 100 полезных сообщений
(для 182 пользователей)
Ответ: Проблемы с 'forward'

Если так важно forward описание - попробуй вынести процедуру в модуль.
Но интуиция мне подсказывает что проблема не в этом.
(Offline)
 
Ответить с цитированием
Старый 26.06.2012, 22:10   #3
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Ответ: Проблемы с 'forward'

Сообщение от AVL Посмотреть сообщение
Если так важно forward описание - попробуй вынести процедуру в модуль.
Но интуиция мне подсказывает что проблема не в этом.
А можно поподробнее про модули, или где про них можно почитать?

Проблема может и не в этом, но в эмуле всё нормално работает, а на телефоне в зависимости от нажимания "часто нажимать на кр кнопку, а потом отменять выход" зависит будет работать или нет или с пониженным fps.
(Offline)
 
Ответить с цитированием
Старый 26.06.2012, 22:19   #4
AVL
Разработчик
 
Регистрация: 27.01.2011
Адрес: Афипский
Сообщений: 419
Написано 100 полезных сообщений
(для 182 пользователей)
Ответ: Проблемы с 'forward'

http://ru.wikipedia.org/wiki/Модуль_(программирование)

Почитай мануалы мидлетпаскаля, изучи примеры... И изучи, в конце концов, язык Pascal.
(Offline)
 
Ответить с цитированием
Старый 29.06.2012, 21:13   #5
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Ответ: Проблемы с 'forward'

Попробовал код без forward та же проблема. Дык как можно это устранить? Такое чувство, что ему не хватает repaint'а.
(Offline)
 
Ответить с цитированием
Старый 29.06.2012, 22:27   #6
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Проблемы с 'forward'

Распространенные причины зависона:

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

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

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

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

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

Удачи!

P.S. Данные рекомендации написаны для версии 2.02.
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Yadro (29.06.2012)
Старый 29.06.2012, 22:33   #7
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Ответ: Проблемы с 'forward'

в эмуле всё нормално работает
, это значит что все перечисленные ошибки вроде как исключены.
а как пользоваться debag'om?
(Offline)
 
Ответить с цитированием
Старый 30.06.2012, 15:12   #8
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Проблемы с '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 ('проверка на столкновение');
если дебаг не появляется, значит - код после него не выполняется.
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Старый 30.06.2012, 15:22   #9
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Ответ: Проблемы с 'forward'

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

Последний раз редактировалось Yadro, 30.06.2012 в 15:24. Причина: добавил пару букфок
(Offline)
 
Ответить с цитированием
Старый 30.06.2012, 15:37   #10
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Проблемы с 'forward'

"ЗЫ Может мне скинуть ту часть кода где виснет?"

Годная идея.
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Старый 30.06.2012, 15:48   #11
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Ответ: Проблемы с 'forward'

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

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

Последний раз редактировалось Yadro, 30.06.2012 в 15:49. Причина: Хотя думаю чтобы разобраться нужен весь код(
(Offline)
 
Ответить с цитированием
Старый 30.06.2012, 15:49   #12
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Проблемы с 'forward'

/map3test.CSV

Ты точно уверен, что соблюдил регистр?
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Старый 30.06.2012, 15:51   #13
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Ответ: Проблемы с 'forward'

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

Последний раз редактировалось Yadro, 30.06.2012 в 15:57. Причина: 123
(Offline)
 
Ответить с цитированием
Старый 30.06.2012, 16:23   #14
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Проблемы с 'forward'

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

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

Ну а ты все таки сделай расширения файлов в нижнем регистре. Во избежание...
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Старый 09.07.2012, 20:09   #15
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Ответ: Проблемы с 'forward'

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


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com