[JAVA] Wyświetlanie obrazka


(Sebikom) #1

Witam, zacząłem przygodę z Javą w ramach projektu i utknąłem przy wyświetlaniu obrazka. Czytałem kilka tutoriali ale one są dla mnie nie jasne. Wszystkie mają metodę na podobę

public void paint(Graphics g) {

        g.drawImage(img, 0, 0, null);

    }

Nie rozumiem jej działania, jak to jest, że sie wyrysowuje obrazek a nigdzie nie widzę wywołania tej metody. Jakby ktoś mi napisał co gdzie mam dodać to mojego kodu żeby img został wyrysowany, byłbym wdzięczny.

package Game;


import Obiekt.*;


import java.awt.*;

import java.awt.event.*;

import java.awt.image.*;

import java.io.*;

import javax.imageio.*;

import javax.swing.*;

import java.util.ArrayList;


public class Screen extends Component{

    private static final int SZEROKOSC = 800;

    private static final int WYSOKOSC = 600;


    private BufferedImage img;

    ArrayList Background = new ArrayList();


    public void paint(Graphics g){

        g.drawImage( img, 0, 0, null);

    }


    private void LoadImage(int numer){

        try{

            switch(numer){

                case 0: img = ImageIO.read(new File("gfx\\grass.bmp"));

                        break;

                case 1: img = ImageIO.read(new File("gfx\\sand.bmp"));

                        break;

            }

        }

        catch (IOException b_img){

            System.out.println("Nie udało się załadować img");

	}

    }


    private void LoadMap(String nazwa){

        try{

            FileReader fr = new FileReader(nazwa);

            BufferedReader br = new BufferedReader(fr);

            String linia;

            int numer;


            for(int j=0;(linia=br.readLine())!=null;j++){

		for(int i=0;i
                    numer=(linia.charAt(i)-48);

                    System.out.println(numer);

                    LoadImage(numer);

                    Background.add(new Unmovable(40*i,40*j,img));

                }

            }

            fr.close();

        }

        catch (IOException b_map){

            System.out.println("Nie udało się załadować mapy");

        }

    }


    private void ReDrow(){

        for(int i=0;i

        }

    }


    public Screen(){

        JFrame okno = new JFrame(".:Student RPG:.");

        JPanel panel = (JPanel)okno.getContentPane();

        setBounds(0,0,SZEROKOSC,WYSOKOSC);

        panel.setPreferredSize(new Dimension(SZEROKOSC,WYSOKOSC));

        panel.setLayout(null);

        panel.add(this);


        okno.setBounds(0,0,SZEROKOSC,WYSOKOSC);

        okno.setVisible(true);

        okno.addWindowListener( new WindowAdapter(){

            @Override

            public void windowClosing(WindowEvent e) {

                System.exit(0);

            }

        });

    }

    public static void main(String[] args){

        Screen Game = new Screen();

        Game.LoadMap("maps\\map1.maps");

        Game.ReDrow();

    }


}

Przykład tutka http://download.oracle.com/javase/tutorial/2d/images/examples/LoadImageApp.java


(Razi) #2

metoda paint to metoda wywoływana przy rysowaniu komponentu (Invoked by Swing to draw components.). To w niej rysuje się całą treść komponentu. Jest wywoływana z poziomu wątku Swinga.

Jeżeli to ma być tło, to w niej rysujesz, a potem wywołujesz painta z "wyżej": super.paint(g);

Jeżeli to ma być zwykły obrazek, to użyj JLabela


(Sebikom) #3

Hmm mam pytanie, rysuje sobie mapkę gry za pomocą labelów i ikon ułożonych w ala macierz i teraz bym chciał wyświetlić tak jakby drugą warstwę np. ludka i pytanie czy da się jakoś wyświetlić 2 labele na sobie albo jakoś w javie połączyć 2 obrazki w jeden?


(Razi) #4

Da się, podając konkretne współrzędne i używając warstw: http://download.oracle.com/javase/1.4.2 ... dPane.html , ale to wysoce nieekonomiczne.

Lepiej użyć Graphics do rysowania grafiki do gier.


(Piki 1987) #5

Jeśli nie jest to za bardzo skomplikowana gra, możesz wyświetlać mapę i ludka w panelach. Ludkowi dajesz tło przezroczyste a jego panel przesuwasz po panelu z mapą :smiley:


(Sebikom) #6

To co chce osiągnąc to mapa skłądająca się z obrazków 40x40 px w oknie 800x600 co daje okolo 260 kwadrató i wyświetlony gracz na środku ( mapa sie przesówa gracz ciągle jest na środku ). Mam już to zrobione na labelach.

Graphics totalnie nie rozumiem. Jeśli ktoś by mi wytłumaczył jak mam osiągnąc mój cel przy pomocy Graphics był bym wdzięczny.

PS.

Ktoś wie jak w NetBeansie skompilować jara razem z załączonymi plikami (obrazki, *.txt)?