Smileys im Chat

Nach unten

Smileys im Chat

Beitrag  Till am Fr 4 Feb 2011 - 11:58

Also hier sind schonmal die Grafiken für die Smileys: http://www.csmhd.de/forum/bilder/texN.png

Ich will das Ganze nun in folgendem Format haben:
(Vector4 brauche ich, damit ich die Werte in die Vertices speichern kann und der Pixelshader diese verarbeiten kann)

Code:

using System.Collection.generic; // für List

public static Vector2 GrafikenGröße = new Vector2(1280, 1280);

class Vector4 // oder dx includen
{
              // x,y,breite,höhe
  public float X, Y, Z, W;
  // ... konstruktor
}

class cSmiley
{
         
  string Text = string.Empty;
  Vector4[] UV = null;
  int[]  Reihenfolge = null;
  float[] Dauer = null;  // in Sekunden
 

  public Smiley (string Text, Vector4 PosGröße, int AnzahlBilder, int[] Reihenfolge, int[] DauerIn100stelSek)
  {
    this.Text = Text;
    this.UV = new Vector4[AnzahlBilder];
    for (int i=0; i<AnzahlBilder; i++)
      {
          this.UV[i] = Umwandeln( PosGröße + new Vector (i*PosGröße.Z,0,0,0) , GrafikenGröße );
      }
    this.Reihenfolge = Reihenfolge;
    this.Dauer = new float[DauerIn100stelSek.Length];
    for (int i=0; i<DauerIn100stelSek.Length; i++)
    {
        this.Dauer[i] = (float)DauerIn100stelSek[i] / 1000.0f;
    }
  }
}

// bereits vorhandener Code
                    // 0-1                      // Pixel
private static Vector4 Umwandeln(Vector4 UV, Vector2 BildGröße)
            {
                return new Vector4(
                    UV.X / BildGröße.X,
                    UV.Y / BildGröße.Y,

                    UV.X / BildGröße.X + UV.Z / BildGröße.X,
                    UV.Y / BildGröße.Y + UV.W / BildGröße.Y);
            }

List<cSmiley> Smileys = new Smiley;
so nun will ich für jeden Smiley folgendes

// Vector4 PosGröße, int AnzahlBilder, int[] Reihenfolge, int[] DauerIn100stelSek

// ( smiley 001) // X/Y position in Pixeln // reihenfolge // dauer am besten mit einem gif-editor auslesen
Smileys.Add(new Smiley( "Smile", new Vector(X,Y,25,25), new int[] { 0,1,2,1 }, new int[] { 20,20,20,20 });

die smileys habe ich hier her:
http://www.web-smilie.de/gruene.php
einfach herunterladen und die entsprechenden werte auslesen.

danke schonmal.
avatar
Till
Admin

Anzahl der Beiträge : 254
Ort : In der ''Hello World''
Laune : vorfreudig ;)

Nach oben Nach unten

Re: Smileys im Chat

Beitrag  waschi am Fr 4 Feb 2011 - 18:50

Der erste Link zu den Grafiken funktioniert nicht... Ich hab am Wochenende wenig Zeit, vlt. schaff ich Sonntag was.
avatar
waschi

Anzahl der Beiträge : 54
Ort : Hauptstadt
Laune : Heiter bis wolkig

Nach oben Nach unten

Re: Smileys im Chat

Beitrag  Till am Sa 5 Feb 2011 - 18:50

War so, weil ich zu dem Zeitpunkt den Server neu initialisiert habe => geht nun wieder.
Habe den Code nur so eingetippt sind bestimmt 2-3 Fehler drin. Ist aber klar wie ich mir das vorstelle oder ?
Brauche eine Initialisierungsliste für alle Smileys.

Damit ich sie per DX rendern kann. War ne heiden arbeit die einzelnen Gifs zusammenzukopieren ... Aber ein Chat ohne Smileys ist kein richtiger. Arrow Smile Cool Danke schonmal. Sobald du die Liste fertig hast kann ich sie genau so in meine Chatklasse einfügen.
avatar
Till
Admin

Anzahl der Beiträge : 254
Ort : In der ''Hello World''
Laune : vorfreudig ;)

Nach oben Nach unten

Re: Smileys im Chat

Beitrag  waschi am Do 10 Feb 2011 - 11:51

Die Dauer ist in ms, also nicht in hunderstel Sekunden... Den ms sind tausendstel, wie du in deiner Rechnung in Sekunden auch richtig schreibst mit / 1000.0 ...

