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) {}
}
}
} |
 |  |
|