예제 #1
0
        public SpriteFontMSDF(string name, byte[] data, int size, float scale, SheetBuilder builder)
        {
            Mfont = new FontMSDF();
            Mfont.LoadFontTexturesAsPng(name);

            if (builder.Type != SheetType.BGRA)
            {
                throw new ArgumentException("The sheet builder must create BGRA sheets.", "builder");
            }

            deviceScale  = scale;
            this.size    = size;
            this.builder = builder;
            Console.WriteLine("Font {0} : {1}", name, size);
            font = Game.Renderer.CreateFont(data);             // FreeTypeFont библиотека создает IFont структуру, где есть байтовое представление символа.
            font.SetSize(size, deviceScale);

            glyphs = new Cache <Pair <char, Color>, GlyphInfo>(CreateGlyph, Pair <char, Color> .EqualityComparer);

            // PERF: Cache these delegates for Measure calls.
            Func <char, float> characterWidth = character => glyphs[Pair.New(character, Color.White)].Advance; // это одна функция с аргументом character, а телом из glyphs[Pair.New(character, Color.White)].Advance

            lineWidth = line => line.Sum(characterWidth) / deviceScale;                                        // тоже функция как и characterWidth

            //if (size <= 24) // пытается, подобрать size? чтобы в строку влезло 24 символа.

            PrecacheColor(Color.White, name);

            TopOffset = size - font.Height;
        }
예제 #2
0
        public void SetScale(float scale)
        {
            deviceScale = scale;

            font.SetSize(size, scale);
            glyphs.Clear();

            TopOffset = size - font.Height;
        }