Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [JAVA] Moto rettilineo uniforme di un oggetto dentro un frame

    Salve a tutti
    sto cercando di far muovere un quadratino su un frame in un moto rettilineo uniforme autonomamente lungo l'asse y (in questo caso) all'apertura del programma...

    public class Moto extends JPanel implements ActionListener{
    private final int x=400;
    private int y;
    private final int lato = 100;
    private int secondi;


    public void paint(Graphics g){
    super.paint(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.setColor(Color.red);
    Calendar calendar = new GregorianCalendar();
    secondi = calendar.get(Calendar.SECOND);
    y= 10*secondi;
    g2.fillRect(x, y, lato, lato);
    }

    public void actionPerformed(ActionEvent arg0) {
    repaint();

    }


    public static void main(String[] args) {
    JFrame f = new JFrame();
    f.setTitle("Esercizio di prova di spostamento automatico nel tempo");
    f.setSize(500,500);
    f.setResizable(false);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Moto p = new Moto();
    f.getContentPane().add(p);//aggiungo al frame l'oggetto p
    f.setVisible(true);
    Timer timer = new Timer(1000,p);
    timer.start(); // faccio partire il timer

    }

    }
    I problemi sono due

    - il moto è sì uniforme ma non è molto bello ho provato a prendere dal Calendario i millisecondi (al posto dei normali secondi) e moltiplicarli per 10...ma il quadratino scompare nel nulla.....

    - l'altro problema è gestire il ritorno del quadratino nella direzione opposta una volta che è arrivato al bordo...ho provato a gestire la cosa con diversi if incapsulati ma sono riuscito solo a creare delle cose molto bizzarre

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Ti piace complicarti la vita eh? :asd:

    Grazie a Timer ti muovi ogni secondo.
    Il quadratino scompare perchè tu prendi il tempo e lo moltiplichi per 10...quindi sino a che non torni con il secondo 0 (quindi ogni minuto), la variabile y subirà continui incrementi... e quindi per forza di cose superi i 370px di altezza!


    EDIT:

    Modificando lievemente parti di codice:

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.Calendar;
    import java.util.GregorianCalendar;
    
    public class Moto extends JPanel implements ActionListener{
    private final int x=400;
    private int y;
    private final int lato = 100;
    private int secondi;
    private boolean stato;
    
    
    public void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.setColor(Color.red);
    g2.fillRect(x, y, lato, lato);
    
    if(y == 370) stato = true;
    else if(y == 0) stato = false;
    
    if(!stato) y+=10;
    else if(stato) y-=10;
    
    
    }
    
    public void actionPerformed(ActionEvent arg0) {
    repaint();
    }
    
    
    public static void main(String[] args) {
    JFrame f = new JFrame();
    f.setTitle("Esercizio di prova di spostamento automatico nel tempo");
    f.setSize(500,500);
    f.setResizable(false);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Moto p = new Moto();
    f.getContentPane().add(p);//aggiungo al frame l'oggetto p
    f.setVisible(true);
    Timer timer = new Timer(1000,p);
    timer.start(); // faccio partire il timer
    
    }
    
    }

  3. #3
    Originariamente inviato da Patrick Jane
    Ti piace complicarti la vita eh? :asd:

    Grazie a Timer ti muovi ogni secondo.
    Il quadratino scompare perchè tu prendi il tempo e lo moltiplichi per 10...quindi sino a che non torni con il secondo 0 (quindi ogni minuto), la variabile y subirà continui incrementi... e quindi per forza di cose superi i 370px di altezza!
    tra l'altro quando ci si inizia a complicare il lavoro delle volte neanche ci si rende conto di quello che si sta creando xD Grazie mille!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.