⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bitmapfont.java

📁 一个java的免费游戏引擎,里面有文档,和例子
💻 JAVA
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi 

package com.golden.gamedev.object.font;

import com.golden.gamedev.object.GameFont;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

public class BitmapFont
    implements GameFont
{

    private BufferedImage a[];
    private int w;
    private int h;
    protected int charIndex[];

    public BitmapFont(BufferedImage abufferedimage[], String s)
    {
        charIndex = new int[256];
        a = abufferedimage;
        w = abufferedimage[0].getWidth();
        h = abufferedimage[0].getHeight();
        for(int i = 0; i < charIndex.length; i++)
            charIndex[i] = -1;

        int j = s.length();
        for(int k = 0; k < j; k++)
            charIndex[s.charAt(k)] = k;

    }

    public BitmapFont(BufferedImage abufferedimage[])
    {
        this(abufferedimage, " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~");
    }

    public int drawString(Graphics2D graphics2d, String s, int i, int j)
    {
        int k = s.length();
        boolean flag = false;
        for(int i1 = 0; i1 < k; i1++)
        {
            char c = s.charAt(i1);
            int l;
            if((l = charIndex[c]) != -1)
                try
                {
                    graphics2d.drawImage(a[l], i, j, null);
                    i += getWidth(c);
                }
                catch(Exception exception)
                {
                    throw new RuntimeException(this + "\nunable to draw letter '" + s.charAt(i1) + "'[" + (i1 + 1) + "] in " + "\"" + s + "\"! charIndex = " + l + "\n" + "caused by : " + exception);
                }
            else
                throw new RuntimeException(this + "\nunable to draw letter [" + s.charAt(i1) + "] (" + (i1 + 1) + ") in " + "[" + s + "] text! ");
        }

        return i;
    }

    public int drawString(Graphics2D graphics2d, String s, int i, int j, int k, int l)
    {
        if(i == 1)
            return drawString(graphics2d, s, j, k);
        if(i == 3)
            return drawString(graphics2d, s, (j + l / 2) - getWidth(s) / 2, k);
        if(i == 2)
            return drawString(graphics2d, s, (j + l) - getWidth(s), k);
        if(i == 4)
        {
            int i1;
            if((i1 = l - getWidth(s)) <= 0)
                return drawString(graphics2d, s, j, k);
            int j1 = s.length();
            int k1 = 0;
            for(int l1 = 0; l1 < j1;)
                if(s.charAt(l1++) == ' ')
                    k1++;

            if(k1 > 0)
                k1 = (i1 + w * k1) / k1;
            int j2;
            for(int i2 = 0; i2 < j1; i2 = j2 + 1)
            {
                if((j2 = s.indexOf(32, i2)) == -1)
                    j2 = j1;
                String s1 = s.substring(i2, j2);
                drawString(graphics2d, s1, j, k);
                j += getWidth(s1) + k1;
            }

            return j;
        } else
        {
            return 0;
        }
    }

    public int drawText(Graphics2D graphics2d, String s, int i, int j, int k, int l, int i1, 
            int j1)
    {
        boolean flag = true;
        int j2 = s.length();
        int k2 = j1;
        int k1;
        int l1;
        int i2;
        for(k1 = l1 = i2 = 0; k1 < j2;)
        {
            char c = s.charAt(k1++);
            k2 += getWidth(c);
            if(c - 32 == 0)
                i2 = k1 - 1;
            if(k2 >= l)
            {
                if(flag)
                {
                    drawString(graphics2d, s.substring(l1, i2), i, i != 2 ? j + j1 : j, k, l - j1);
                    flag = false;
                } else
                {
                    drawString(graphics2d, s.substring(l1, i2), i, j, k, l);
                }
                k += getHeight() + i1;
                k2 = 0;
                l1 = k1 = i2 + 1;
            }
        }

        if(flag)
            drawString(graphics2d, s.substring(l1, k1), i, i != 2 ? j + j1 : j, k, l - j1);
        else
        if(k2 != 0)
            drawString(graphics2d, s.substring(l1, k1), i != 2 ? 1 : 2, j, k, l);
        return k + getHeight();
    }

    public BufferedImage[] getImageFont()
    {
        return a;
    }

    public void setImageFont(BufferedImage abufferedimage[], String s)
    {
        a = abufferedimage;
        w = abufferedimage[0].getWidth();
        h = abufferedimage[0].getHeight();
        for(int i = 0; i < charIndex.length; i++)
            charIndex[i] = -1;

        int j = s.length();
        for(int k = 0; k < j; k++)
            charIndex[s.charAt(k)] = k;

    }

    public int getWidth(char c)
    {
        return w;
    }

    public int getWidth(String s)
    {
        return s.length() * w;
    }

    public int getHeight()
    {
        return h;
    }

    public String toString()
    {
        return super.toString() + " " + "[totalChar=" + a.length + ", width=" + w + ", height=" + h + "]";
    }

    public boolean isAvailable(char c)
    {
        if(charIndex[c] != -1)
            return true;
        return false;
        JVM INSTR pop ;
        return false;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -