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

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

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

Ответ
 
Опции темы
Старый 03.11.2011, 13:29   #16
leonid
Оператор ЭВМ
 
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите исправить ошибку

Если надоело искать ошибки в моем коде, посоветуйте какую-нибудь литературу
(Offline)
 
Ответить с цитированием
Старый 03.11.2011, 15:17   #17
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,217
Написано 436 полезных сообщений
(для 784 пользователей)
Ответ: Помогите исправить ошибку

зависает из-за того, что где-то неправильно указан путь к изображению.
В данном случае заглавные и строчные буквы не являются эквивалентными.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 03.11.2011, 15:37   #18
leonid
Оператор ЭВМ
 
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите исправить ошибку

Убрал
"title:=loadImage('');
box:=loadImage('');",
и всё заработало.
А в коде barsunduk'а почти то же самое работало...
"// очищаем память от ненужных картинок
car := loadImage('');
back := loadImage('');"
Что не так?
(Offline)
 
Ответить с цитированием
Старый 03.11.2011, 16:03   #19
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Помогите исправить ошибку

Незнаю как в другой версии, но в midletpascal 2.0 car := loadImage(''); приводит к ступору приложения.

Для очистки памяти от "мусора" можно сделать так:
1. сделать "пустую" картинку (null_image:image; ), по сути являющуюся изображением с разрешением 1х1 пиксель (что занимает около 4-х байт)
2. применить её к ненужной в данный момент картинке (car:=null_image; )

Я бы дал тебе некторые советы относительно программинга на мидлетпаскале, но тут существует раздел F.A.Q.

Думаю, стоит его посетить (хотя можеш спросить и тут, как хочеш).

P.S. только что с удивлением обнаружил, что мидлетпаскаль совершенно спокойно загружает ресурсы с именем, содержащее русские буквы, лол =0
__________________
Мечта программиста: запрограммировать процесс программирования.

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

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
leonid (03.11.2011)
Старый 03.11.2011, 16:22   #20
leonid
Оператор ЭВМ
 
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите исправить ошибку

Спасибо за советы
(Offline)
 
Ответить с цитированием
Старый 03.11.2011, 17:28   #21
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Помогите исправить ошибку

Да незачто. Спрашивай почаще, будем рады ответить =)
__________________
Мечта программиста: запрограммировать процесс программирования.

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

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Старый 03.11.2011, 19:11   #22
barsunduk
ПроЭктировщик
 
Аватар для barsunduk
 
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 65 полезных сообщений
(для 263 пользователей)
Ответ: Помогите исправить ошибку

прошу меня извинить за то, что ввел в заблуждение. действительно в MP2 функция loadImage('') вешает мидлет. сорри.

кстати, а зачем нужна имитация полосы загрузки в данном примере? я думал, прогрессбар показывает, сколько процентов данных загружено. т.е. в цикле вместо паузы нужно загружать данные (картинки, карты и.д.). тогда полоса будет служить не только декоративным целям
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
(Offline)
 
Ответить с цитированием
Старый 04.11.2011, 09:34   #23
leonid
Оператор ЭВМ
 
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите исправить ошибку

Сообщение от barsunduk Посмотреть сообщение
кстати, а зачем нужна имитация полосы загрузки в данном примере? я думал, прогрессбар показывает, сколько процентов данных загружено. т.е. в цикле вместо паузы нужно загружать данные (картинки, карты и.д.). тогда полоса будет служить не только декоративным целям
Да это я просто так, ознакомиться. А вообще спасибо, учту
(Offline)
 
Ответить с цитированием
Старый 04.11.2011, 10:17   #24
leonid
Оператор ЭВМ
 
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите исправить ошибку

Что-то до меня не доходит, как в MP 3.4 добавить ресурс?
(Offline)
 
Ответить с цитированием
Старый 04.11.2011, 14:23   #25
leonid
Оператор ЭВМ
 
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите исправить ошибку

И, если Вас не затруднит, покажите как пользоваться repaint'ом для перерисовки заданной области.
(Offline)
 
Ответить с цитированием
Старый 04.11.2011, 16:11   #26
barsunduk
ПроЭктировщик
 
Аватар для barsunduk
 
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 65 полезных сообщений
(для 263 пользователей)
Ответ: Помогите исправить ошибку

Сообщение от leonid Посмотреть сообщение
И, если Вас не затруднит, покажите как пользоваться repaint'ом для перерисовки заданной области.
прорисовка определенной области не поддерживается. но есть функция setClip(x, y, w, h), которая определяет область вывода графики.

program clipTest;
begin
    
// выводим текст и рисунки только в заданный прямоугольник
    
setClip(0050120);
    
setColor(000);
    
FillRect(00GetWidthGetHeight);
    
setColor(255255255);
    
drawImage(loadImage('/icon.png'), 4010);
    
drawText('Hello world!'00);
    
// возвращаем возможность рисовать на всем экране
    
