Hej
Det är så att jag försöker skapa en digital katapult (med fysik formler) som en applet, men jag har ett problem jag inte förstår mig riktigt på hur jag ska lösa.
När programmet ska rita min linje på den tomma vita ytan så får den för sig att
mina variabler x0 är densamma som x1 och y0 är densamma som y1 hela vägen ända tills tråden stannar. Fast jag sätter in x1 gamla värde i x0 och det samma med dem andra. Problemet uppkommer i själva paintfunktionen och jag har kontrollerat det med den kommenterade koden. Är det någon som vet hur man löser detta?
Alltså det är: g.drawLine((int)x0,(int)(this.ritYtaHeight-this.y0),(int)x1,(int)(this.ritYtaHeight-this.y1));
som uppfattar x0 och x1 som samma osv.
// KastRörelse med katapult v. 1
// Av Joelimport java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.text.*;public class katapult extends JApplet implements ActionListener,Runnable
{JPanel ritYta=new JPanel();
JPanel inVarde=new JPanel(new FlowLayout());
JPanel utVarde=new JPanel(new FlowLayout());JButton skjut=new JButton("Skjut");
JButton rensa=new JButton("Rensa");JTextField utFart=new JTextField("10 ");
JTextField utVinkel=new JTextField("10 ");
JTextField utHojd=new JTextField("10 ");JLabel tidPres=new JLabel("Tid: 0 s");
JLabel xyPres=new JLabel("(X,Y): X , Y ");
JLabel fart=new JLabel("Utgångshastighet v0:");
JLabel vinkel=new JLabel("Utgångsvinkel a0:");
JLabel hojd=new JLabel("Utgångshöjd y0:");// private Timer tim = new Timer(10, this);
Thread tim=new Thread(this);
boolean kor=false;
NumberFormat nf=NumberFormat.getInstance();
Dimension ritYtaSize=ritYta.getSize();
public static double tid=0, a=0, v=0, y0=0, x0, y1=0, x1=0, vX0=0, vY0=0, vX1=0, vY1=0;
public static double g=9.82, dt=0.01;int ritYtaHeight, ritYtaWidth, kollavit=1;
public void init()
{ritYta.setIgnoreRepaint(true); ritYta.setBackground(Color.white); getContentPane().setLayout(null); nf.setMaximumFractionDigits(2); skjut.addActionListener(this); rensa.addActionListener(this); utVarde.setSize(600,50); ritYta.setSize(600,500); inVarde.setSize(600,50); utVarde.setLocation(0,0); ritYta.setLocation(0,50); inVarde.setLocation(0,550); add(utVarde); add(ritYta); add(inVarde); inVarde.add(fart); inVarde.add(utFart); inVarde.add(vinkel); inVarde.add(utVinkel); inVarde.add(hojd); inVarde.add(utHojd); inVarde.add(skjut); inVarde.add(rensa); utVarde.add(tidPres); utVarde.add(xyPres); ritYtaHeight = 500; ritYtaWidth = 600;}
public void run()
{while (true) { if (kor==true) { innanPaint(); repaint(); efterPaint(); try { tim.sleep(10); } catch(InterruptedException ie) { } if(x0\>= ritYtaWidth \|\| y0\<=0) { if(x0\>=ritYtaWidth) xyPres.setText("(X,Y): "+nf.format(x1)+" , "+nf.format(y0)); else xyPres.setText("(X,Y): "+nf.format(x1)+" , "+nf.format(0)); kor=false; } } }}
public void actionPerformed(ActionEvent ae)
{if(ae.getSource()==rensa) { ritYta.setBackground(Color.blue); ritYta.setBackground(Color.white); kor=false; x0=0; tid=0; tidPres.setText("Tid: "+tid+" s"); xyPres.setText("(X,Y): ( X , Y )"); inVarde.setBackground(Color.gray); utVarde.setBackground(Color.gray); } if(ae.getSource()==skjut) { this.a=((Double.parseDouble(utVinkel.getText())) /180.0)\*Math.PI; this.v=Double.parseDouble(utFart.getText()); this.y0=Double.parseDouble(utHojd.getText()); this.tid=0; this.vX0=v\*Math.cos(this.a); this.vY0=v\*Math.sin(this.a); this.x0=0; kor=true; tim.start(); } } public void paint(Graphics g) { //super.paintComponents(g); inVarde.setBackground(Color.gray); utVarde.setBackground(Color.gray); g=ritYta.getGraphics(); g.setColor(Color.black); /\* if(x0!=0) JOptionPane.showMessageDialog(null,(int)x0+" "+(int)(this.ritYtaHeight-this.y0)+" "+(int)this.x1+" "+(int)(this.ritYtaHeight-this.y1)); \*/ g.drawLine((int)x0,(int)(this.ritYtaHeight-this.y0),(int)x1,(int)(this.ritYtaHeight-this.y1));}
public void innanPaint()
{
this.tid=this.tid+this.dt;
tidPres.setText("Tid: "+nf.format(tid)+" s");this.v=Math.sqrt((this.vX0\*this.vX0)+(this.vY0\*this.vY0)) ; this.a=Math.atan(this.vY0/this.vX0); this.vX1=this.vX0; this.vY1=this.vY0-this.g\*this.dt; this.x1=this.x0+this.vX0\*dt; this.y1=this.y0+this.vY0\*dt; xyPres.setText("(X,Y): "+nf.format(this.x1)+" , "+nf.format(this.y1));}
public void efterPaint()
{this.vX0=this.vX1; this.vY0=this.vY1; this.x0=this.x1; this.y0=this.y1;}
}