Die X-Y Koordinaten orientieren sich in der Textur am ersten blauen Hintergrund-Pixel, ab da dann immer 25x25 Quadrate, d.h. die Smileys haben am oberen Rand immernoch etwas Platz bzw. sind nicht in den 25er Quadraten gemittelt! Daher sollte man zu JEDEM Y-Wert noch +2 addieren, dann sind die Smileys ordentlich gemittelt. (siehe untere Liste...)

Also a) Orientierung am ersten blauen Pixel:

Code:

        List<cSmiley> Smileys = new List<cSmiley>();
        Smileys.Add(new cSmiley("01", new Vector4(959, 599, 25, 25), 3, new int[] {0, 1, 2, 1}, new int[] {2000, 100, 2000, 100}));
        Smileys.Add(new cSmiley("02", new Vector4(1059, 599, 25, 25), 3, new int[] {0, 1, 2}, new int[] {200, 2000, 2000}));
        Smileys.Add(new cSmiley("03", new Vector4(1159, 599, 25, 25), 2, new int[] {0, 1, 0}, new int[] {500, 200, 3300}));

        Smileys.Add(new cSmiley("04", new Vector4(959, 624, 25, 25), 2, new int[] {1, 0, 1, 0, 1, 0, 1}, new int[] {1000, 100, 2800, 100, 100, 100, 2000}));
        Smileys.Add(new cSmiley("05", new Vector4(1034, 624, 25, 25), 2, new int[] {0, 1, 0}, new int[] {200, 100, 3800}));
        Smileys.Add(new cSmiley("06", new Vector4(1109, 624, 25, 25), 3, new int[] {0, 1, 2, 1}, new int[] {500, 100, 1000, 100}));
        Smileys.Add(new cSmiley("14", new Vector4(1209, 624, 25, 25), 1, new int[] {0}, new int[] {0}));

        Smileys.Add(new cSmiley("07", new Vector4(959, 649, 25, 25), 5, new int[] {4, 3, 2, 1, 0, 0, 1, 2, 3, 4}, new int[] {500, 100, 100, 100, 100, 100, 100, 100, 100, 2000}));
        Smileys.Add(new cSmiley("08", new Vector4(1109, 649, 25, 25), 2, new int[] {0, 1}, new int[] {1800, 1000}));
        Smileys.Add(new cSmiley("10", new Vector4(1184, 649, 25, 25), 2, new int[] {0, 1, 0}, new int[] {500, 100, 2500}));

        Smileys.Add(new cSmiley("09", new Vector4(959, 674, 25, 25), 3, new int[] {0, 1, 2, 1, 2, 1, 0}, new int[] {500, 1800, 100, 200, 100, 1000, 2000}));
        Smileys.Add(new cSmiley("11", new Vector4(1059, 674, 25, 25), 2, new int[] {1, 0}, new int[] {1800, 1000}));
        Smileys.Add(new cSmiley("12", new Vector4(1134, 674, 25, 25), 2, new int[] {0, 1}, new int[] {2000, 100}));
        Smileys.Add(new cSmiley("23", new Vector4(1209, 674, 25, 25), 1, new int[] {0}, new int[] {0}));

        Smileys.Add(new cSmiley("13", new Vector4(959, 699, 25, 25), 3, new int[] {0, 1, 2, 0}, new int[] {500, 700, 1800, 2000}));
        Smileys.Add(new cSmiley("15", new Vector4(1059, 699, 25, 25), 2, new int[] {0, 1, 0}, new int[] {500, 1500, 2000}));
        Smileys.Add(new cSmiley("18", new Vector4(1134, 699, 25, 25), 3, new int[] {0, 1, 2, 0}, new int[] {500, 100, 500, 1000}));

        Smileys.Add(new cSmiley("16", new Vector4(959, 724, 25, 25), 5, new int[] {0, 1, 2, 1, 3, 4}, new int[] {100, 100, 100, 100, 100, 100}));
        Smileys.Add(new cSmiley("17", new Vector4(1109, 724, 25, 25), 2, new int[] {0, 1, 0, 1}, new int[] {100, 100, 100, 100}));
        Smileys.Add(new cSmiley("20", new Vector4(1184, 724, 25, 25), 2, new int[] {0, 1, 0}, new int[] {500, 100, 2000}));

        Smileys.Add(new cSmiley("19", new Vector4(959, 749, 25, 25), 6, new int[] {0, 1, 2, 3, 4, 5}, new int[] {100, 100, 100, 100, 100, 100}));
        Smileys.Add(new cSmiley("21", new Vector4(1134, 749, 25, 25), 3, new int[] {0, 1, 2, 1}, new int[] {100, 100, 100, 100}));

        Smileys.Add(new cSmiley("22", new Vector4(959, 774, 25, 25), 3, new int[] {0, 1, 0, 2}, new int[] {100, 100, 100, 100}));
        Smileys.Add(new cSmiley("24", new Vector4(1059, 774, 25, 25), 2, new int[] {0, 1}, new int[] {1000, 200}));
        Smileys.Add(new cSmiley("25", new Vector4(1134, 774, 25, 25), 2, new int[] {0, 1}, new int[] {1000, 200}));

        Smileys.Add(new cSmiley("26", new Vector4(959, 799, 25, 25), 2, new int[] {0, 1}, new int[] {1000, 200}));
        Smileys.Add(new cSmiley("27", new Vector4(1034, 799, 25, 25), 2, new int[] {0, 1}, new int[] {1000, 200}));
        Smileys.Add(new cSmiley("28", new Vector4(1109, 799, 25, 25), 2, new int[] {0, 1}, new int[] {1000, 200}));
        Smileys.Add(new cSmiley("29", new Vector4(1184, 799, 25, 25), 2, new int[] {0, 1}, new int[] {1000, 200}));

