Hem E-böcker Specialeffekter och spelutveckling i Java Appleten TextScroller 3  

Specialeffekter och spelutveckling i Java(TM) -Appleten TextScroller 3

import java.applet.*;
import java.awt.*;

public class textscroller3 extends Applet implements Runnable {

public Thread programthread = null;
public String message;
public int x;
Image bufferimage;
Graphics bufferg;
Color backgroundcolor,textcolor;
int delay=0;

//Nu måste dimensionsvariabeln "d" vara
//globalt.
public Dimension d;

//Följande variabler används för att hantera
//fonten.
public Font font;
public FontMetrics metrics;

//Variabeln "backgroundimage" kommer att
//bakgrundsbilden för textscrollern.
public Image backgroundimage=null;

//För att användaren skall kunna
//snabba upp texten så skapar
//vi en variabel "textspeed".
public int textspeed;

public void init()
{
    message=getParameter("message");
    delay=getIntegerParameter("delay",10);
    backgroundcolor=new Color(getIntegerParameter("backgroundcolor",16));
    textcolor=new Color(getIntegerParameter("textcolor",16));

    //Nu skall variabeln "textspeed" läsas in så
    //att användaren kan specifiera texthastigheten.
    textspeed=getIntegerParameter("textspeed",10);


    //Ta reda på om användaren har valt fet eller kursiv stil och
    //indikera detta med variabeln "fonttype".
    int fonttype=0;
    if (getParameter("italic")!=null && getParameter("italic").substring(0,1).equalsIgnoreCase("y"))
        fonttype+=Font.ITALIC;
    if (getParameter("bold")!=null && getParameter("bold").substring(0,1).equalsIgnoreCase("y"))
        fonttype+=Font.BOLD;

    //Skapa en font med de parametrar som har
    //specifierats.
    font=new Font(getParameter("font"),fonttype,getIntegerParameter("fontsize",10));

    //Följande rad hämtar en bakgrundsbild om nu
    //appletanvändaren har specifierat det. Metoden
    //toUpperCase() ser till att bildens namn är
    //i stora bokstäver innan man testar om det
    //är en JPEG eller GIF bild.
    MediaTracker tracker=new MediaTracker(this);
    String backimage=getParameter("backgroundimage");
    if (backimage!=null &&
        (backimage.toUpperCase().indexOf("JPG")>-1 ||
        backimage.toUpperCase().indexOf("GIF")>-1))
    {
        backgroundimage=getImage(getDocumentBase(),backimage);
        tracker.addImage(backgroundimage,0);
        try {tracker.waitForAll();}
        catch(InterruptedException e) {}
    }


    //Observera nu att Dimension togs bort.
    d=size();
    bufferimage=createImage(d.width,d.height);
    bufferg=bufferimage.getGraphics();

    //Initiera "metrics" variabeln så att
    //den kan användas för att mäta fonten.
    bufferg.setFont(font);
    metrics=bufferg.getFontMetrics();

    //"x" måste initieras så att texten
    //börjar scrolla utanför skärmen.
    x=d.width;
}

public int getIntegerParameter(String name, int base)
{
    String value=getParameter(name);
    int intvalue;
    try {intvalue=Integer.parseInt(value,base);}
    catch (NumberFormatException e) {return 0;}
    return intvalue;
}

public void start()
{
    if (programthread == null)
    {
         programthread = new Thread(this,"programtrad");
         programthread.start();
    }
}

public void stop()
{
    if ((programthread != null) && programthread.isAlive())
        programthread.stop();
    programthread = null;
}

public synchronized void paint(Graphics g)
{
    if (bufferg!=null)
    {
        //Nu måste vi undersöka om användaren
        //specifierade en bakgrundsbild.
        //Detta vet vi, för att om han gjorde
        //det så är variabeln "backgroundimage"
        //inte "null". Om den är det, så
        //använder vi den specifierade
        //bakgrundsfärgen för att rensa skärmen
        //istället.
        if (backgroundimage!=null)
        {
            bufferg.drawImage(backgroundimage,0,0,this);
        }
        else
        {
            bufferg.setColor(backgroundcolor);

            //fillRect() metoden ändras så att den
            //nu rensar den area som användaren
            //har specifierat.
            bufferg.fillRect(0,0,d.width,d.height);
        }
        bufferg.setColor(textcolor);

        //Meddelandet centreras i skärmen
        //med hjälp av värdet (d.height-metrics.getHeight())/2.
        bufferg.drawString(message,x,(d.height-metrics.getHeight())/2+metrics.getAscent());

        g.drawImage(bufferimage,0,0,this);

        //Scrollgränsen måste ändras så att den anpassas
        //för godtyckliga applet- eller textdimensioner.
        if (x<-metrics.stringWidth(message)) x=d.width;

        //Nu används innehållet i "textspeed"
        //för att minska "x". Ju högre siffra
        //i "textspeed" desto snabbare rör sig
        //texten.
        x-=textspeed;
    }
}

public void update(Graphics g)
{
    paint(g);
}

public void run()
{
    while (true)
    {
        update(getGraphics());
        try {Thread.sleep(delay);}
        catch(InterruptedException e) {}
    }
}
}