Помощь - Поиск - Пользователи - Календарь
Полная версия: Блин вот все не могу догнать как вы грузите
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
Masacre Ant
Каким образом можно в программу на Паскале засунуть картинку?
И в каком формате она должна быть?
Сомневаюсь, что можно просто нарисовать в Paint'е цветной кубик и всунуть его например коммандой LoadImage('kubic.bmp')...
Это же ведь не так делается, может кто нить мне поможет, и объяснит на простеньком примере:
-----------------------------------------------------------------------------------------------
-Где надо рисовать картинку? huh.gif
-Как ее отобразить на экране с помощью Pascal(что для этого нужно?), а еще лучше:
-Как ее еще потом подвигать туда сюда, хотя бы просто без участия юзера(тобишь не управляя с клавы...)?

Помогите ПЛЗ!!! :molitva:
Masacre Ant
И еще...
Как заставит по нормальному двигаться набранную примитивами Graph'а(rectangle, ellipse и т.д) картинку...
------------------------------------------------------------------------------------------------
Типа чтобы не делать так:
нарисовал картинку (например элипс)...
потом поверх нее нарисовал прямоугльник цветом фона(типа чтоб закрасить)
потом нарисовать туже картинку но немного сдвинув куда-нить...
------------------------------------------------------------------------------------------------
А чтобы мона было делать так:
нарисовал фон (например каку-нить цветную мазню)
поместил на нем человечка из rectangle'ов
убрал человечка (не изменив фон на котором он был нарисован)
нарисовал человечка в другом месте...
/ \
/ \
| |
Вот как бы такое реализовать??? blink.gif
GoodWind
Цитата
Каким образом можно в программу на Паскале засунуть картинку?
И в каком формате она должна быть?
Сомневаюсь, что можно просто нарисовать в Paint'е цветной кубик и всунуть его например коммандой LoadImage('kubic.bmp')...