oder b) besser, durch zentrierte Smileys:

Code:

        List<cSmiley> Smileys = new List<cSmiley>();
        Smileys.Add(new cSmiley("01", new Vector4(959, 601, 25, 25), 3, new int[] {0, 1, 2, 1}, new int[] {2000, 100, 2000, 100}));
        Smileys.Add(new cSmiley("02", new Vector4(1059, 601, 25, 25), 3, new int[] {0, 1, 2}, new int[] {200, 2000, 2000}));
        Smileys.Add(new cSmiley("03", new Vector4(1159, 601, 25, 25), 2, new int[] {0, 1, 0}, new int[] {500, 200, 3300}));

        Smileys.Add(new cSmiley("04", new Vector4(959, 626, 25, 25), 2, new int[] {1, 0, 1, 0, 1, 0, 1}, new int[] {1000, 100, 2800, 100, 100, 100, 2000}));
        Smileys.Add(new cSmiley("05", new Vector4(1034, 626, 25, 25), 2, new int[] {0, 1, 0}, new int[] {200, 100, 3800}));
        Smileys.Add(new cSmiley("06", new Vector4(1109, 626, 25, 25), 3, new int[] {0, 1, 2, 1}, new int[] {500, 100, 1000, 100}));
        Smileys.Add(new cSmiley("14", new Vector4(1209, 626, 25, 25), 1, new int[] {0}, new int[] {0}));

        Smileys.Add(new cSmiley("07", new Vector4(959, 651, 25, 25), 5, new int[] {4, 3, 2, 1, 0, 0, 1, 2, 3, 4}, new int[] {500, 100, 100, 100, 100, 100, 100, 100, 100, 2000}));
        Smileys.Add(new cSmiley("08", new Vector4(1109, 651, 25, 25), 2, new int[] {0, 1}, new int[] {1800, 1000}));
        Smileys.Add(new cSmiley("10", new Vector4(1184, 651, 25, 25), 2, new int[] {0, 1, 0}, new int[] {500, 100, 2500}));

        Smileys.Add(new cSmiley("09", new Vector4(959, 676, 25, 25), 3, new int[] {0, 1, 2, 1, 2, 1, 0}, new int[] {500, 1800, 100, 200, 100, 1000, 2000}));
        Smileys.Add(new cSmiley("11", new Vector4(1059, 676, 25, 25), 2, new int[] {1, 0}, new int[] {1800, 1000}));
        Smileys.Add(new cSmiley("12", new Vector4(1134, 676, 25, 25), 2, new int[] {0, 1}, new int[] {2000, 100}));
        Smileys.Add(new cSmiley("23", new Vector4(1209, 676, 25, 25), 1, new int[] {0}, new int[] {0}));

        Smileys.Add(new cSmiley("13", new Vector4(959, 701, 25, 25), 3, new int[] {0, 1, 2, 0}, new int[] {500, 700, 1800, 2000}));
        Smileys.Add(new cSmiley("15", new Vector4(1059, 701, 25, 25), 2, new int[] {0, 1, 0}, new int[] {500, 1500, 2000}));
        Smileys.Add(new cSmiley("18", new Vector4(1134, 701, 25, 25), 3, new int[] {0, 1, 2, 0}, new int[] {500, 100, 500, 1000}));

        Smileys.Add(new cSmiley("16", new Vector4(959, 726, 25, 25), 5, new int[] {0, 1, 2, 1, 3, 4}, new int[] {100, 100, 100, 100, 100, 100}));
        Smileys.Add(new cSmiley("17", new Vector4(1109, 726, 25, 25), 2, new int[] {0, 1, 0, 1}, new int[] {100, 100, 100, 100}));
        Smileys.Add(new cSmiley("20", new Vector4(1184, 726, 25, 25), 2, new int[] {0, 1, 0}, new int[] {500, 100, 2000}));

        Smileys.Add(new cSmiley("19", new Vector4(959, 751, 25, 25), 6, new int[] {0, 1, 2, 3, 4, 5}, new int[] {100, 100, 100, 100, 100, 100}));
        Smileys.Add(new cSmiley("21", new Vector4(1134, 751, 25, 25), 3, new int[] {0, 1, 2, 1}, new int[] {100, 100, 100, 100}));

        Smileys.Add(new cSmiley("22", new Vector4(959, 776, 25, 25), 3, new int[] {0, 1, 0, 2}, new int[] {100, 100, 100, 100}));
        Smileys.Add(new cSmiley("24", new Vector4(1059, 776, 25, 25), 2, new int[] {0, 1}, new int[] {1000, 200}));
        Smileys.Add(new cSmiley("25", new Vector4(1134, 776, 25, 25), 2, new int[] {0, 1}, new int[] {1000, 200}));

        Smileys.Add(new cSmiley("26", new Vector4(959, 801, 25, 25), 2, new int[] {0, 1}, new int[] {1000, 200}));
        Smileys.Add(new cSmiley("27", new Vector4(1034, 801, 25, 25), 2, new int[] {0, 1}, new int[] {1000, 200}));
        Smileys.Add(new cSmiley("28", new Vector4(1109, 801, 25, 25), 2, new int[] {0, 1}, new int[] {1000, 200}));
        Smileys.Add(new cSmiley("29", new Vector4(1184, 801, 25, 25), 2, new int[] {0, 1}, new int[] {1000, 200}));
