Avatar billede gulbaek Nybegynder
28. november 2006 - 13:51 Der er 7 kommentarer og
1 løsning

Opbygning af baggrund i JApplet spil

Hej, sidder lige og er ved at lave et lille java spil og har lige et spørgsmål.

Vil gerne opbygge min bane dynamisk ud fra et 2d array f.eks.

{ 0, 0, 1},
{ 1, 1, 1},
{ 2, 0, 1}

Hvor der så benytter forskellige billeder alt efter hvad der står i mit array.

min kode så i kan se hvordan tingene ser ud indtil videre.

private String jordUrl = "Billeder/Jord.gif";
    private String vægUrl = "Billeder/Væg.gif";
    private String murUrl = "Billeder/Mur.gif";
       
    Image MurImage;
    Image JordImage;
    Image VægImage;

    public void init()
    {
        MurImage    = getImage(getCodeBase(), murUrl);
        JordImage     = getImage(getCodeBase(), jordUrl);
        VægImage    = getImage(getCodeBase(), vægUrl);
    }

    public void paint(Graphics g)
    {
        g.drawImage(MurImage, 0, 0, this);
        g.drawImage(JordImage, 32, 32, this);
        g.drawImage(VægImage, 64, 64, this);
    }

Men er det ikke noget med at jeg kan benytte mig af nogle layers og så tage et layer og opbygge min bane på det, jeg får jo behov for at placere nogle spillere ovenpå på et tidspunkt.

Det er ved at være et par år siden jeg rigtig har arbejdet med java, så modtager gerne forslag til hvordan jeg laver det bedst muligt.
Avatar billede gulbaek Nybegynder
28. november 2006 - 20:06 #1
Okay, er nået så langt at jeg ikke kan benytte Image objecter, men skal bruge et ImageIcon som så placeres i en JLabel.

Der er nu stadig en masse point til den som kan komme med et godt eksempel på hvordan det skal opbygges
Avatar billede winners79 Nybegynder
29. november 2006 - 11:47 #2
her er nogle udsnit af et multplayer netværks spil jeg har lavet:

blocksize angiver hvor store felterne er.
Alle billeder har et ID.
Placerer så I'derne i det 2-dimensionelle array, og gentegner banen ud fra det array.
IDerne bruges så også til billedernes placering i arraylisten.
bruger bufferedImages for hurtigere grafik...
Spiller iconerne har transparente baggrunde, hvilket gør at jeg slipper for layers




____________________________________
private int bredde = 0;

private int højde = 0;

private final int blockSize = 20;
private byte[][] spilleplade;
private BufferedImage[] images = new BufferedImage[50];
_______________________________
public void paintComponent(Graphics g) {

super.paintComponent(g);
this.setSize(bredde*blockSize, højde * blockSize);
               
for (int y = 0; y < højde; y++)
for (int x = 0; x < bredde; x++)
g.drawImage(images[spilleplade[y][x]], x*blockSize, y*blockSize, blockSize, blockSize, null);
}
____________________________

images[0] = ImageLoader.getImage("images/ground01.png");
images[1] = ImageLoader.getImage("images/brick03.png");
images[2] = ImageLoader.getImage("images/brick02.png");
images[3] = ImageLoader.getImage("images/brick01.png");
images[4] = ImageLoader.getImage("images/healthpack.png");
images[9] = ImageLoader.getImage("images/dead01.gif");
images[11] = ImageLoader.getImage("images/blue-man01.png");
images[12] = ImageLoader.getImage("images/blue-man02.png");
images[13] = ImageLoader.getImage("images/blue-man03.png");
images[14] = ImageLoader.getImage("images/blue-man04.png");
Avatar billede gulbaek Nybegynder
02. december 2006 - 10:21 #3
winners79 takker for hjælpen, men har lige et enkelt spørgsmål  hvor kommer din ImageLoader fra? Har nemlig det problem at en url som f.eks. Billeder/Mur.gif ikke virker. Jeg har flyttet rundt i min kode så jeg desværre ikke længere har adgang til getCodeBase()
Avatar billede winners79 Nybegynder
02. december 2006 - 13:12 #4
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class ImageLoader {
    public static BufferedImage getImage(String filename){
        Image im=null;
        {try
          {
            im = ImageIO.read( new File(filename));
          }
        catch ( IOException e )
          {
          System.out.println( "image missing " + filename);
          }
       
        }
        BufferedImage bi = new BufferedImage(im.getWidth(null),im.getHeight(null),BufferedImage.TYPE_INT_ARGB);
        Graphics bg = bi.getGraphics();
        bg.drawImage(im, 0, 0, null);
        bg.dispose();
        return bi;

   
    }
}
Avatar billede gulbaek Nybegynder
03. december 2006 - 10:21 #5
winners79 den ImageLoader ser desværre ikke ud til at virke sammen med en JApplet den giver mig følgende besked.

java.security.AccessControlException: access denied (java.io.FilePermission Billeder\Mur.gif read)
Avatar billede gulbaek Nybegynder
03. december 2006 - 14:27 #6
Har fået løst det på følgende måde.  I min Init metode opretter jeg en
java.net.URL url = getCodeBase();

Så kan jeg ellers kalde url.getPath() 

murUrl = url.getPath() + "Billeder/Mur.gif";

Så er det vist også på tide at lukke spørgsmålet, så winners97 smid lige et svar hvis du vil have lidt point.
Avatar billede gulbaek Nybegynder
06. december 2006 - 19:16 #7
winners97 interesseret i point? ellers smutter jeg dem selv :-)
Avatar billede winners79 Nybegynder
06. december 2006 - 19:33 #8
:)
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