applet minska bollens max höjd vid varje studsning eller minska hastighet efter studsning
Hej
först jag vill att säga ursäkta med språket.
Jag har en applet kod som visar bollen som går neråt eller uppåt när boll träffar kanten.
Koden ses ut så:
import java.awt.*;
import java.applet.*;
import javax.swing.JApplet;
public class Boll extends Panel implements Runnable{
private Thread aktivitet;
private int r, x0,y0;
private int ySteg;
private int Height;
public Boll(int radie,int yHast){
r = radie; ySteg = yHast;
x0 = r; y0 = r;
}
public void start(){
if(aktivitet == null){
aktivitet = new Thread(this);
aktivitet.start();
}
}
public void stop(){
if(aktivitet!=null){
aktivitet.interrupt();
aktivitet = null;
}
}
public void run(){
while(XThread.delay(100)){
if(y0-r+ySteg<0||y0+r+ySteg>getSize().height){
ySteg =-ySteg;
}
y0 += ySteg;
repaint();
}
}
public void paint(Graphics g ){
g.fillOval(x0-r, y0-r, 2*r, 2*r);
}
}
Main code:
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JOptionPane;
public class Uppgift6_Kap12 extends Applet{
private Boll b;
public void init(){
// String s = getParameter("radie");
String s = JOptionPane.showInputDialog("radie");
int r = Integer.parseInt(s);
//s = getParameter("hast");
s = JOptionPane.showInputDialog("hast");
int h = Integer.parseInt(s);
b = new Boll(r, h);
setLayout(new GridLayout(1,1));
add(b, BorderLayout.CENTER);
}
public void start(){
b.start();
}
public void stop(){
b.stop();
}
}
Koden fungerar ganska snyggt. Men jag måste lägga en sak till. Bollens max-höjd måste minskas när bollen träffar kanten som ligger under och sen när boll når hans max punkt ska falla neråt igen. (Det är så eftersom i början boll ligger i högsta punkten och faller neråt.)
Jag har provat två olika alternativ. Alternativ 1 är att minska bollens max höjd. Jag har provat
Height= getHeight();
Height-=2;
i if loopen i metoden run() men det kunde inte lösa problem.
Alternativ2 var att minska bollens att minska bollens hastighet efter studsning. Skrev att ySteg ska minska med 1 när bollen träffar kanten
Jag har provat ySteg-=2; i if loopen i metoden run() och göra en if sats till som säger att bollen ska gå neråt om hastighet är 0
if(ySteg==0){
y0-=ySteg;
}
Men det hjälpte inte mig.
Jag har lösningsförslag men jag vill inte kolla på det just nu. Jag vill att förstå hur och vad måste jag göra.