applet minska bollens max höjd vid varje studsning eller minska hastighet efter studsning

Permalänk

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.

Permalänk
Medlem

Hej, lite svårt och förstå.
När du startar börjar bollen i max och faller nedåt tills den nuddar nedre kanten. Menar du att den inte studsar upp efter den har nuddat kanten?

Permalänk
Skrivet av Filip-bs:

Hej, lite svårt och förstå.
När du startar börjar bollen i max och faller nedåt tills den nuddar nedre kanten. Menar du att den inte studsar upp efter den har nuddat kanten?

Nej nej program fungerar jättebra. Det studsar upp. Problem är när bollen studsar upp, bollens max höjd i y led måste bli lägre. När bollen träffar ny högst punkt, ska falla neråt igen. Repeteras det tills när bollen kan inte studsa upp

eller hastighet ska minskas för att bollen ska inte träffa övre kanten igen

Skickades från m.sweclockers.com

Permalänk
Medlem
Skrivet av ProgrammeringElev:

Nej nej program fungerar jättebra. Det studsar upp. Problem är när bollen studsar upp, bollens max höjd i y led måste bli lägre. När bollen träffar ny högst punkt, ska falla neråt igen. Repeteras det tills när bollen kan inte studsa upp

eller hastighet ska minskas för att bollen ska inte träffa övre kanten igen

Skickades från m.sweclockers.com

Kolla Här
Här har du de mattematiska formlerna som behövs för att göra studs functioner.

e:
Glöm inte att sätta in minimi gränsvärde på hur högt bollen måste studsa innan den slutar att studsa.
ex: bollens max höjd >10cm, studsar == true, else false // avsluta studs-functionen

Visa signatur

"Resistance is futile."

- Georg Ohm

Permalänk
Medlem
Skrivet av ProgrammeringElev:

Nej nej program fungerar jättebra. Det studsar upp. Problem är när bollen studsar upp, bollens max höjd i y led måste bli lägre. När bollen träffar ny högst punkt, ska falla neråt igen. Repeteras det tills när bollen kan inte studsa upp

eller hastighet ska minskas för att bollen ska inte träffa övre kanten igen

Skickades från m.sweclockers.com

Jag tänker att det du behöver göra är att minska höjden vid det tillfälle då bollen vänder och byter håll från neråt till uppåt.

Se till att hämta ut värdet på höjden innan du börjar loopen.

height = getSize().height;

och minska sedan detta värdet när bollen vänder håll.

Om du vill göra det enkelt för dig så kan du minska höjden i båda ändpunkterna.