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

Specialeffekter och spelutveckling i Java(TM) - Appleten NotePad

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

public class notepad extends Applet {

//Variabeln "backgroundimage" pekar på
//bakgrundsbilden (bilden som man ritar på).
Image backgroundimage;
Graphics backgroundg;

//Image-arrayen "blockimages" innehåller
//de nödvändiga bilderna för ritblockets
//animation.
Image blockimages[];

Image penimage;
Image bufferimage;
Graphics bufferg;

//För att inte pennan skall skriva "hackigt"
//så måste vi lagra de gamla värderna för
//pennans position. Vi lägger därför till variablerna
//"oldpenx" och "oldpeny".
int penx,oldpenx;
int peny,oldpeny;

public void init()
{
    Dimension d=size();
    bufferimage=createImage(d.width,d.height);
    bufferg=bufferimage.getGraphics();

    //Vi måste ladda in 7 bilder på blocket
    //för animationens skull. Vi använder oss
    //därför av en for-slinga.
    blockimages=new Image[7];
    MediaTracker tracker=new MediaTracker(this);
    for (int i=0; i < 7; i++)
    {
        //"block0.jpg","block1.jpg" osv kommer att laddas
        //in och lagras i arrayen "blockimages" samtidigt
        //som de lagras hos spåraren (i ordning).
        blockimages[i]=getImage(getDocumentBase(),"block"+i+".jpg");
        tracker.addImage(blockimages[i],i);
    }
    penimage=getImage(getDocumentBase(),"pen.gif");

    //Pennbilden läggs in sist i spåraren.
    tracker.addImage(penimage,7);

    try {tracker.waitForAll();}
    catch(InterruptedException e)
    {
        System.out.println("Någonting stoppade inladdningen...");
    }

    //Vi måste ha en kopia av block0.jpg bilden
    //eftersom den skall vi använda för att rita på.
    //Samtidigt vill vi inte förstöra bilden eftersom
    //den behövs när vi skall rensa skärmen.
    backgroundimage=createCopy(blockimages[0]);

    //Vi behöver en Graphics-objekt för
    //för senare operationer.
    backgroundg=backgroundimage.getGraphics();

    //Pennfärgen får vara svart.
    backgroundg.setColor(Color.black);
}

public Image createCopy(Image img)
{
    //createCopy() metoden skapar en likadan
    //bild som den som specifieras.
    //Först tar man reda på bredden och höjden för bilden
    int width=img.getWidth(this);
    int height=img.getHeight(this);

    //Först skapar vi en tom bild med samma dimensioner
    //som bilden som vi skall ha en kopia av.
    Image result=createImage(width,height);

    //Slutligen skapar vi en Graphics-objekt som pekar
    //på den tomma bilden och ritar ut bilden som
    //vi vill kopiera.
    Graphics resultg=result.getGraphics();
    resultg.drawImage(img,0,0,this);
    return result;
}

public void paint(Graphics g)
{
    if (bufferg!=null)
    {
        bufferg.drawImage(backgroundimage,0,0,this);
        bufferg.drawImage(penimage,penx-6,peny-6,this);
        g.drawImage(bufferimage,0,0,this);
    }
}

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

public boolean mouseMove(Event e, int x, int y)
{
    penx=x; peny=y;
    repaint(70);
    return true;
}

public boolean mouseDrag(Event e, int x, int y)
{
    //När användaren draggar så uppdateras "penx"
    //och "peny" som vanligt men innan dess uppdateras
    //"oldpenx" och "oldpeny". Dessa kommer nu att innehålla
    //det gamla värdet.
    oldpenx=penx;
    oldpeny=peny;
    penx=x;
    peny=y;

    //Nu ritar vi en streck mellan punkterna
    //(oldpenx,oldpeny) och (penx,peny).
    //Detta gör vi med Graphics-metoden drawline.
    backgroundg.drawLine(oldpenx,oldpeny,penx,peny);

    //Skärmen måste nu uppdateras så att bilden syns.
    repaint(70);
    return true;
}

public boolean mouseDown(Event e, int x, int y)
{
    //När användaren klickar på musknappen måste
    //"oldpenx" och "oldpeny" peka på det nya x och
    //y värdena.
    penx=x;
    peny=y;
    oldpenx=x;
    oldpeny=y;

    //Om användaren klickar på kanten av skärmen
    //där så skall sidan bytas och
    //skärmen rensas.
    if (penx < 18)
    {
        //Vi använder oss av en for-slinga
        //för att rita ut de sju bilderna.
        for (int i=0; i < 7; i++)
        {
            //Vi använder paint() metoden för att
            //rita ut bilderna så därför sätter
            //vi backgroundimage att peka
            //på de animerade bilderna och anropar paint()
            //för varje bild med en 70ms tidsfördröjning.
            backgroundimage=blockimages[i];
            update(getGraphics());
            try {Thread.sleep(70);}
            catch(InterruptedException ex) {}
        }
        //Nu initierar vi "backgroundimage" igen
        //som vi gjorde på init() metoden
        //Så att vi kan rita på skärmen.
        backgroundimage=createCopy(blockimages[0]);
        backgroundg=backgroundimage.getGraphics();
        backgroundg.setColor(Color.black);

        //Skärmen måste till slut uppdateras
        //med den första bilden.
        update(getGraphics());
    }
    return true;
}

public boolean mouseUp(Event e, int x, int y)
{
    //När användaren släpper på musknappen så
    //nollställ "oldpen" variablerna.
    oldpenx=0;
    oldpeny=0;
    return true;
}

}