|
03.11.2011, 17:29
|
#16
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
Если надоело искать ошибки в моем коде, посоветуйте какую-нибудь литературу
|
(Offline)
|
|
03.11.2011, 19:17
|
#17
|
Мастер
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений (для 790 пользователей)
|
Ответ: Помогите исправить ошибку
зависает из-за того, что где-то неправильно указан путь к изображению.
В данном случае заглавные и строчные буквы не являются эквивалентными.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
|
(Offline)
|
|
03.11.2011, 19:37
|
#18
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
Убрал
"title:=loadImage('');
box:=loadImage('');",
и всё заработало.
А в коде barsunduk'а почти то же самое работало...
"// очищаем память от ненужных картинок
car := loadImage('');
back := loadImage('');"
Что не так?
|
(Offline)
|
|
03.11.2011, 20:03
|
#19
|
Разработчик
Регистрация: 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)
|
|
Сообщение было полезно следующим пользователям:
|
|
03.11.2011, 20:22
|
#20
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
Спасибо за советы
|
(Offline)
|
|
03.11.2011, 21:28
|
#21
|
Разработчик
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений (для 319 пользователей)
|
Ответ: Помогите исправить ошибку
Да незачто. Спрашивай почаще, будем рады ответить =)
__________________
Мечта программиста: запрограммировать процесс программирования.
Всё гениальное - просто.
http://passcall.ucoz.com
|
(Offline)
|
|
03.11.2011, 23:11
|
#22
|
ПроЭктировщик
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений (для 271 пользователей)
|
Ответ: Помогите исправить ошибку
прошу меня извинить за то, что ввел в заблуждение. действительно в MP2 функция loadImage('') вешает мидлет. сорри.
кстати, а зачем нужна имитация полосы загрузки в данном примере? я думал, прогрессбар показывает, сколько процентов данных загружено. т.е. в цикле вместо паузы нужно загружать данные (картинки, карты и.д.). тогда полоса будет служить не только декоративным целям
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
|
(Offline)
|
|
04.11.2011, 13:34
|
#23
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
Сообщение от barsunduk
кстати, а зачем нужна имитация полосы загрузки в данном примере? я думал, прогрессбар показывает, сколько процентов данных загружено. т.е. в цикле вместо паузы нужно загружать данные (картинки, карты и.д.). тогда полоса будет служить не только декоративным целям
|
Да это я просто так, ознакомиться. А вообще спасибо, учту
|
(Offline)
|
|
04.11.2011, 14:17
|
#24
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
Что-то до меня не доходит, как в MP 3.4 добавить ресурс?
|
(Offline)
|
|
04.11.2011, 18:23
|
#25
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
И, если Вас не затруднит, покажите как пользоваться repaint'ом для перерисовки заданной области.
|
(Offline)
|
|
04.11.2011, 20:11
|
#26
|
ПроЭктировщик
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений (для 271 пользователей)
|
Ответ: Помогите исправить ошибку
Сообщение от leonid
И, если Вас не затруднит, покажите как пользоваться repaint'ом для перерисовки заданной области.
|
прорисовка определенной области не поддерживается. но есть функция setClip(x, y, w, h), которая определяет область вывода графики.
program clipTest; begin // выводим текст и рисунки только в заданный прямоугольник setClip(0, 0, 50, 120); setColor(0, 0, 0); FillRect(0, 0, GetWidth, GetHeight); setColor(255, 255, 255); drawImage(loadImage('/icon.png'), 40, 10); drawText('Hello world!', 0, 0); // возвращаем возможность рисовать на всем экране setClip(0, 0, GetWidth, GetHeight); // рисуем на всем экране setColor(0, 127, 0); drawLine(0, 0, GetWidth, GetHeight); repaint; delay(2000); end.
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
04.11.2011, 20:21
|
#27
|
Разработчик
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений (для 319 пользователей)
|
Ответ: Помогите исправить ошибку
Кажется меня опередили насчет setclip =)
P.S. Небольшое пояснение принципа работы repaint:
При вызове любой "рисовальной" процедуры (буть то рисование квадрата, изображения и т.д.) "рисунок" не выводится сразу на экран, а записывается в специальный графический буфер (в память).
А вот Repaint выводит содержимое этого самого буфера на экран.
__________________
Мечта программиста: запрограммировать процесс программирования.
Всё гениальное - просто.
http://passcall.ucoz.com
|
(Offline)
|
|
05.11.2011, 13:33
|
#28
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
barsunduk, вот как. Спасибо.
|
(Offline)
|
|
09.11.2011, 16:45
|
#29
|
Оператор ЭВМ
Регистрация: 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, 18:06
|
#30
|
Разработчик
Регистрация: 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 в 20:31.
Причина: Delphi - зло. пишу readln вместо readline =/
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:49.
|