Avatar billede brian8 Nybegynder
21. oktober 2001 - 17:46 Der er 10 kommentarer og
1 løsning

Baggrundsbillede i java???

Jeg ved ikke hvordan man indsætter et baggrundsbillede i java 2. Jeg er ved at udvikle et spil, og har problemer med at indsætte baggrundsbilledet til spillet. Er der en som ved hvordan man kan gøre dette?
Avatar billede disky Nybegynder
21. oktober 2001 - 17:47 #1
Du bruger bare et Image, som du \'drawImage\'er på din skærm.
Avatar billede brian8 Nybegynder
21. oktober 2001 - 17:51 #2
Det har jeg prøvet, men når spillet startes står billedet og flimre.
Avatar billede brian8 Nybegynder
21. oktober 2001 - 17:52 #3
Jeg har lagt billedet op i en variabel og skrevet følgende:
g.drawImage(baggrund, 0,0, this);
Men skidtet flimre helt vildt.
Avatar billede disky Nybegynder
21. oktober 2001 - 19:08 #4
Du skal bruge dobbelt buffering :)

Her er et eksempel.

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

public class DoubleBufferApplet extends Applet
{
    // The width and height of our offscreen image
    private int width=-1;
    private int height=-1;
   
    // The offscreen image
    private Image offscreen;
   
    // switch: are we double buffering or not?
    private boolean dbon = true;
   
    // Use this to turn double buffering on and off
    protected void setDoubleBuffering( boolean dbon )
    {
        this.dbon = dbon;
        if (!dbon)
        {
            offscreen = null;
        }
    }
   
    // Depending on the value of our switch, we either call our
    // special code, or just call the default code
    public void update( Graphics g )
    {
        if (dbon)
        {
            updateDoubleBufffered( g );
        }
        else
        {
            super.update( g );
        }
    }
   
    // Do the drawing to an offscreen buffer -- maybe
    private void updateDoubleBufffered( Graphics g )
    {
       
        // Let\'s make sure we have an offscreen buffer, and that
        // it\'s the right size.  If the applet has been resized,
        // our buffer will be the wrong size and we need to make
        // a new one
        Dimension d = getSize();
        if (offscreen == null || width!=d.width || height!=d.height || offscreen==null)
        {
            width = d.width;
            height = d.height;
            if (width>0 || height>0)
            {
                offscreen = createImage( width, height );
            }
            else
            {
                offscreen = null;
            }
        }
       
        // If we still don\'t have one, give up
        if (offscreen == null) return;
       
        // Get the off-screen graphics object
        Graphics gg = offscreen.getGraphics();
       
        // Clear the off-screen graphics object
        gg.setColor( getBackground() );
        gg.fillRect( 0, 0, width, height );
        gg.setColor( getForeground() );
       
        // Draw to the off-screen graphics object
        paint( gg );
       
        // We don\'t need this Graphics object anymore
        gg.dispose();
       
        // Finally, we transfer the newly-drawn stuff right to the
        // screen
        g.drawImage( offscreen, 0, 0, null );
    }
}






import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.net.*;

//Tråden i denne klasse styrer hvor tit selve skærmen skal opdateres.

public class Pacman extends DoubleBufferApplet implements java.lang.Runnable, KeyListener
{
    private Ghost ghost1,ghost2,ghost3,ghost4;
   
    private Image player;
    private Thread thread=null;
    private URL codeBase=null;

    int x=100;
    int y=100;
   
