Помогите исправить ошибку
Здрасте. Я в МП совсем салага. Хотел сделать что-то наподобие полосы загрузки, но она не продвигается. Почему?
Цитата:
|
Ответ: Помогите исправить ошибку
У тебя progress приравнивается к единице в самом начале цикла.
Вынеси наружу. И repaint чем меньше вызываешь - тем лучше. В идеале - один раз в конце цикла. А тут он непонятно зачем два раза вызван. |
Ответ: Помогите исправить ошибку
Спасибо, "загрузка" идет :)
|
Ответ: Помогите исправить ошибку
Можно прибавлять по два (или больше). :-)
|
Ответ: Помогите исправить ошибку
Я знаю)
|
Ответ: Помогите исправить ошибку
Цитата:
Что на этот раз не так? |
Ответ: Помогите исправить ошибку
drawImage(loadImage('/car.png')S,200); замени на drawImage(loadImage('/car.png'),S,200);
|
Ответ: Помогите исправить ошибку
Вот блин. Из-за какой-то запятой) Спасибо.
Как сделать, чтобы она не оставляла след? |
Ответ: Помогите исправить ошибку
заполнять экран
Setcolor(0,0,0); fillrect(getwidth,getheight); А вообще лучше сделать var car:image; car:=loadImage('/car.png'); а потом рисовать drawImage(car,S,200); |
Ответ: Помогите исправить ошибку
Вложений: 1
вот примерчик для любого разрешения PHP код:
|
Ответ: Помогите исправить ошибку
вариант со снятием огрызка скриншота вместо рисования одноцветных прямоугольников, затирающих нашу машинку и ее какашки в виде надписи "loading N%" PHP код:
|
Ответ: Помогите исправить ошибку
И зачем? Судя по его проблемам, он в твоей коде ничего не поймёт. Поощряешь бездумный копипаст.
leonid, почитай встроенную справку, и перед тем, как задавать вопросы, пользуйся поиском. |
Ответ: Помогите исправить ошибку
Цитата:
а советы типа "читай справку" лично у меня убивают веру в сапиенсов. |
Ответ: Помогите исправить ошибку
Большое спасибо, вроде разобрался.
|
Ответ: Помогите исправить ошибку
Вложений: 1
Цитата:
|
Ответ: Помогите исправить ошибку
Если надоело искать ошибки в моем коде, посоветуйте какую-нибудь литературу :)
|
Ответ: Помогите исправить ошибку
зависает из-за того, что где-то неправильно указан путь к изображению.
В данном случае заглавные и строчные буквы не являются эквивалентными. |
Ответ: Помогите исправить ошибку
Убрал
"title:=loadImage(''); box:=loadImage('');", и всё заработало. А в коде barsunduk'а почти то же самое работало... "// очищаем память от ненужных картинок car := loadImage(''); back := loadImage('');" Что не так? |
Ответ: Помогите исправить ошибку
Незнаю как в другой версии, но в midletpascal 2.0 car := loadImage(''); приводит к ступору приложения.
Для очистки памяти от "мусора" можно сделать так: 1. сделать "пустую" картинку (null_image:image; ), по сути являющуюся изображением с разрешением 1х1 пиксель (что занимает около 4-х байт) 2. применить её к ненужной в данный момент картинке (car:=null_image; ) Я бы дал тебе некторые советы относительно программинга на мидлетпаскале, но тут существует раздел F.A.Q. Думаю, стоит его посетить (хотя можеш спросить и тут, как хочеш). P.S. только что с удивлением обнаружил, что мидлетпаскаль совершенно спокойно загружает ресурсы с именем, содержащее русские буквы, лол =0 |
Ответ: Помогите исправить ошибку
Спасибо за советы :)
|
Ответ: Помогите исправить ошибку
Да незачто. Спрашивай почаще, будем рады ответить =)
|
Ответ: Помогите исправить ошибку
прошу меня извинить за то, что ввел в заблуждение. действительно в MP2 функция loadImage('') вешает мидлет. сорри.
кстати, а зачем нужна имитация полосы загрузки в данном примере? я думал, прогрессбар показывает, сколько процентов данных загружено. т.е. в цикле вместо паузы нужно загружать данные (картинки, карты и.д.). тогда полоса будет служить не только декоративным целям |
Ответ: Помогите исправить ошибку
Цитата:
|
Ответ: Помогите исправить ошибку
Что-то до меня не доходит, как в MP 3.4 добавить ресурс?
|
Ответ: Помогите исправить ошибку
И, если Вас не затруднит, покажите как пользоваться repaint'ом для перерисовки заданной области.
|
Ответ: Помогите исправить ошибку
Цитата:
PHP код:
|
Ответ: Помогите исправить ошибку
Кажется меня опередили насчет setclip =)
P.S. Небольшое пояснение принципа работы repaint: При вызове любой "рисовальной" процедуры (буть то рисование квадрата, изображения и т.д.) "рисунок" не выводится сразу на экран, а записывается в специальный графический буфер (в память). А вот Repaint выводит содержимое этого самого буфера на экран. |
Ответ: Помогите исправить ошибку
barsunduk, вот как. Спасибо.
|
Ответ: Помогите исправить ошибку
Цитата:
|
Ответ: Помогите исправить ошибку
Цитата:
Цитата:
Допустим, мы хотим с помощью ресурса "создать" карту размером 10х10. Так как единица отвечает за землю, а двойка - за "песок", то и в ресурсе надо так и писать. Строка должны быть 10 символов (единиц или нулей), а самих строк тоже должно быть 10. Вот пример В конце надо поставить еще 1 строку (можно и пустую), иначе при прочтении ресурса игра зависнет. Итак, сохраняем этот текст под именем, например, map.txt. Загружаем его в проект (зеленый плюсик в мидлетпаскале). ПРОЦЕСС КОДИНГАДля начала нужно ввести переменную res (или любое другое имя), назначив её как resource. В общем выглядит это так: res: resource; (добавлять это надо после слова var) Теперь сам код: Код:
res:=openresource('/map.txt');//прежде чем что-то прочитать из ресурса, его необходимо открыть Всё. Если надо готовый пример, скажи. P.S. Для создания всяческих карт (как в данном случае) и прочих игровых данных, не помешает подучить Delphi (тоже имеет паскалеподобный синктансис (какое заумное слово =) ). Он позволит облегчить и без того тяжелую жизнь программиста. Если интересно, могу создать и залить на свой сайт небольшую статью про него. |
Ответ: Помогите исправить ошибку
Да, неплохо бы готовый пример, если не затруднит.
|
Ответ: Помогите исправить ошибку
Вложений: 1
|
Ответ: Помогите исправить ошибку
Цитата:
|
Ответ: Помогите исправить ошибку
"i,j,x,y,key,:integer;" убери лишнюю запятую - она вводит МидлетПаскаль в заблуждение
"drawimage (land_image[land_array[j+,i+]],(j-1+)*30-,(i-1)*30);" лишние минусы и плюсы. нет такого числа как "5+" или "3-" =) |
Ответ: Помогите исправить ошибку
Ах да, невнимательность =)
Но почему-то всё равно белый экран... |
Ответ: Помогите исправить ошибку
А ты персонажа в память загрузил?
|
Ответ: Помогите исправить ошибку
Конечно.
|
Ответ: Помогите исправить ошибку
А, и правда не загрузил. Я думал, ты про ресурс.
|
Ответ: Помогите исправить ошибку
Да даже с персом виснет
|
Ответ: Помогите исправить ошибку
Регистр соблюден?
"Pers.png" и "pers.png" это два разных файла И вставь вот это for i:=1 to 30 do for j:=1 to 30 do land_array[i,j]:=1; перед S:=readline (res); Так как по умолчанию значения этого массива ноль, то движок пытается вывести картинку ландшафта под номером ноль. А у нас есть только 1 и 2. |
Ответ: Помогите исправить ошибку
Так точно, соблюден.
|
Ответ: Помогите исправить ошибку
а код вставил?
секунду, а зачем в коде вот это (выделено жирным)? program lol; var i,j,x,y,key,:integer; S:string; res:resource; land_image:array [1..2] of image; land_array:array [1..30,1..30] of integer; pers:image; begin land_image[1]:=loadimage('/land1.png'); land_image[2]:=loadimage('/land2.png'); for i:=1 to 30 do for j:=1 to 30 do land_array [i,j]:=1; res:=openresource('/map.txt'); for i:=1 to 10 do begin S:=readline (res); land_array[j,i]:=stringtointeger(GetChar(S,j-1)); end; closeresource (res); REPEAT setcolor(255,255,255); fillrect(0,0,240,320); for i:=1 to 11 do for j:=1 to 9 do begin drawimage (land_image[land_array[j+,i+]],(j-1+)*30-,(i-1)*30); end; drawimage (pers,50,40); key:=GetKeyPressed; if keytoaction(key)=GA_UP then begin y:=y-1; end; if keytoaction(key)=GA_DOWN then begin y:=y+1; end; if keytoaction(key)=GA_LEFT then begin x:=x-1; end; if keytoaction(key)=GA_RIGHT then begin x:=x+1; end; repaint; delay (20); UNTIL (GetKeyPressed=KE_KEY0); end. |
Ответ: Помогите исправить ошибку
Чтото ты намудрил.
Должно быть так for i:=1 to 10 do begin S:=readline (res); for j:=1 to 10 do land_array[j,i]:=stringtointeger(GetChar(S,j-1)); end; closeresource (res); То, что красным выделено, ты пропустил |
Ответ: Помогите исправить ошибку
Исправил, но всё равно белый экран =(
|
Ответ: Помогите исправить ошибку
Скинь короче мне свой проект, счас посмотрю, в чем дело
|
Ответ: Помогите исправить ошибку
Вложений: 1
Вот, держите.
|
Ответ: Помогите исправить ошибку
Вот, все исправил...
Начнём по порядку. Почему висло? 1. for i:=1 to 30 do for j:=1 to 30 do begin land_array [i,j]:=1; res:=openresource('/map.txt'); end; команда res:=openresource('/map.txt'); тут совершенно не уместна. То есть Вы пытальсь загрузить этот ресурс... 900 раз (30*30), что естественно занимает много времени. Переместить в другое место. 2. for i:=1 to 10 do begin S:=readline (res); for i:=1 to 10 do land_array[j,i]:=stringtointeger(GetChar(S,j-1)); end; тут 2 раза используется i. но ошибка в принципе не в этом (хотя так делать тоже нельзя) обратите внимание на land_array[j,i]. j по умолчанию равен нулю. а пределы массива 1..30. тоесть число ноль ну никак не принадлежит отрезку 1-30. поэтому игра висла. 3. я немного затупил с примером. вместо нуля (в ресурсе) должна быть единица, а вместо единицы - двойка. извините. Так. Еще замечания 1. delay (8000); задержка у Вас стоит 8 секунд (8000 миллисекунд). То есть 1 кадр в 8 секунд, из-за чего игра превращается в слайд-шоу. Зачем? Чем меньше задежка, тем лучше (в разумных пределах, конечно. советую ставить 40) 2. drawimage(pers,50,40); координата керсонажа равняется 50,40. То есть Вы ввели КОНСТАНТЫ, и они совершенно не зависят от значения x и y. То есть двигаться он никак не будет. Измените на drawimage(pers,x,y); Вроде всё |
Ответ: Помогите исправить ошибку
тема превратилась прямо-таки в FAQ для новичков. учит следить за всем, что ты делаешь.
кстати о FAQ, хочу вставить свои пять копеек. чтобы легче было отслеживать все свои циклы и вхождения в них, очень рекомендую использовать предусмотренные для этого инструменты MP. например, в опциях есть чекрыж "Show indentation guidelines" (3-й сверху). если его установить, то между, скажем, begin и end появится вертикальная линия. очень наглядно показывает начало и конец программных скобок. Код:
while GetKeyClicked <> KE_STAR do рекомендую довести это до автоматизма. лично меня соблюдение общепринятых стандартов всегда выручает, когда поднимаю старые проекты с километрами кода. |
Ответ: Помогите исправить ошибку
Со всем разобрался, но как исправить вторую проблему?
|
Ответ: Помогите исправить ошибку
Цитата:
|
Ответ: Помогите исправить ошибку
barsunduk, я вижу, Вы собрали. Дайте, пожалуйста, сборку посмотреть.
|
Ответ: Помогите исправить ошибку
Цитата:
|
Ответ: Помогите исправить ошибку
Вложений: 1
Цитата:
Цитата:
з.ы.: и фон удобно в MP2.2 прозрачным делать, и на выходе самый оптимальный формат png, сделать файл меньше больше нигде не смог |
Ответ: Помогите исправить ошибку
Вложений: 1
Цитата:
Лови. Вложение 15453. Обычно уменьшает размер на 10-20%, но иногда может и в 2 раза сжать (особенно хорошо это получается при работе с png24). Как пользоваться? Открыть с помощью->обзор->png out |
Ответ: Помогите исправить ошибку
Цитата:
|
Ответ: Помогите исправить ошибку
Как сделать управление цифрами? Вставил вместо GA_DOWN и KE_KEY8 и т.д., не реагирует что-то.
|
Ответ: Помогите исправить ошибку
И если нужно сделать поле не 10х10, а 8х9? Пробовал менять значения i и j на 8 и 9, затем сделал в тхт-карте поле 8х9. Виснет.
Цитата:
|
Ответ: Помогите исправить ошибку
PHP код:
--- позволил себе добавить несколько констант. теперь если нужно будет заменить графику (поставить спрайты другого размера, увеличить их количество) или поменять размерность этапов, то не нужно будет переписывать весь код, а достаточно поменять значения нескольких констант. ну, это так, на будущее. |
Ответ: Помогите исправить ошибку
И ещё одна подсказка:
"(keytoaction(key) = GA_UP)or(key = KE_KEY2)" keyToAction как бэ реагируент на нажатие кнопки вверх И на кнопку 2. Пруфкод: PHP код:
PHP код:
Для KeyToAction(GetKeyPressed): GA_UP (2 или джойстик вверх) GA_LEFT (4 или джойстик влево) GA_RIGHT (6 или джойстик вправо) GA_DOWN (8 или джойстик вниз) GA_FIRE (5 или джойстик (центральный)) Для GetKeyPressed: KE_KEY? (вместо "?" цифра от нуля до девятки) - соответствующая цифровая кнопка KE_STAR - звёздочка KE_POUND -решётка KE_NONE - если вообще никакая кнопка не нажата Для софт кнопок (слева и справа от джойстика), кнопок "положить/снять трубку", регулирования звука и всех прочих, таких команд не предусмотрено. |
Ответ: Помогите исправить ошибку
Спасибо!
|
Ответ: Помогите исправить ошибку
PHP код:
"nameOnBar:='З Е М Л Я'; //присваиваем другое имя" ставится выше "facewindow:=loadImage('/land1face.png'); // и загружаем другую картинку", то выполняется только верхняя строка. Если же поменять их местами, будет опять же выполняться та, которая выше. Как сделать так, чтобы выполнялись сразу обе? |
Ответ: Помогите исправить ошибку
А, всё. Ввёл еще условие.
|
Ответ: Помогите исправить ошибку
Было бы хорошо иметь весь код, а то я смутно понимаю предназначение кода.
Но в общем я догадываюсь о сути ошибки PHP код:
видиш ли, если не указаны begin и end, то выполняется одна, следующая команда. Давай разберем пошагово if (x=unit1x) and (y=unit1y) then Если в выделенной клетке монстр, то... begin facewindow:=loadImage('/face1.png'); //загружаем рожу юнита(будет отображаться на нижнем баре) nameOnBar:='О Р К'; //присваиваем имя юнита, которое будет около рожи end; Загружаем в память иконку орка (и причем это сделано очень неправильным образом, иконки следует загрузить заранее), и меняем текст на "орк" else //иначе (это когда курсор не на юнете, а на земле) nameOnBar:='З Е М Л Я'; //присваиваем другое имя Иначе делаем текст "земля" так как сдесь нет begin и end, выполнятсмя будет только nameOnBar:='З Е М Л Я'; Все, условие закончилось. facewindow:=loadImage('/land1face.png'); // и загружаем другую картинку А вот эта штука будет выполняться в ЛЮБОМ случае, так как не относиться к условию. Тоесть даже если в клетке стоит орк, и мы загрузим его иконку, то вот эта команда загрузит землю. Правильно будет так: PHP код:
|
Ответ: Помогите исправить ошибку
"видиш ли, если не указаны begin и end, то выполняется одна, следующая команда."
В принципе, можно было сказать только это, я понял =) |
Часовой пояс GMT +4, время: 07:30. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot