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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Масив спрайтов 
:(
    Опции темы
Magnetto
Дата 21.3.2008, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



собственно меня интересует такой вопрос

1)допустим у меня есть один спрайт , но мне нужно выводить на екран случайные рисунки , каким образом можно эти рисунки запихнуть в массив так , чтобы поиск спрайтом рисунка производился не по его названию , а к , примеру , по номеру ячейки массива

2)допустим программа случайным образом будет выводить на экран по одному спрайту со случайным изображением , каким образом можно описать , к примеру , 10-100 спрайтов кроме как в лоб описывать каждый? 

чтоб немножко ясней было , допустим сверху екрана у нас падают разные снежинки , как програмно описать создание снежинок?


и еще вопрос , решил втупую пойти и создать , к примеру 10 итемов(10 обоин 800*600 общим размером 1 мб) в dximagelist , в результате мой проект начал компилироваться 5-10 минут на Атлон 3000+ , каким образом можно уменьшить такую долгую загрузку ресурсов?..может быть внешне подключать изображения?..как?


Это сообщение отредактировал(а) Magnetto - 22.3.2008, 00:14
PM MAIL WWW ICQ   Вверх
Bitter
Дата 22.3.2008, 21:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

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



Во-первых, что Вы подразумеваете под словом "спрайт"? Спрайт это и есть рисунок. Тогда что значит выражение "поиск спрайтом рисунка"?

Другое дело, если Вы имеете в виду объект, хранящий в себе массив спрайтов, и выводящий их в случайном порядке. Тогда это можно сделать так:

Объект снежинка:

Код


TSprites=class
 Sprites:array of Bitmap;
 SCount:integer;
 procedure Init;
 procedure Draw(x,y:integer; Index:integer);
 procedure Delete;
end;

TSnowflake=record
 x,y:integer;
end;

TSnow=class
 Snowflakes:array of TSnowflake;
 SCount:integer;
 procedure Init;
 procedure AddSnowflake(ax,ay:integer);
 procedure Draw;
 procedure Delete;
end;

var Snow:TSnow;
      Sprites:TSprites;
//////////////////
Описываем класс TSprites

procedure TSprites.Init;
var i:integer;
begin
 SCount:=10; /// Будем загружать 10 картинок

 for i:=1 to SCount do
 begin
  Sprites[i-1]:=TBitmap.Create;
  Sprites[i-1].LoadFromFile('Sprite'+IntToStr(i)+'.bmp');
 end;
end;

procedure TSprites.Draw(x,y:integer; Index:integer);
begin
 if Index=-1 then  Index:=Random(SCount);
// Тут рисуем Sprite[Index] в координатах Х, Y
end;

procedure TSprites.Delete;
var i:integer;
begin
 for i:=1 to SCount do
  Sprites[i-1].Bitmap.Free;
 SetLength(Sprites,0);
end;

// Описываем класс TSnow

procedure TSnow.Init;
var i:integer;
begin
 SCount:=0;
 SetLength(Snowflakes,SCount); 
end;

procedure TSnow.Draw;
var i:integer;
begin
 for i:=1 to SCount do
  Sprites.Draw(Snowflakes[i-1].x, Snowflakes[i-1].y, -1);  // Рисуем снежинки со случайным рисунком
end;

procedure TSnow.AddSnowflake(ax,ay:integer);
begin
 SCount:=SCount+1;
 SetLength(Snowflakes,SCount);
 Snowflakes[SCount-1].x:=ax; 
 Snowflakes[SCount-1].y:=ay; 
end;

procedure TSnow.Delete;
begin
 SetLength(Snowflakes,0);
end;

///////  Инициализация объектов Snowflake и Sprites (Например в FormCreate)

 Snow:=TSnow.Create;
 Snow.Init;

 Sprites:=TSprites.Create;
 Sprites.Init;

 for i:=1 to 10 do
  Snow.AddSnowflake(Random(ScreenWidth), Random(ScreenHeight));

//////// Рисование снежинок (Например в Timer)

 Snow.Draw;

//////// Удаление объектов (Например в FormDestroy)

 Snow.Delete;
 Snow.Free;

 Sprites.Delete;
 Sprites.Free;


Я код не проверял на работоспособность, просто написал логику работы. 
Смысл такой: Создаем классы TSnow (снег) и TSprites(спрайты), а так же структуру TSnowflake (снежинка). Первый класс работает со всеми снежинками на экране, второй хранит экземпляры картинок снежинки. 
Структура TSnowflake хранит координаты каждой снежинки.

В начале инициализируем объект класса TSnow, после чего добавляем в его динамический массив снежинки. И в таймере рисуем их. В конце программы не забываем очистить память.

Кроме того в начале инициализируем объект класса TSprites, который заргужает с диска битмапы с рисунками снежинок.

Это один из вариантов.



PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

FAQ раздела лежит здесь!


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

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


 




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


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

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