Skocz do zawartości

[Delphi] Komunikacja między modułami w delphi


LordLost

Polecane posty

Witam

Mam problem z komunikacją miedzy modułami w Delphi. Jeśli dołączam do modułu głównego ‘Unit1’ następny ‘Unit2’ z klasą(jeden unit jedna klasa), zmiennymi i procedurami do niej, to w module głównym mogę się odwoływać do procedur itd. które są w module pobocznym, ale czy da się na odwrót?

Zmienne można dodać jako parametry w procedurach, ale jak w ‘Unit2’ odwołać się do procedury komponentu który jest w klasie w ‘Unit1'?

Szukałem jak to można zrobić, ale wszystkie przykłady są tak zbudowane, że wszystko pięknie chodzi i nic ze sobą nie koliduje, a w rzeczywistości to ….

Wybaczcie za pytanie, ale nie bardzo wiem jak to zrobić i jak widać jestem początkujący, liczę na pomoc i wyrozumiałość :)

Link do komentarza
Udostępnij na innych stronach

w rzeczywistosci to albo masz kod dobrze zaprojektowany albo masz 2 wyjscia:

a) Łatanie i bluzganie

B) refactor klas/modulow.

 

Kilka dobrych lat zajelo mi ogarniecie tego do poziomu ktory mnie jako tako satysfakcjonuje, wiec pewnie tobie tez latwo nie pojdzie ;)

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Wybieram wyjście a ;)

Czyli rozumiem że trzeba tak zrobić, żeby nie było potrzeby odwoływać się z innych modułów do modułu głównego?

Mam OmegaImageList na formie w pierwszym unicie i jak chcę wyświetlić obrazek w procedurce(rysuj) w unicie2 to nie mogę :( Pomyślę jak to zrobić, ale nic nie obiecuje :P

Link do komentarza
Udostępnij na innych stronach

Wieczorem spróbuje, muszę ogarnąć lepiej klasy, bo nie ogarniam, szczególnie jak tworzycie te mapki kafelkowe w omedze :) Ja zrobiłem dane mapy w tablicach i wczytywanie/rysowanie w pętlach to nawet działa, ale FPS mniejszy ;)

Edit:

Musiałem spróbować już teraz :)

w procedurze dałem parametr (Obj : TObject)

przy wywoływaniu procedury dałem (OmegaImageList), ale i tak nie wiem jak się teraz odwołać do ImageOmegaList, Obj. nie wystarczy :(

Chyba dam sobie spokój z tym na razie, wszystko zrobię w jednym unicie.

Link do komentarza
Udostępnij na innych stronach

Nie, rysuje tylko kafle na ekranie.

Oto pętelka, niby poza ekranem nie rysuje, ale 60FPSów średnio chodzi a na max obiektów i deszcz najgęstszy to nawet do 35 spada :(

Procedure TMap.PDrawGround;
 var
   KafelOdleglosc, IndeX, IndeXX, IndeXY : Integer;
 begin
   IndeXX:= 0;
   IndeXY:= 0;
   Index := 0;
   While IndeXY < Height do
     begin
       While IndeXX < Width do
         begin
           // KafelOdleglosc:= Round(SQRT(((MapEditor.Screen.Width div 2)-*
           // GroundX[index]-(Size/2))*((MapEditor.Screen.Width div 2)-
           // GroundX[index]-(Size/2))+((MapEditor.Screen.Height div 2)-
           // GroundY[index]-(Size/2))*((MapEditor.Screen.Height div 2)-
           // GroundY[index]-(Size/2))));
           GroundX[Index]:= IndexX* Size -VectorX;
           GroundY[Index]:= IndexY* Size -VectorY;
           //if not(GroundBmp[index] = 0)and(KafelOdleglosc <= Zasieg)  then
           If not(GroundBmp[Index] = 0)and(GroundX[Index] >=75 )and
             (GroundX[Index] <= MapEditor.Screen.Width+Size)and
             (GroundY[Index] >=-Size)and
             (GroundY[Index] <= MapEditor.Screen.Height) then
             begin
               If GroundCol[Index] then
                 MapEditor.ImList.ImageList.Items[GroundBmp[Index]].Draw
                 (GroundX[Index], GroundY[Index], 0, 0, 0, 1, 1, Alpha1-25,
                 Alpha1-100, Alpha1-100, 255, False, 1, 0) else
                 MapEditor.ImList.ImageList.Items[GroundBmp[Index]].Draw
                 (GroundX[Index], GroundY[Index], 0, 0, 0, 1, 1, Alpha1,
                 Alpha1, Alpha1, 255,False, 1, 0);
             end;
           Inc(IndexX);
           Inc(Index);
         end;
       if Indexx = Width then
         begin
           Indexx:= 0;
           Inc(Indexy);
         end;
     end;
 end;

Ale i tak pętla do bani

Link do komentarza
Udostępnij na innych stronach

Żeby spadł poniżej 50 to deszcz/śnieg muszę włączyć

deszcz/śnieg to od 1 do 1000 (1-60FPS 1000- 35FPS, fpsy spadają liniowo w dół wraz ze wzrostem kropel, liczone przy pełnym ekranie) kresek na ekranie(OmegaPrimitives1)

i jest jeszcze jeden problem jeśli rysuje obiekty (ściany) to grunt pod nimi też się rysuje i zabiera fpsy, co prawda jak się robi mapkę najlepiej skasować grunt który jest zasłonięty obiektami, ale co to za wyjście ;)

 

Trochę nie na temat, ale co tam :P

Link do komentarza
Udostępnij na innych stronach

a czemu to jako TObject ? Nie upcastuj tylko przeslij jako TImageOmageList albo w danej metodzie zrzutuj ponownie na wlasciwy typ.

Działa :D Co prawda paru słów z twojego postu nie zrozumiałem, ale trzeba było zrobić tak jak napisałeś :) Dzięki za pomoc, w sumie to mój problem rozwiązany.

Link do komentarza
Udostępnij na innych stronach

A ja się zastanawiam nad tymi prymitywami (deszcz) szczerze mówiąc nigdy nie używalem tego komponentu ale zastanawiam się czy to normalne przy nim, że tak leci wydajność :/

 

i jest jeszcze jeden problem jeśli rysuje obiekty (ściany) to grunt pod nimi też się rysuje i zabiera fpsy, co prawda jak się robi mapkę najlepiej skasować grunt który jest zasłonięty obiektami, ale co to za wyjście
Nie rozumiem? Zakładamy, ze masz widok jak w platformówce to jaki grunt jest zasłonięty ?

Ot taka mini-strona moja po godzinach :)http://www.wnetrzekuchni.pl

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

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

×
×
  • Utwórz nowe...