avatar
waschi

Anzahl der Beiträge : 54
Ort : Hauptstadt
Laune : Heiter bis wolkig

Nach oben Nach unten

Re: Smileys im Chat

Beitrag  Till am Do 10 Feb 2011 - 14:10

waschi schrieb:Die Dauer ist in ms, also nicht in hunderstel Sekunden... Den ms sind tausendstel, wie du in deiner Rechnung in Sekunden auch richtig schreibst mit / 1000.0 ...

Die X-Y Koordinaten orientieren sich in der Textur am ersten blauen Hintergrund-Pixel, ab da dann immer 25x25 Quadrate, d.h. die Smileys haben am oberen Rand immernoch etwas Platz bzw. sind nicht in den 25er Quadraten gemittelt! Daher sollte man zu JEDEM Y-Wert noch +2 addieren, dann sind die Smileys ordentlich gemittelt. (siehe untere Liste...)
Ja war nen kleiner denkfehler hätte 'x 100stel / 10' sein müssen, aber so ist es nun noch besser. Hatte das halt als Eingabe, weil im Gif-Format 100tel gespeichert werden.

Die Smileys beginnen ab 960/600. Habe den 1pixel breiten Rand eingefügt, damit keine artefakte beim vergrößern/verkleinern der Textur entstehen. Das mit dem Verschieben geht nich, wegen dem einen Smiley das hüpft Nr16 (:crazy:).
Ich kann die Positionierung im Chat ja frei wählen -- also passt das.


Danke dir. Kann ich so verwenden. I love you bounce
avatar
Till
Admin

Anzahl der Beiträge : 254
Ort : In der ''Hello World''
Laune : vorfreudig ;)

Nach oben Nach unten

Re: Smileys im Chat

Beitrag  Gesponserte Inhalte


Gesponserte Inhalte


Nach oben Nach unten

Nach oben


 
Befugnisse in diesem Forum
Sie können in diesem Forum nicht antworten