LordLost Posted June 26, 2010 Report Share Posted June 26, 2010 Witam, mam kolejny problem Rysowałem sobie różne rzeczy na ekranie w Delphi+Omega i fajnie było dopóki nie zaczęła być potrzebna kolejność rysowania Przedstawiłem na screenie mój problem, obszary zakreślone na niebiesko powinny być rysowane pod spodem a nie są. Obiekty nie są potomkami TOmegaSprite ani nic w tym stylu a rysuje Draw4Col z OmegaImageList. Udało mi się rozwiązać ten problem ifami, gdy obiekty stały obok siebie, a jak je ustawiłem jeden na drugim to znowu źle wyszło Teraz Nie wiem jak lepiej to zrobić: 1. Moja klasa ma dziedziczyć po TSprite? 2. Zadeklarować w klasie 5 zmiennych typu TSprite dla każdej ściany osobny? 3. Rozbudować system ifów(warunków)? Oto klasy, tak dla obrazu sytuacji: TPointX = record X, Y : Integer; Color : TOmegaColor; end; TSideX = record FBmp : Integer; FPoint1 : TPointX; FPoint2 : TPointX; FPoint3 : TPointX; FPoint4 : TPointX; end; TObjectX = class private FStatus, FCol : Boolean; FPosX, FPosY, FPosZ, FWidth, FHeight, FWeight, FLength : Integer; FSideU, FSideN, FSideS, FSideW, FSideE : TSideX; public constructor PCreate(Status, Col : Boolean; X, Y, Z, W, H, L, BmpU, BmpN, BmpS, BmpW, BmpE : Integer); procedure PDraw(ImgList : TOmegaImageList; DelX, DelY : Integer); end; Screen: Jak ktoś ma ciekawe pomysły to proszę o pomoc Link to comment Share on other sites More sharing options...
Jason Posted June 26, 2010 Report Share Posted June 26, 2010 Ja bym zastosowal cos do 3D, np. OpenGL - tam rysujesz wszystko na swoim miejscu, tam gdzie ma byc i on sam okresla co jest na wierzchu, a co przykryte Link to comment Share on other sites More sharing options...
LordLost Posted June 26, 2010 Author Report Share Posted June 26, 2010 Ja bym zastosowal cos do 3D, np. OpenGL - tam rysujesz wszystko na swoim miejscu, tam gdzie ma byc i on sam okresla co jest na wierzchu, a co przykryte Jak mówisz że w 3D się wszystko samo robi to może dobry pomysł Poza tym mam oś Z więc mam trzeci wymiar(a że nie działa poprawnie to inna sprawa) Link to comment Share on other sites More sharing options...
LordLost Posted June 27, 2010 Author Report Share Posted June 27, 2010 Niby zrobiłem to warunkami w procedurze PDraw, ale tak muszę przekazywać tablice z obiektami. Niby działa, ale podczas przesuwania mapy czasami migają(ukrywają się) ściany które powinny być widoczne To chyba wina zaokrąglania liczb do Integer, może spróbować zaokrąglać wszystko podczas rysowania a obliczać na liczbach zmiennoprzecinkowych? Link to comment Share on other sites More sharing options...
Toster Posted June 27, 2010 Report Share Posted June 27, 2010 heh czy to nie jest rozmowa typu: janek: wiesz chce zabic muche, ale nie wiem jak karol: o stary wez armate nie wystarczy zwykle rysowanie na warstwach ? Always Dark<br /> Link to comment Share on other sites More sharing options...
LordLost Posted June 27, 2010 Author Report Share Posted June 27, 2010 heh czy to nie jest rozmowa typu: janek: wiesz chce zabic muche, ale nie wiem jak karol: o stary wez armate nie wystarczy zwykle rysowanie na warstwach ? To znaczy, że mam obiekty rysować tak jak grunt(np: od lewego górnego rogu do dolnego prawego)? Nie bardzo wiem jak to może wyglądać, ale dam sobie spokój ze stawianiem obiektów na sobie, grunt żeby działało w jednym poziomie. Link to comment Share on other sites More sharing options...
Toster Posted June 28, 2010 Report Share Posted June 28, 2010 najprostrza implementacja polega na tym ze kazda warstwa ma swoja tablice czyli jak masz np mape o wymiarach NxM to dodajesz jeszcze wymiar L ktory mowi o kolejnych warstwach. I tak np na warstwie 0 robisz ziemie, na warstwie 1 domki, na 2 ludziki itd itd. W zaleznosci co chcesz. No i na koniec petla bedzie mniej wiecej taka for Warstwa := 0 to 3 do for X := 0 to MapWidth-1 do for Y := o to MapHeight-1 do RysujTaila( Map[x, y, warstwa], x, y); Always Dark<br /> Link to comment Share on other sites More sharing options...
LordLost Posted June 28, 2010 Author Report Share Posted June 28, 2010 Wprowadzę trochę ograniczeń do edytora to będzie chyba działać, nie wiem czy warstwy dałby tutaj rade, bo obiekty na ekranie musiałby rysować się "jak ślimak" od najdalszych do najbliższych (do środka ekranu) i w zależności do położenia ekranu kolejność się zmienia. Na Screenie(fragment) czerwony krzyżyk to środek ekranu jeśli by był z drugiej strony skrzynek to inne ściany by były rysowane i kolejność wyświetlania też byłaby inna. Edit: Na razie mam jeden poziom i po sesji(w środę) będę się dalej bawił, bo to dłuższy temat Na razie mam układanie klocków Link to comment Share on other sites More sharing options...
LordLost Posted July 1, 2010 Author Report Share Posted July 1, 2010 Poprzedni problem nie do końca rozwiązany i jeszcze mam kilka pytań 1. Nie wiem jak nie rysować gruntu który jest zasłonięty przez obiekt. Teraz przekazuje jako parametr tablice z obiektami do procedury draw i przy rysowaniu każdego(a trochę ich jest) kafelka sprawdza czy jego X i Y są równe X i Y któregoś z obiektu(ilość operacji:= ilość kafli* ilość obiektów). Przez to spada fps a jak rysuje podwójnie też nie jest lepiej 2. Jak pobrać część obrazka w OmegaImageList? Tak jak klatki do animacji, które daje się w jednym pliku, najlepiej jakby można było pobrać część obrazka podając X1, Y1, X2, Y2. Jeśli OmegaImageList nie ma wbudowanej tej funkcji to dam sobie z tym spokój. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.