# Sinuskurve



## HabHunger97 (12. Feb 2016)

Hi Leute,
muss über die Ferien Tontaubenschießen machen was eigentlich Moothuhn sein soll.
Damit das ganze nicht so einfach wird hat der Lehrer gesagt soll eine von drei Tauben eine Sinuskurve fliegen.
Mit Math.sin geht das auch gnaz gut nur leider wird der Kreis die Taube nicht gezeichnet. Ich hab auch schon mal n sout reingehauen um zu gucken wie es mit den positionen aussieht. X und Y Koordinate verändern sich nach 10 ms so wie es seil soll nur wird halt nichts gezeichnet.
Bei der GUI hab ich des gleiche Problem.
Keine Ahnung wieso nichts gezeichnet wird.
Vielleicht könnt ihr mir helfen.
Code der Tontaube:

```
if (xPos > BREITE) {
  xPos = 0;
  }
  while (i < KREISD) {
  yPos = 600- (int) (Math.sin(Math.toRadians(i)) * AMPLITUDE);
  xPos += 2;
  System.out.println("ypos Taube2:" + yPos);
  System.out.println("xpos Taube2:" + xPos);
  i++;
  }
  if (i >= KREISD) {
  i = 0;
  }

  public void zeichne(Graphics g) {
//  g.drawImage(f, xPos, yPos, dieGroesse * 10, dieGroesse * 10, null);
  g.setColor(Color.WHITE);
  g.fillOval(xPos, yPos, dieGroesse * 10, dieGroesse * 10);
  }
```
Coder der GUI:

```
public void paintComponent(Graphics g) {
  g.setColor(Color.BLUE);
  g.fillRect(0, 0, getWidth(), getHeight());
  g.drawImage(f, 0, 0, getWidth(), getHeight(), null);
  g.setColor(Color.red);
  g.drawOval(xFK - RADIUS, yFK - RADIUS, DURCHMESSER, DURCHMESSER);
  g.drawLine(xFK - FADENKREUZ, yFK, xFK + FADENKREUZ, yFK);
  g.drawLine(xFK, yFK - FADENKREUZ, xFK, yFK + FADENKREUZ);
  for (int i = 0; i < muni-1; i++) {
  if (i > 1) {
  g.drawImage(m, i*100+100, getHeight() - DURCHMESSER, DURCHMESSER, DURCHMESSER, null);
  }
  }
  g.setColor(Color.BLACK);
  g.drawString("Schüsse: " +s.schuss, 0, (FADENKREUZ/2));
  g.drawString("Treffer:" +s.dieAnzahlTreffer, 0, FADENKREUZ);
  g.drawString("Munition:"+(muni-1), 0, FADENKREUZ+(FADENKREUZ/2));
}
```
Danke im Vorraus
HabHunger97


----------



## Blender3D (12. Feb 2016)

Also auf die Schnelle in der paintComponent( Graphics g )
 fehlt der Aufruf deiner Taube zeichne(g)


----------



## HabHunger97 (12. Feb 2016)

ah sorry des hab ich drin hab den code gekürzt damit er nicht so lange ist, aber trozdem Danke für deine Hilfe
Des problem liegt eher daran das des in der forschliefe nicht gezeichnet wird


----------



## Blender3D (12. Feb 2016)

```
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;

public class TonTaubeFrame extends JFrame {
    public TonTaubeFrame(String name, int width, int height) {
        super(name);
        setPreferredSize(new Dimension(width, height));
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent evt) {
                System.exit(0);
            }
        });
        add(new TonTaubePanel(width, height));
        setSize(width, height);
        pack();
        setVisible(true);
    }
}
```


```
import java.awt.Color;
import java.awt.Graphics;

public class TonTaube {
    private int yPos;
    private int xPos;
    private int dieGroesse;

    public TonTaube(int dieGroesse) {
        this.dieGroesse = dieGroesse;
    }

    public void bewegeZuPosition(int x, int y) {
        xPos = x;
        yPos = y;
    }

    public int getxPos() {
        return xPos;
    }

    public void zeichne(Graphics g) {
        g.setColor(Color.WHITE);
        g.fillOval(xPos, yPos, dieGroesse * 10, dieGroesse * 10);
    }
}
```


```
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.Timer;

public class TonTaubePanel extends JPanel implements ActionListener {
    public static final int AMPLITUDE = 100;
    private TonTaube taube = new TonTaube(2);
    private Timer animator = null;

    public TonTaubePanel(int width, int height) {
        setPreferredSize(new Dimension(width, height));
        taube.bewegeZuPosition(10, (int) (AMPLITUDE * 3.5));
        animator = new Timer(10, this);
        animator.start();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        int x = taube.getxPos() + 1;
        if( x> getWidth() )
            x = 0;
        int y = AMPLITUDE - (int) (Math.sin(Math.toRadians(x)) * AMPLITUDE);
        taube.bewegeZuPosition(x, y);
        repaint();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        taube.zeichne(g);
    }
}
```

So kannst du die Animation mit einem ActionListener lösen.


----------



## HabHunger97 (13. Feb 2016)

Danke für deine Hilfe, hab es so ähnlich gemacht und n bisschen von dem Code abgeguckt funktioniert


----------

