Delphi i praca z warstwami obrazków, elementów

Delphi i praca z warstwami obrazków, elementów
modrih
  • Rejestracja:około 19 lat
  • Ostatnio:około 5 lat
0

Witam!

Sytuacja wygląda tak: Rysuje na TPaintBox mapkę która złożona jest z elementów różnego typu (woda, las, trawa) :) - składających się z kwadratowych pól, sęk polega na tym że chciałbym aby niektóre pola, oraz elementy nanoszone na takowe które są umieszczone na mapce były "pod spodem" a niektóre nad obiektem którym się poruszam. Załóżmy że to ludzik, kwadrat, lub cokolwiek porusza się po mapce, i gdy są drzewa to chowa się pod koroną drzew, ale z drugiej strony nie chowa się pod trawą, czy też pniem drzewa :)

Mam nadzieje że rozumiecie o co mi chodzi :) Tutaj główną umiejętnością jest operowanie na warstwach, niestety nie wiem w jaki sposób mógłbym zdefiniować na "twardo" że to jest taką warstwą, a to jest taką i aby były zachowane te priorytety "kto na kogo włazi" + obsługa przezroczystości oczywiście.

Kolejne zapytanie to takie czy TPaintBox to dobre rozwiązanie do ładowania dość obszernej mapy i tego typu zastosowań? (mapa ładowała by się dynamicznie, - po ruchach aktualizowane odpowiednie "pixele").

Do tego będę oprogramowywał dość dużo zdarzeń - np. takich aby ludzik nie właził mi na pień drzewa przykładowo, czy na słup :), ale z drugiej strony mógł za nim przejść.

No nic, czekam na Wasze pomysły, jeżeli nie to będę musiał kombinować z przeładowywaniem odpowiednio wszystkich "pikseli" mapy, co może okazać się trochę zjadliwe dla zasobów komputera (choć z drugiej strony podczas ruchów i tak musze przeładowywać całą mapke), to raz, dwa monotonne, bowiem zauważyłem że zależnie od tego kiedy jaki obiekt postawię to jeden nakłada się na drugi (jeżeli najpierw, trawe, potem ludzik, to ludzik jest na "górze"), ale takie tworzenie obiektów to przesada (ciągły przeładunek w odpowiedniej kolejności).

Pozdrawiam

edytowany 2x, ostatnio: modrih
Riddle
Jeżeli chcesz zrobić grę MMO, to ja bym Mapę załadował do TImage. Tego gościa też. Gościu stoi, a mapę pod nim poruszaj zmieniając Top i Left, Image'a z mapą.
Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 13 lat
  • Postów:7923
0

- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
GR
  • Rejestracja:około 14 lat
  • Ostatnio:prawie 9 lat
  • Postów:34
0

Wprawdzie nie doczytałem do końca, ale domyślam się, że chodzi o kolejność wyświetlania grafik ;). Po napotkaniu w timerze ( zegarze gry) na opcję rysowania w konkretnej warstwie zapisz w buforze grafikę i wyświetl dopiero wtedy, gdy przyjdzie na to czas :P

modrih
  • Rejestracja:około 19 lat
  • Ostatnio:około 5 lat
0

A no właśnie nie do końca o to chodzi, i teraz pytanie czy muszę to robić tak jak Ty napisałeś (jedyny znany mi sposób). Czy można to jakoś inaczej zrobić, a może jakiś komponent dotyczący warstw?

Po napotkaniu w timerze ( zegarze gry) na opcję rysowania w konkretnej warstwie zapisz w buforze grafikę i wyświetl dopiero wtedy, gdy przyjdzie na to czas :P

W konkretnej warstwie powiadasz...? Ale właśnie jak rysować w warstwach i tak dalej..., jak je potem ustawiać.

edytowany 3x, ostatnio: modrih
GR
  • Rejestracja:około 14 lat
  • Ostatnio:prawie 9 lat
  • Postów:34
