Sinuskurve

HabHunger97

Mitglied
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:
Code:
  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:
Code:
  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
 

HabHunger97

Mitglied
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

Top Contributor
Code:
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);
    }
}

Code:
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);
    }
}

Code:
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.
;)
 

Neue Themen


Oben