ошибаетесь, Oleg_Z выкладывал на форум (воспользуйтесь поиском) модуль для чтения BMP файлов (их вы свободно можете рисовать в paint`e).
разберитесь сначала с этим, потом и остальному научитесь, с нашей помощью ;)
volvo
Вот что я не могу догнать - зачем на форуме поиск? Вставка картинок в Паскаль
Dark
Мя решил немного помочь =)
выкладываю свои эксперименты

Модули для работы с PCX файлами и спрайтами перенесены в:
FAQ: Работа с графическими форматами

Volvo
Dark
Сама игра. Модули попробую в архиве пихнуть в рар архиве
Код

Uses keyboard,VesaType,Vesa256,Sprite,pcx;


var
Stars:array[0..599] of PTStar;
PShip:PTSShip;
eog:boolean;   {End Of Game}
key:byte;      {keyboard}
i:integer;

procedure CreateStars;
 var i1:integer;
 begin
  for i1:=0 to 599 do
   begin
    Stars[i1]:=CreateStar(random(800),random(600));
   end;
 end;

procedure DestroyStars;
 var i1:integer;
 begin
  for i1:=0 to 599 do
   begin
    DestroyStar(Stars[i1]);
   end;
 end;

procedure MoveStars;
 var i1:integer;
 begin
  for i1:=0 to 599 do
   begin
   if Stars[i1]^.Spr^.y+Stars[i1]^.speed<=600 then Stars[i1]^.Spr^.y:=Stars[i1]^.Spr^.y+Stars[i1]^.speed else
    begin
    Stars[i1]^.Spr^.x:=random(800);
    Stars[i1]^.Spr^.y:=random(20);
    Stars[i1]^.speed:=random(7)+3;
    end;
   end;
 end;

procedure MoveSShip(key:byte);
 begin
  case key of
   Up:     PShip^.Spr^.y:=PShip^.Spr^.y-3;
   Down:   PShip^.Spr^.y:=PShip^.Spr^.y+3;
   Left:   PShip^.Spr^.x:=PShip^.Spr^.x-5;
   Right:  PShip^.Spr^.x:=PShip^.Spr^.x+5;
  end;
 end;

procedure DrawStars;
begin
  for i:=0 to 599 do
   begin
    VPutPixel(Stars[i]^.Spr^.x,Stars[i]^.Spr^.y,Stars[i]^.col);
   end;
end;

 procedure DrawBar;
 begin
  Drawpict(PShip^.Spr^.pict,PShip^.Spr^.x,PShip^.Spr^.y,false,0)
 end;

begin
randomize;
CreateStars;
PShip:=CreateSShip(50,500,'ship.pcx');
if ISVesa then VSetMode($103) else halt;
  Drawpict(PShip^.Spr^.pict,PShip^.Spr^.x,PShip^.Spr^.y,true,0);
repeat
 ClBuf;
 VClrScr(0);
 DrawStars;
 DrawBar;
 MoveSShip(key);
 MoveStars;
 NextFlic;
 VRetrace;
 key:=Mreadkey;
 if key=esc then eog:=true;
until eog;

VClrScr(0);
SetTextMode;
DestroyStars;
DestroySShip(PShip);
end.
Dark
Вопросы?
Dark
У этой вещи есть один недостаток - писалась давно, расчитана не на ньюбов в паскале, и это не простое перемещение =), ах да еще не оптимизированность
Altair
offtopнаписал 3 отличных модуля -
1. вывод и сохранение PCX
2. то-же для BMP
3. сохранение в BMP скриншота в нестандартных видеорежимах (VESA и SVGA)
MasacreAnt
Гы пасиб конечно, а вот как я из пайнта суну 24битную картинку, в 16 цветов (VGA)??? Пускай даже и с юнитом???

А PCX этот вобще неохота даже юзать!

Вобщем лучше я буду в своем редакторе рисовать примитивами Graph'овскими...

Вы мне лучше скажите как бы мне по человечески двигать то нарисованную картинку, и еще:
А вот процедура GetImage она хранит инфу только о текущей картинке помещенной в память или обовсех картинках загруженных до FreeMem...
Тобиш если я один раз загружу картинку в память PutImage'ом ее пару раз вставлю, и захочу другую картинку скопировать и вставить, не теряя информации об предыдущей, это возможно???
Altair
Цитата
24битную картинку

так ты 16 цветную запихивай smile.gif
Бродяжник
Если речь идет о стандартных GetImage и PutImage, то если в GetImage при каждом вызове указывать одну и ту же переменную, в которую мы сохраняем картинку, то, конечно же, хранится будет только одна, последняя из сохраненных картинок. Под каждый спрайт, который мы хотим хранить, нужно выделить отдельную переменную. По поводу перемещения картинок по фону: юзая Graph.TPU, лично я не нашел ничего лучшего, чем проделывать следующую последовательность шагов:
1. Сохранять участок экрана в месте вывода спрайта (GetImage)
2. Выводить подложку под спрайт - маску спрайта, где прозрачный цвет заменен черным, а любой непрозрачный цвет - белым. При этом выводить ее нужно в режиме ORPUT. В итоге, там где должен будет выводится спрайт, появится его белый контур, а фон не изменится.
3. Выводить сам спрайт поверх подложки; при этом прозрачный цвет нужно заменить белым, и выводить спрайт в режиме ANDPUT. В итоге сквозь белый цвет спрайта пробьется фон, а на белом фоне подложки отобразится сам спрайт.
4. После временной задержки восстанавливаем сохраненный участок экрана.
Для реализации сей схемы я делал так:
1. Рисовал спрайт в своем пиксельном редакторе. При этом какой-то один цвет объявлялся прозрачным.
2. Этот спрайт обрабатывался программкой, которой генерила два новых спрайта: один - спрайт подложки, заменяя прозрачный цвет черным, а все остальные - белым, и "верхний" спрайт, заменяя прозрачный цвет белым.
Работать это работает, но, вообще-то, BGI - жутко тормозная вещь. Стоило бы написать что-то свое, нормальное, быстрое... но я этого не потяну. Да и зачем, если есть ОпенГЛ?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.