setClip(00GetWidthGetHeight);
    
// рисуем на всем экране
    
setColor(01270);
    
drawLine(00GetWidthGetHeight);
    
repaint;
    
delay(2000);
end
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
leonid (05.11.2011)
Старый 04.11.2011, 16:21   #27
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Помогите исправить ошибку

Кажется меня опередили насчет setclip =)

P.S. Небольшое пояснение принципа работы repaint:
При вызове любой "рисовальной" процедуры (буть то рисование квадрата, изображения и т.д.) "рисунок" не выводится сразу на экран, а записывается в специальный графический буфер (в память).
А вот Repaint выводит содержимое этого самого буфера на экран.
__________________
Мечта программиста: запрограммировать процесс программирования.

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

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Старый 05.11.2011, 09:33   #28
leonid
Оператор ЭВМ
 
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите исправить ошибку

barsunduk, вот как. Спасибо.
(Offline)
 
Ответить с цитированием
Старый 09.11.2011, 12:45   #29
leonid
Оператор ЭВМ
 
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите исправить ошибку

program map;

var
land:array[1..2] of image;
land_array:array[1..30,1..30] of integer;
i,j:integer;
gg:image;

begin
land[1]:=loadImage('/simple.png');
land[2]:=loadImage('/green.png');
for i:=1 to 30 do
for j:=1 to 30 do
land_array[i,j]:=random(2)+1;

for i:=1 to 10 do
for j:=1 to 8 do
drawimage (land[land_array[j,i]],(j-1)*30,(i-1)*30);
gg:=loadImage('/gg.png');
drawImage(gg,60,90);
repaint;
delay(5000);
end.
Программа, которая создаёт поле из двух видов поверхности (спасибо PassCall'ю за урок с его сайта). Допустим, я не хочу рандомного создания поля, а хочу, чтобы поле создавалось с помощью текстового ресурса. Как это осуществить?
(Offline)
 
Ответить с цитированием
Старый 09.11.2011, 14:06   #30
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Помогите исправить ошибку

Сообщение от leonid Посмотреть сообщение
(спасибо PassCall'ю за урок с его сайта).
Незачто, пользуйся на здоровье

Сообщение от leonid Посмотреть сообщение
Допустим, я не хочу рандомного создания поля, а хочу, чтобы поле создавалось с помощью текстового ресурса. Как это осуществить?
Ну само по себе надо этот ресурс создать.
Допустим, мы хотим с помощью ресурса "создать" карту размером 10х10.

Так как единица отвечает за землю, а двойка - за "песок", то и в ресурсе надо так и писать. Строка должны быть 10 символов (единиц или нулей), а самих строк тоже должно быть 10.

Вот пример
1122112211
1122112211
1122112211
1122112211
2222222222
2222222222
1122112211
1122112211
1122112211
1122112211



В конце надо поставить еще 1 строку (можно и пустую), иначе при прочтении ресурса игра зависнет.


Итак, сохраняем этот текст под именем, например, map.txt.
Загружаем его в проект (зеленый плюсик в мидлетпаскале).
ПРОЦЕСС КОДИНГА
Для начала нужно ввести переменную res (или любое другое имя), назначив её как resource. В общем выглядит это так:
res: resource; (добавлять это надо после слова var)

Теперь сам код:
res:=openresource('/map.txt');//прежде чем что-то прочитать из ресурса, его необходимо открыть
for i:=1 to 10 do//читаем строку из ресурса
begin
S:=readline (res);//берем из ресурса строку и присваиваем (запоминаем) её к S. При каждом вызове readln номер читаемой строки увеличивается на 1. То есть в первый раз будет прочитана первая строчка, потом вторая и т.д.
for j:=1 to 10 do
land_array[j,i]:=stringtointeger(GetChar(S,j-1));//итак, что мы делаем? для начала при помощи GetChar выковыриваем из длинной строки S один символ. j-1 - это номер символа из строки. Первый символ имеет номер 0 (а не 1!), поэтому отнимаем единичку. Получили символ ("1" или "2"). Но так как символ это совсем не число, необходимо "превратить" символ в число. Делается это с помощью stringtointeger
end;
closeresource (res);//
Не забудь описать текстовую переменную S (S:string;), если её нет, иначе МидлетПаскаль начнет "ругаться".

Всё. Если надо готовый пример, скажи.

P.S. Для создания всяческих карт (как в данном случае) и прочих игровых данных, не помешает подучить Delphi (тоже имеет паскалеподобный синктансис (какое заумное слово =) ). Он позволит облегчить и без того тяжелую жизнь программиста. Если интересно, могу создать и залить на свой сайт небольшую статью про него.
__________________
Мечта программиста: запрограммировать процесс программирования.

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

http://passcall.ucoz.com

Последний раз редактировалось PassCall, 09.11.2011 в 16:31. Причина: Delphi - зло. пишу readln вместо readline =/
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


Часовой пояс GMT +1, время: 13:52.


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