Mam pytanie chce zrobić plansze go gry, która składałaby się z wielu obrazków ułożonych w konkretnej kolejności. Pytanie brzmi jak najłatwiej to zrobić. Czy jest jakiś komponent (bo z tego co wiem to na pewno nie TImage) ażeby wczytać kilka obrazków na raz do niego aby razem stworzyły plansze?
Jeżeli liczba obrazków z których składa się plansza będzie się zmieniać to proponuje dynamicznie tworzyć odpowiednią ilość TImage i odpowiednio nimi zarządzać. Nie jest to trudne zwłaszcza gdy są umieszczone w tablicy.
Chce zrobic plansze 10x10 obrazków. Czyli jest to 100 obrazków, jak w takim razie zrobić procedure żeby wczytać do 100 Image 100 obrazków?
Mam nadzieje że nie przyjdzie ci do głowy ułożyć 100 TImage na formie a pużniej do każdego wywoływać LoadFromFile bo to jest nie do przyjęcia.
Images:Array[0..99] of TImage;
procedure TForm1.Createimages;
var
w: Integer;
begin
for w:= 0 to 99 do begin
Images[w]:= TImage.Create(Owner);
Images[w].Parent:= Form1;
Images[w].Top:= _top;
Images[w].Left:= _left;
Images[w].Tag:= w + 1;
Images[w].Name:= 'Image' + IntToStr(w);
Images[w].pisture.LoadFromFile('nazwapliku' + IntToStr(w) + '.jpg');
end;
end;
Albo TImageList.
ja bym jednak proponował jeden PaintBox (od biedy Image) i ręcnie narysować na nim te 100 obrazków. Jak umiejętnie oprogramujesz to zmiana na np 10x20 obrazków to będzie zmiana jednej zmiennej. Mniej zużyjesz pamięci, nie będzie problemów z obracaniem, skalowaniem i przesuwaniem, jedynie trochę więcej pracy na start ale to zaprocentuje
Osobiście zastosowałbym jeszcze inne rozwiązanie - rysować wprost na Canvasie. nie tworzysz dodatkowego komponentu, a jedyne o co musisz zadbać, to odświeżanie w onPaint formy. Ale ja należę do tych ludzi, którzy nie robią rzeczy normalnie :)
Adam.Pilorz ma rację: możesz rysować po Canvas TBitmap'y, a w OnPaint tylko tą bitmapkę wrzucać z powrotem na Canvas formy, czy też PaintBox'a, jak tam wolisz.
Jeżeli w tę strone to proponuje zamiast TCanvas zastosować OpenGL
To rozwiązanie ma dwie wady:
- Tu nie jestem pewny, czy nie ma czegoś równie prostego - nie wystarczy "Canvas.CopyRect"
- Wymaga dodatkowych bibliotek