0

Hmm... Nie wiem jakby ci to wytłumaczyć, bo jest na pewno wiele sposobów, a nie napiszę ci tego, bo trochę trzeba by przy tym posiedzieć.

Ale dam ci radę. Ściągnij se komponenty graficzne, które zrobią to w pewnym sensie za ciebie. Polecam Omegę. Nie są to nowe komponenty, ale jak dla mnie są bardzo dobre i łatwe do nauki. Jakbyś chciał się o tym coś dowiedzieć to pisz do mnie albo wejdź na unit1.pl.

Na wstępie mogę ci pokazać jak wygląda określenie warstwy:

Kopiuj
 Obiekt.Z:= 1; //Gdzie 1 to nr warstwy :D 

Im większy numer tym rysowanie będzie późniejsze.

edytowany 1x, ostatnio: gryguc
modrih
  • Rejestracja:około 19 lat
  • Ostatnio:około 5 lat
0

I dzięki temu będę mógł szybko przeskakiwać i manipulować warstwami? :) (dzięki m.in. komponentom z paczki omega)

Omega hmy, ciekawe czy zadziała na najnowszym Delphi XE :) wątpie trochę.

edytowany 1x, ostatnio: modrih
GR
  • Rejestracja:około 14 lat
  • Ostatnio:prawie 9 lat
  • Postów:34
0

Niestety działa tylko na Delphi 5, 6, 7, ale naprawdę polecam. Poza tym warstwy to nie tylko jedna rzecz, którą można łatwo manipulować. Jest jeszcze świetny test kolizji, sprity, obsługa dźwięków w 3d, obsługa joysticków i wiele innych :)

Tworzę na tym silnik 2D i jestem w pełni zadowolony

edytowany 3x, ostatnio: gryguc
AN
  • Rejestracja:ponad 14 lat
  • Ostatnio:5 miesięcy
  • Postów:125
0

Jeśli chodzi o XE to polecam Asphyre Extreme lub Sphinx i tamtejszy SpriteEngine, podobny do tego z Omegi, a działa na XE (po drobnych przeróbkach). Tu masz link do strony producenta: http://dev.ixchels.net/products

modrih
  • Rejestracja:około 19 lat
  • Ostatnio:około 5 lat
0

Spodobały mi się komponenty Graphic32, natomiast zastanawia mnie dlaczego nie mogę na warstwie rysować... to znaczy mogę, ale widzę dziury a nie nakładający się obraz:

dla przykładu jeżeli chcę:

Kopiuj
B.Bitmap.Canvas.Ellipse(60,60,2,2);

to widzę coś takiego:

user image

jeszcze to co może pomóc w znalezieniu błędu to kod:

Kopiuj
      with B.Bitmap do
  begin
    BeginUpdate;

    // Different platforms store resource files on different locations
    Assert(FileExists(pathMedia + 'delphi.jpg'));
    LoadFromFile(pathMedia + 'delphi.jpg');

    TLinearResampler.Create(B.Bitmap);

    //ensure good looking edge, dynamic alternative to SetBorderTransparent
    TCustomResampler(B.Bitmap.Resampler).PixelAccessMode := pamTransparentEdge;

    B.BitmapCenter := FloatPoint(Width / 1, Height / 1);
    MasterAlpha := 200;
    FrameRectS(BoundsRect, $FFFFFFFF);
    DrawMode := dmBlend;
    EndUpdate;
    Changed;
  end;

I nie chodzi tutaj bynajmniej o kolor pisaka, bo gdy chcę coś skopiować i narysować na warstwę tak jak tutaj:

Kopiuj
TreeImg.Canvas.CopyRect(Rect(x*60, y*60, (x*60)+60, (y*60)+60),
B.Bitmap.Canvas, Rect(0, 0, 60, 60));

to problem jest ten sam.

Dziękuje za ewentualne podpowiedzi.

edytowany 1x, ostatnio: modrih

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.