Avatar billede DBigShooter Nybegynder
29. august 2013 - 23:13 Der er 8 kommentarer og
1 løsning

Få et objekt til at køre i en bue over skærmen? Sinuskurve?

Hej Eksperten,

Jeg sidder og rode med at få et objekt til at køre i en bue over skærmen, men kan ikke lige umiddelbart se hvordan jeg skal gøre dette? Snakker vi noget sinus og cosinus? Og hvordan bærer jeg mig ad med dette?
Avatar billede arne_v Ekspert
29. august 2013 - 23:24 #1
x = x0 + r * cos(v)
y = y0 + r * sin(v)

for forskelleige vaerdier af v (x0, y0 og r givne) burde goer det
Avatar billede DBigShooter Nybegynder
29. august 2013 - 23:27 #2
Hvordan gør jeg dette i Java?
Avatar billede arne_v Ekspert
29. august 2013 - 23:44 #3
Bruger du Swing?
Avatar billede DBigShooter Nybegynder
29. august 2013 - 23:53 #4
Nej, jeg forsøger at lave det i awt.
Avatar billede arne_v Ekspert
30. august 2013 - 00:02 #5
Du laver vel en klasse som extender en AWT klasse og overrider paint med en som skriver.

Jeg kab evt. proeve at bixe et eksempel.
Avatar billede DBigShooter Nybegynder
30. august 2013 - 00:07 #6
Det må du meget gerne.
Avatar billede arne_v Ekspert
30. august 2013 - 01:54 #7
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Timer;
import java.util.TimerTask;

public class Moving extends Frame {
    private int x0;
    private int y0;
    private int r;
    private double v;
    private double dv;
    private int siz;
    private Timer timer;
    public Moving() {
        setSize(800, 800);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        x0 = 400;
        y0 = 1000;
        r = 800;
        v = 90;
        dv = -0.1;
        siz = 20;
        timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                v += dv;
                if(v > 110 || v < 70) dv = -dv;
                Moving.this.repaint();
            }
        }, 25, 25);
    }
    public void paint(Graphics g) {
        g.setColor(Color.RED);
        g.fillOval((int)(x0 + r * Math.cos(v/180.0*Math.PI) - siz), (int)(y0 - r * Math.sin(v/180.0*Math.PI) - siz), 2*siz, 2*siz);
    }
    public static void main(String[] args) {
        System.setProperty("sun.awt.noerasebackground", "true");
        Moving f = new Moving();
        f.setVisible(true);
    }
}
Avatar billede arne_v Ekspert
30. august 2013 - 01:54 #8
Koden er noget primitiv, men jeg er ikke saa god til AWT.
Avatar billede arne_v Ekspert
30. august 2013 - 01:54 #9
Og et svar fra mig.
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

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