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:prawie 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:ponad 12 lat
  • Postów:7923
0

- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
GR
  • Rejestracja:prawie 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:prawie 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:prawie 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:prawie 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:prawie 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:4 miesiące
  • 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:prawie 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
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)