Skocz do zawartości

[DelphiX] a mapy izometryczne-dziwne zachowanie krawędzi.


Greensand

Polecane posty

Mam problem ze scrollowaniem mapy w DelphiX, która złożona jest ze spritów. Otóż pojawił się następujący problem z dziwnym zachowaniem krawędzi mapy. Efekt da się zaobserwować na obrazku (te trójkątne czarne dziury na brzegach, które zaznaczyłem strzałkami).
Dodam też, że scrollwanie odbywa się przez zmianę położenia wszystkich spritów w pętli. Np w dół sprite[x, y].y:=sprite[x, y].y+1 itd...
Z góry dziękuje za odpowiedzi...
Obrazek

Link do komentarza
Udostępnij na innych stronach

Pomysł Drazeka wydaje się dobry tyle że trudny w realizacji.
Ponieważ sprity za nic nie chcą (przynajmniej w pętli) się narysować jeśli wychodzą
za brzegi DXDraw. Potrzebna pewnie jest jakaś opcja do włączenia tylko jaka ?
Niemniej dziękuje za zainteresowanie tematem i zachęcam do dalszych prób rozwiązania problemu
Link do komentarza
Udostępnij na innych stronach

A mógłbyś wskazać miejsce w kodzie w którym wedle ciebie muszą być zmiany?? Bo mi nie wychodzi sad.gif

[code=Delphi]
procedure Maluj_Mape(Xs, Ys: integer);
var
x,y:integer;
Y[BLHX^BNLHX^HBY[BBŚ7V&UŁŚ7V&U36ŚMmtd%Mmtdeź4(4)
hN)Ś4(%UŃ4(1a%MŃŃŃĄa
if isRight in DXInput.States then Xs:=-5;
if isUp in DXK]][MNBYŃ[[]][_ŁÓS3ŁÓ3ŁÓEWBWFFSb4'WGF!a%MŃŃŃĄąŃQŃ4(5}`;10 then Xs:=5;
if Mouse_X>DXDraw.SurfaceWidth-10 then\"KMNBY[WIL[MNBY[WIŃ^7W& amp;f6TVvBÓ#FV3ŁÓSVR22eaą4(M
4(`raw.flip; [/code]

Link do komentarza
Udostępnij na innych stronach

[code=Delphi] procedure TForm1.FormCreate(Sender: TObject);
var
x,y:inteBY[BBHHYm[^Ź[KXlHXŚWG'7ŚćVGG&rF3ŁGG&rF2śFfĆÓ=Ń=ŃŹm]ŃY ąt4(4) to max_x+3 do
for y:=1 to max_y+3 do
begin
IzoSquare[xWNU[XYT]KX]JLKŃ[[K[[JNB^]XŁ7F'EŁSŁSÓS6ŚŚ7V&mtdĄMŃŃdŹĄź4(%M[x, y].Image := Form1.DXImageList.Items.Items[random(2)]
enBBB[ [/code]

Spróbuj tak.
:)
Link do komentarza
Udostępnij na innych stronach

Panowie, przeciez tutaj nie jest blad w tej petli... poprostu DirectDraw nie rysuje spritow ktore sa czesciowo poza ekranem, no a przynajmniej standardowo, bo BltFast zawsze nie bedzie ich rysowal i tutaj sie nic nie poradzi, ale jest tez funkcja do rysowania, BitBlt czy cos takiego ktora rysuje sprajty mimo ze sa poza ekranem, co prawda z tego co pamietam trzeba do tego jeszcze ustawic jakis obiekt clippera, ale po tylu wskazowkach juz na pewno sam znajdziesz info w sieci.
Link do komentarza
Udostępnij na innych stronach

Co do posta Wachu. Chodzi ci o http://bimbus.org/index.php?strona=64&go=5...=DirectX&to=316 ???
Tam jest to w czystym direct...i mam problemy z przeniesieniem samej funkcji do DelphiX (chociaż masz racja istnieje tam taka funkcja BitBlt
ale ma wiele parametrów których nie rozumiem do końca o co chodzi z tym HDC???
Odnośnie posta Drazka w tym programie też występuje ten problem tyle że nie rzuca się tak bardzo w oczy sam to sprawdź smile.gif
A może ma ktoś inny pomysł jak zrobić mapę izometryczną dla której da się zrobić edytor. Trzeba opracować funkcje klikania na poszczególne
kwadraty prawie sobie z tym poradziłem, przez podzielenie kwadracika na trójkąty. Ale czekam w nadziei że ktoś może mieć lepszy czyt. szybszy pomysł.

Link do komentarza
Udostępnij na innych stronach

Co do rysowanie obiektow TSprite, TImageSprite (rozumiem ze na tych klasach oparles swoja mapę, najlepiej wybierz TImageSprite- możesz sobie potem opracowac animacje w petli jakiegos wybranego pola swiata, masz dostępne zmienne AnimLoop i inne) to sa one rysowane dopoki jakis ich fragment jest na powierzchni TDXDraw.Surface.Canvas. Mozna sie o tym latwo przekonac tworzac duszka i przesuwajac go poza obszar zdefiniowanej rozdzielczosci... Wracając do Twojego problemu szukaj "błedu" w warunku wyswietlania pol widocznych na ekranie lub postaraj się stworzyc własną procedurę OnDraw I tak jak podsuwa Ci pomysł Drazek dodaj odpowiednio wiecej wyswietlanych wierszy i kolumn

pozdrawiam oksal

Link do komentarza
Udostępnij na innych stronach

[quote] ...
A może ma ktoś inny pomysł jak zrobić mapę izometryczną dla której da się zrobić edytor. Trzeba opracować funkcje klikania na poszczególne
kwadraty prawie sobie z tym poradziłem, przez podzielenie kwadracika na trójkąty. Ale czekam w nadziei że ktoś może mieć lepszy czyt. szybszy pomysł. [/quote]
Spojrz na świat inaczej:-)
[IMG]http://upload2.postimage.org/54753/izometryczna.jpg\" border=\"0\" alt=\"\" />

Powyzszy obrazek przedstawia kolejno wyswietlane pola w dowolnej petli... Skoro Twoj projekt oparty jest na duszkach to wystarczy obsluzyc zdarzenie klikniecia w takim duszku (na rysunku widac ze istnieje 1/2 obszaru dla kazdej kosci mapy swiata, ktora jest nie przykryta :-)).A jak obsłuzyc takie zdarzenie to znajdziesz na starej lokalizacji forum.. bajo.... Tak wiec masz proste i duzo szybsze rozwiazanie niz podział na trojkaty. Swego czasu na to wpadłem i zastosowałem w swoim edytorze swiatow 2Dwww.delphi.ilion.pl w którym mogę budowac swiat prostokatny jak i izometryczny

pozdrawiam oksal

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...