[delphi] Image1 -> Plansza do gry

0

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?

0

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.

0

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?

0

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;
0

Albo TImageList.

0

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

0

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 :)

0

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.

0

Jeżeli w tę strone to proponuje zamiast TCanvas zastosować OpenGL

0

To rozwiązanie ma dwie wady:

  1. Tu nie jestem pewny, czy nie ma czegoś równie prostego - nie wystarczy "Canvas.CopyRect"
  2. Wymaga dodatkowych bibliotek

1 użytkowników online, w tym zalogowanych: 0, gości: 1