Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Карточная игра, Работа с графикой 
:(
    Опции темы
MacTep
Дата 23.8.2003, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Ребята! Помогите! Проблема вот в чем: надо объединить колоду карт (рисованные картинки в формате BMP) в один файл (библиотеку). Сделать это нужно таким образом, чтобы потом из этого файла можно было их считывать. А при необходимости написать (создать) еще одну такую библиотеку карт, чтобы можно было в любой момент пользователю заменить вид карт на другой. Короче, хочу добавить к своей игрушке небольшой аддон, но только пока мыслей, как это сделать нет! Помогите!!!

Заранее благодарен!


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
stab
Дата 23.8.2003, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



простейший способ сделать dll и в нее запихать как ресурсы твои картинки, а потом их из dll загружать при помощи TBitmap.LoadFromResourceName


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
December
Дата 23.8.2003, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



Если карты фиксированной высоты/ширины, то просто слей их одну за другой в столбик в один бмп, и считывай потом фрагментами.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
MacTep
Дата 5.9.2003, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Вопрос для cully: ты вот написал, мол, создай dll и в него запихай свои картинки. А вот это и самый интересный вопрос: как это сделать? Как создать DLL? как запихать в него картинки, как потом их из него считывать. Ответьте пожалуйста!!!


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
x77
Дата 5.9.2003, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



2 Cully: не глумись над человеком, LoadFromResourceName подгружает не из dll-ки, а из ресурса:
Цитата
Loads a bitmap resource into the bitmap object.

procedure LoadFromResourceName(Instance: THandle; const ResName: string);

Description

LoadFromResourceName loads the specified bitmap resource along with palette information from a module's executable file. Specify the resource to be loaded as the value of ResName.

Note: Use this routine to load bitmaps from RES files instead of the LoadBitmap API. LoadBitmap does not support 256-color images.


2 МасТер: но в одном Cully прав: использование вышеозначенной функции - простейший путь. в ImageEditor создаёшь ресурс, забиваешь в него свои bmp-ки, цепляешь ресурс к экзешнику, а потом загружаешь из него картинки, скажем, в ImageList.


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
x77
Дата 5.9.2003, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



упс... менять колоды таким образом не получится, надо будет писать ещё и редактор ресурсов, что возможно, но простейшим не является. сорри, я просмотрел про смену колод. присоединяюсь к December'у. smile.gif


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
beif
Дата 5.9.2003, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 25.8.2003
Где: Россия, Кемерово

Репутация: нет
Всего: 1



Да зачем DLL делать? Просто создавать большой .bmp. Например у тебя 36 карт, размером h на w, так создаешь большой bmp-ресурс размером скажем 4*h на 9*w, и вносишь туда рисунки карт по мастям в строку. Так создаешь несколько bmp-шек и все, а в процессе игры выбираешь из какого файла грузить рисунки smile.gif А считывать рисунки очень простым циклом и все smile.gif
PM MAIL WWW ICQ   Вверх
x77
Дата 5.9.2003, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



о чём и написал December smile.gif


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
beif
Дата 5.9.2003, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 25.8.2003
Где: Россия, Кемерово

Репутация: нет
Всего: 1



да smile.gif только в один столбик (строку) неудобно бмп делать и править smile.gif
PM MAIL WWW ICQ   Вверх
stab
Дата 6.9.2003, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



как делать dll с ресурсами:

1. Запускаем Delphi. (У меня Delphi 6)
2. File -> New -> Other -> DLL Wizard
3. Удаляем:

Код
{ Important note about DLL memory management: ShareMem must be the
 first unit in your library's USES clause AND your project's (select
 Project-View Source) USES clause if your DLL exports any procedures or
 functions that pass strings as parameters or function results. This
 applies to all strings passed to and from your DLL--even those that
 are nested in records and classes. ShareMem is the interface unit to
 the BORLNDMM.DLL shared memory manager, which must be deployed along
 with your DLL. To avoid using BORLNDMM.DLL, pass string information
 using PChar or ShortString parameters. }



Код
uses
 SysUtils,
 Classes;


остается:

Код
library Project2;

{$R *.res}

begin
end.


4. Деляем Save All в папку, скажем, RES DLL.
5. Нажимаем Ctrl+F9.
6. В папке RES DLL находим файл с расширением *.res. (У меня project2.res.) Это ресурсы которые будут включены в библиотеку. На данный момент там только иконка, которая не понять зачем нужна...
7. Ищем какой-нить редактор ресурсов. Я использую втсроеный в Visual Studio. Если VS нет, то на диске с Delphi обычно есть папка Workshop, там борландовый редактор ресурсов -- кривой до ужаса. smile.gif Но на худой конец и он сойдет.
8. Открываем project2.res в редакторе ресурсов. Видим, что иконка есть smile.gif Ищем команду Import или подобную, выбираем файл битмапа который должен быть в ресурсах. Таким образом мы добавали ресурс типа RT_BITMAP.
9. Запоминаем цифирку которая стоит рядом с добавленой картинкой -- это идентификатор ресурса.
10. Сохраняем и зыкрываем редактор ресурсов.
11. В Delphi делаем Project -> Build ProjcetX
12. Закрываем проект.

как использовать dll с ресурсами:

1. Скопируем полученную dll в папку проекта, который должен использовать картинку из dll.
2. В проекте делаем так:

Код

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 hm: Integer;
 bm: TBitmap;
begin
 hm := LoadLibraryEx('project2.dll', 0, LOAD_LIBRARY_AS_DATAFILE);
 if hm <> 0 then
 begin
   bm := TBitmap.Create;
   bm.LoadFromResourceID(hm, 102 {та самая цифирка, которую запомнили});
   Canvas.Draw(0, 0, bm);
   bm.Free;
   FreeLibrary(hm);
 end;
end;

end.


з.ы. подразумевается, что каждая карта будет отдельным ресурсом тогда загрузка примерно так будет выглядеть:
Код

for i := 0 to 35 do
 card_bmp[i].LoadFromResourceID(hm, 100 + i);



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
beif
Дата 6.9.2003, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 25.8.2003
Где: Россия, Кемерово

Репутация: нет
Всего: 1



cully круто!!! Это вам не это.... ДА!
Я просто поражен твоим ответом!!!
Настолько побробно и исчерпывающе, что тут и дополнительных вопросов не задашь и ни к чему не прикопаешься... Побольше бы таких ответов smile.gif А все-таки в DLL рисунки же будут больше занимать места? Однако их проще считывать...
PM MAIL WWW ICQ   Вверх
MacTep
Дата 10.9.2003, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Спасибо, ребята! Вы мне очень помогли! Я обязательно сделаю так, как вы просили! Спасибо! Cully, ты просто супер! Надеюсь, все получится!


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0592 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.