IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> Блин вот все не могу догнать как вы грузите, в игру картинки...
сообщение
Сообщение #1


Гость






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

Помогите ПЛЗ!!! :molitva:
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






И еще...
Как заставит по нормальному двигаться набранную примитивами Graph'а(rectangle, ellipse и т.д) картинку...
------------------------------------------------------------------------------------------------
Типа чтобы не делать так:
нарисовал картинку (например элипс)...
потом поверх нее нарисовал прямоугльник цветом фона(типа чтоб закрасить)
потом нарисовать туже картинку но немного сдвинув куда-нить...
------------------------------------------------------------------------------------------------
А чтобы мона было делать так:
нарисовал фон (например каку-нить цветную мазню)
поместил на нем человечка из rectangle'ов
убрал человечка (не изменив фон на котором он был нарисован)
нарисовал человечка в другом месте...
/ \
/ \
| |
Вот как бы такое реализовать??? blink.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Автооответчик
*****

Группа: Пользователи
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


Цитата
Каким образом можно в программу на Паскале засунуть картинку?
И в каком формате она должна быть?
Сомневаюсь, что можно просто нарисовать в Paint'е цветной кубик и всунуть его например коммандой LoadImage('kubic.bmp')...

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


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Вот что я не могу догнать - зачем на форуме поиск? Вставка картинок в Паскаль
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Знаток
****

Группа: Пользователи
Сообщений: 408
Пол: Мужской

Репутация: -  3  +


Мя решил немного помочь =)
выкладываю свои эксперименты

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

Volvo


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Знаток
****

Группа: Пользователи
Сообщений: 408
Пол: Мужской

Репутация: -  3  +


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

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 -


Прикрепленные файлы
Прикрепленный файл  1.txt ( 3.43 килобайт ) Кол-во скачиваний: 255


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Знаток
****

Группа: Пользователи
Сообщений: 408
Пол: Мужской

Репутация: -  3  +


Вопросы?


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Знаток
****

Группа: Пользователи
Сообщений: 408
Пол: Мужской

Репутация: -  3  +


У этой вещи есть один недостаток - писалась давно, расчитана не на ньюбов в паскале, и это не простое перемещение =), ах да еще не оптимизированность


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


offtopнаписал 3 отличных модуля -
1. вывод и сохранение PCX
2. то-же для BMP
3. сохранение в BMP скриншота в нестандартных видеорежимах (VESA и SVGA)


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Гы пасиб конечно, а вот как я из пайнта суну 24битную картинку, в 16 цветов (VGA)??? Пускай даже и с юнитом???

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

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

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


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
24битную картинку

так ты 16 цветную запихивай smile.gif


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Бывалый
***

Группа: Пользователи
Сообщений: 206
Пол: Мужской

Репутация: -  3  +


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

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 18:53
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name