Aiuto semplicissimo giochino Java

di il
13 risposte

Aiuto semplicissimo giochino Java

Ciao a tutti, preso dalla noia ho iniziato a sviluppare un semplicissimo "giochino" (usando la GUI di Java) che non fa' molto altro che spostare un JButton in alto, in basso, a destra o sinistra nello schermo spostandone adeguatamente le coordinate. Mi chiedevo, come potrei fare per far in modo che, quando questo JButton "tocchi" un'altro elemento della schermo (come un'altro JButton, o un JPanel, non so) compaia un etichetta sullo schermo con scritto tipo "sei morto" e, successivamente, si invochi un System.exit(0).
Non saprei proprio come fare per segnalare che il JButton tocchi un'altro elemento.
Grazie in anticipo per l'aiuto.

13 Risposte

  • Re: Aiuto semplicissimo giochino Java

    Luca Rossi ha scritto:


    Non saprei proprio come fare per segnalare che il JButton tocchi un'altro elemento.
    Per qualunque componente puoi ottenere il java.awt.Rectangle che lo contiene tramite getBounds(). A quel punto si tratta solo di matematica/logica. Se vuoi verificare se 2 Rectangle si "intersecano", c'è già, è già fatto dal boolean intersects(Rectangle r) di Rectangle stesso.

    Se vuoi solo verificare se due componenti hanno un lato (parte o tutto) adiacente (quindi NON intersecazione, nemmeno parziale) o lo fai tu con della matematica o sfrutti di nuovo intersects incrementando prima di 1 unità sui lati uno dei due rettangoli.
  • Re: Aiuto semplicissimo giochino Java

    Potresti farmi un esempio pratico di codice Andbin?
    Inoltre, anche cercando su Google, non ho ben capito che cos'è questo java.awt.Rectangle...
  • Re: Aiuto semplicissimo giochino Java

    Devi cercare "java getbounds"
  • Re: Aiuto semplicissimo giochino Java

    Luca Rossi ha scritto:


    Inoltre, anche cercando su Google, non ho ben capito che cos'è questo java.awt.Rectangle...
    Dovresti leggere un po' di più la documentazione javadoc del framework.
  • Re: Aiuto semplicissimo giochino Java

    L'unica soluzione a cui sono arrivato è un'espressione del tipo:
    ...
    Else if (giocatore.getBounds().intersects(nemico.getBounds))) { ...
    }
    il compilatore la legge correttamente, ma non sembra funzionare...
  • Re: Aiuto semplicissimo giochino Java

    Prova con getBounds2D(), se non riesci allega il codice completo che ci provo anche io
  • Re: Aiuto semplicissimo giochino Java

    patel ha scritto:


    Prova con getBounds2D(), se non riesci allega il codice completo che ci provo anche io
    "The method getBounds2D() is undefined for the type JPanel"
    "The method getBounds2D() is undefined for the type JButton"
    Ti vorrei allegare il codice ma ho (per la terza volta) un problema con il sito, che non mi fa accedere, dicendomi che la password è sbagliata (mentre sono sicuro al 100 che è giusta, tra l'altro la salva il sito stesso). E quindi al momento riesco ad accedere solo con il cellulare :/
  • Re: Aiuto semplicissimo giochino Java

    Non è che saresti così gentile da mostrarmi un esempio di codice funzionante? Mi è rimasta troppa curiosità xd
  • Re: Aiuto semplicissimo giochino Java

    Io sono un principiante come te, non ho la soluzione pronta, ti ho chiesto il codice perché sono interessato a cercare la soluzione.
    Probabilmente un jbutton non è adatto per quello che vuoi fare, meglio uno shape.
  • Re: Aiuto semplicissimo giochino Java

    Luca Rossi ha scritto:


    "The method getBounds2D() is undefined for the type JPanel"
    "The method getBounds2D() is undefined for the type JButton"
    getBounds2D() NON è dei componenti AWT/Swing ma di Shape (una interfaccia). Gli shape sono figure che si possono disegnare su un Graphics2D, tipicamente sulla superficie di un componente custom.

    Quindi o si hanno componenti distinti dentro un qualunque "contenitore" (e si può usare il getBounds() ). Oppure si fa un unico componente custom (personalizzato) in cui si disegnano tanti shape. Ma questo richiede anche altre conoscenze.
  • Re: Aiuto semplicissimo giochino Java

    Luca Rossi ha scritto:


    L'unica soluzione a cui sono arrivato è un'espressione del tipo:
    ...
    Else if (giocatore.getBounds().intersects(nemico.getBounds))) { ...
    }
    il compilatore la legge correttamente, ma non sembra funzionare...
    Ma questo codice cos'ha di sbagliato?
  • Re: Aiuto semplicissimo giochino Java

    Questo esempio ti può aiutare http://www.pierotofy.it/pages/sorgenti/dettagli/19073-Corsa_nello_Spazio/
  • Re: Aiuto semplicissimo giochino Java

    Prova questo codice che usa immagini
    package collisionesemplice;
    
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Rectangle;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import javax.imageio.ImageIO;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.Timer;
    
    public class CollisioneSemplice {
    
      public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
          @Override
          public void run() {
            JFrame frame = new JFrame();
           
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new BackgroundPane());
            frame.pack();
            frame.setVisible(true);
            frame.setSize(300, 500);
          }
        });
      }
    }
    
    class BackgroundPane extends JPanel {
      private BufferedImage bg;
      private BufferedImage bg2;
      private int yOffset = 0;
      private int yDelta = 4; // velocità scorrimento
      Timer timer;
    //
      public BackgroundPane() {
        try {
     //     bg = ImageIO.read(new URL("http://www.java2s.com/style/download.png"));
            File file= new File("meteorite_01.gif");
            bg = ImageIO.read(file); 
            //file= new File("meteorite_02.gif");
            file= new File("astronave.gif");
            bg2 = ImageIO.read(file); 
        } catch (Exception ex) {
          ex.printStackTrace();
        }
    
        timer = new Timer(40, new ActionListener() {
            
          @Override
          public void actionPerformed(ActionEvent e) {
            yOffset += yDelta; // muove l'oggetto
            if (yOffset > getHeight()) {
              yOffset = 0;
            }
            repaint();
          }
        });
        timer.start();
      }
      
    
      @Override
      public Dimension getPreferredSize() {
        return new Dimension(bg.getWidth(),bg.getHeight());
      }
    
      @Override
      protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g.create();
        int bg2Y = 400;
        int xPos = (getWidth() - bg.getWidth()) / 2;
        int yPos = yOffset;
        g2d.drawImage(bg, xPos, yPos, this);
        g2d.drawImage(bg2, xPos , bg2Y, this); // meteoritr fisso
        Rectangle r1 = new Rectangle(xPos,yOffset,bg.getHeight(),bg.getWidth());
        Rectangle r2 = new Rectangle(xPos ,bg2Y+5,bg2.getHeight(),bg2.getWidth());
        if (r1.intersects(r2)) {
    //            yOffset = 0;
                timer.stop();
                setBackground(Color.RED);
        }
        g2d.dispose();
      }
    }
Devi accedere o registrarti per scrivere nel forum
13 risposte