☰ Menu

Scene.hu

Magyar demoscene portál – grafikusok, zenészek, programozók alkotói közössége

Home Forums A Demokészítés művészete Programozás Róka fogta Csuka Reply To: Róka fogta Csuka

#5784
avatarBery
Member

Ha nincs záró TAG, akkor meddig tart a center, meg a bold, meg a többi? Egy szó vagy egy sor? Biztos, hogy jó ez így, hogy nincs záró TAG?  Ettől függetlenül én így csinálnám:  Tudod, hogy egy sor hány pixel, legyen ez LineWidth. A teljes szöveg mérete karakterekben legyen TextLength, a mutató, ami mutatja, hol jársz a feldolgozandó szövegben pedig Index. XSize-ban tároljuk, mennyi szabad hely van még az adott sorban. FullWidth-ben tároljuk, hogy az kiírandó sor összesen hány pixel széles lesz. LineArray-ban pedig az adott sort szövegestől, TAG-estől.Ez egy C-like metakód persze (a büdös életben soha nem programoztam még C-ben, de C-64 ASM-ban sem :)), amiben helyenként csak függvény (szubrutin, function ;)) neveket írtam, amik mögött azért egy relatív hosszabb kódrészlet van nyilván.XSize = LineWidth; // az elején nyilván miénk még a teljes sor FullWidth = 0; // egy sor szélességét ebben számoljuk összeIndex = 1; // Index a szöveg első karakterén áll LineArray = array(); // ez egy üres karaktertömbYpos = 0; // a lap tetejewhile (Index <= TextLength) do // ciklus a teljes szövegre     Word = GetWord; // kiveszünk egy szót Index-től kezdve    Index = Index + Length(Word); // a mutató átugorja az adott szót    if (Word <> TAG) // ha nem TAG a kivett szó    {      Width = GetFormatedWordWidth; // kiszámoljuk az adott szó szélességét      if (Width <= XSize) // elfér egy sorban    {        LineArray = LineArray + Word; // tároljuk a tömbünkben       XSize = XSize – Width; // a szó szélességével csökkent a szabad hely        FullWidth = FullWidth + Width; // Sor összélesség növelése     }      else       XSize = 0; // nem fér el, a sor végére értünk    }     else // egy TAG az adott szó    {             // nem csak a kép, a többi TAG-et is feldolgozzuk itt      if (SubStr(Word, 0, 4) == “{pic”) // ez bizony egy kép      {               Width = GetPicWidth; // kiszámoljuk a kép szélességét        if (Width <= XSize) // elfér még a sorban       {           LineArray = LineArray + Word; // tároljuk a kép TAG-et a tömbünkben          XSize = XSize – Width; // csökkent a szabad hely a sorban          FullWidth = FullWidth + Width; // Sor összélesség növelése        }         else         XSize = 0; // nem fér el a sorban, a sor végére értünk     }     else       ActiveTAG = Word;   }   if (XSize == 0) // Ha a sor végére értünk   {      if (ActiveTAG == “{center}”) // ha center TAG van       Xpos = (LineWidth – FullWidth) / 2; //közép kiszámolása    else       Xpos = 0; // ha balra igazított    // mivel nem értem a TAG kezelést, így nem tudom,     // hogy itt kell-e törölni az  ActiveTAG-et, vagy máshol     DrawLine (Xpos, Ypos); // LineArray-ből kirajzoli a sort képestől, szövegestől     XSize = LineWidth; // XSize ismét a teljes sor szélessége     FullWidth = 0; // nullázzuk a következő sorhoz     LineArray = []; // ürítjük a tömbünket is a következő sorhoz    // LineHeight-et közben lehet számolni a kép és a szöveg magasságokból    Ypos = Ypos + LineHeight; // következő sor kezdő pozíciója   }} // end whileA DrawLine a fentihez hasonló ciklust hajt végre, csak a LineArray-n megy végig és nem tárol, hanem rajzol (szöveget és képet).Innen már csak a kép körbefolyatást kell megoldani :) De az már csak pár plusz változó és feltétel használata :)

Ugrás a lap tetejére Ugrás a lap aljára