    public void init()
    {
        codeBase=getCodeBase();
        addKeyListener(this);
               
        Image tmp=getImage(codeBase,\"test.gif\");       
        ghost1=new Ghost(tmp,300,180);

        tmp=getImage(codeBase,\"test.gif\");       
        ghost2=new Ghost(tmp,340,180);
       
        tmp=getImage(codeBase,\"test.gif\");       
        ghost3=new Ghost(tmp,300,220);

        tmp=getImage(codeBase,\"test.gif\");       
        ghost4=new Ghost(tmp,340,220);

        player=getImage(codeBase,\"test.gif\");       
               
        thread=new Thread(this);
        ghost1.start();
        ghost2.start();
        ghost3.start();
        ghost4.start();
        thread.start();
        setDoubleBuffering( true );
    }
   
    public void paint( Graphics g )
    {
        g.drawImage(player,x,y,this);

        ghost1.paint(g);
        ghost2.paint(g);
        ghost3.paint(g);
        ghost4.paint(g);
    }
   
    public void run()
    {
        while(true)
        {
            repaint();
            handlePlayer();
            try
            {
                Thread.sleep(50);
            }
            catch( InterruptedException ie )
            {
            }
        }
    }
   
/** This function handles everything about the player.
* That is collision control, checking to see if a pellet or a fruit has been eaten,
* updating the score, and se if a ghost has catched the player.
*/   
    private void handlePlayer()
    { 
    }
   
    public void keyReleased(java.awt.event.KeyEvent e)
    {
    }
   
    public void keyPressed(java.awt.event.KeyEvent e)
    {
        handleKey(e);
    }
   
    public void keyTyped(java.awt.event.KeyEvent e)
    {
    }
   
    private void handleKey(KeyEvent e)
    {
        switch(e.getKeyCode())
        {
            case java.awt.event.KeyEvent.VK_LEFT:
                x-=2;
                break;
            case java.awt.event.KeyEvent.VK_RIGHT:
                x+=2;
                break;
            case java.awt.event.KeyEvent.VK_DOWN:
                y+=2;
                break;
            case java.awt.event.KeyEvent.VK_UP: //up
                y-=2;
                break;
        }
        e.consume();
    }
}




Avatar billede brian8 Nybegynder
21. oktober 2001 - 20:56 #5
Jeg kan desværre ikke finde ud af det efter det eksempel som du har givet mig disky. Prøv at forklare det på en mere simpel måde.
Avatar billede disky Nybegynder
21. oktober 2001 - 22:15 #6
når grafik flimre skyldes det normalt man skal bruge dobbelt buffering.

Man tegner på en skærm og vise en anden, og så skiftes de. Mit eksempel bruger denne teknik, de ting den ikke kan finde ved kompiling skal du udkommentere
Avatar billede brian8 Nybegynder
22. oktober 2001 - 12:42 #7
Jeg forstår stadig ikke. Jeg skal nok lige sige at jer er nybegynder i programmering i java, så den skal altså skæres ud i pap. Det eneste som jeg skal er at indsætte et .jpg billede som baggrund, uden at det flimre. Kan du ikke give et meget enkelt eksempel, hvor der kun bliver indlæst et billede, og ikke andet. Altså et program som ikke gør andet end at indlæse baggrundsbilledet. Så tror jeg nemlig at jeg kan fatte det.
Avatar billede disky Nybegynder
22. oktober 2001 - 12:43 #8
øh, flimrer billedet hvis det er helt for sig selv ?
Avatar billede brian8 Nybegynder
22. oktober 2001 - 12:56 #9
Jeg har lavet følgende, men dette er hvist kun en lappeløsning.

import java.applet.*;
import java.awt.*;
import java.util.*;
import java.lang.*;

public class kanon extends Applet implements Runnable
{             
        Thread MinTraad = null;
        int Taeller = 10000;
        Image baggrund;
     
       
     
        public void start()
        {
            baggrund = getImage(getCodeBase(), \"baggrund.jpg\");
                if (MinTraad == null)
                {
                        MinTraad = new Thread(this);
                        MinTraad.start();
                }
                else MinTraad.resume();
        }
       
        public void stop()
        {
                if (MinTraad == null)
                {
                        MinTraad = new Thread(this);
                        MinTraad.start();
                }
                else MinTraad.resume();
        }

        public void run()
        {
           
       
                while (Taeller-- > 0)
                {
                        repaint();
                        try
                        {
                                MinTraad.sleep(100000);
                        }
                        catch (Exception e)
                        {  }
                }
        }

        public void paint(Graphics g)
        {
        g.drawImage(baggrund,0,0, this);
        }           
   
}
Avatar billede brian8 Nybegynder
22. oktober 2001 - 12:59 #10
Er det egentlig en god ide at lave en tråd kun til baggrundsbilledet??
Avatar billede brian8 Nybegynder
22. oktober 2001 - 17:44 #11
e
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester