ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
407
407
EMPFEHLEN
-
Hallo!
Ich versuche nun seit Stunden meinen Denkfehler zu finden.
Dem Ball wird eine Richtung gegeben und danach soll er weiter rollen.
Wenn er auf die Bande kommt - prallt er ab ( Einfallswinkel = Ausfallswinkel).
Das Problem bei mir - er wird an der Bande immer mitgeschoben...
Was mache ich falsch
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
import javax.swing.*; import java.awt.*; public class Table extends JPanel implements Runnable{ private Ball ball = new Ball(0,0); private int x,y; private int zähler=0; public void setNewBallPos(){ ball.setPx(0); ball.setPy(getHeight()/2); repaint(); } public void setX(int Px){ x = Px; } public void setY(int Py){ y = Py; } public void paint(Graphics g){ g.setColor(Color.pink); g.fillRect(0, 0, getWidth(), getHeight()); ball.displayMe(g); } public void run(){ while(zähler<11) { // if für x-Koordinate if (ball.getPx()+x < 0 || ball.getPx()+x+20 > getWidth()){ if(ball.getPx()+x < 0){ ball.setPx(0); } else{ ball.setPx(getWidth()-20); ball.changePosY(y); } x = -x; zähler++; } else{ ball.changePosX(x); } // if für y-Koordinate if(ball.getPy()+y < 0 || ball.getPy()+y+20 > getHeight()){ if(ball.getPy()+y < 0){ ball.setPy(0); } else{ ball.setPy(getHeight()-20); ball.changePosX(x); } y = -y; zähler++; } else{ ball.changePosY(y); } repaint(); try{ Thread.sleep(800); } catch(InterruptedException e){} } } Ball getBall(){ return ball; } }Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
import java.awt.*; //import javax.swing.*; public class Ball { private int Px, Py; Ball(int x, int y){ Px = x; Py = y; } void changePosX(int x){ Px += x; } void changePosY(int y){ Py += y; } void displayMe(Graphics g){ g.setColor(Color.cyan); //variabel machen g.fillOval(Px, Py, 20, 20); } public int getPx() { return Px; } public int getPy() { return Py; } public void setPy(int py) { Py = py; } public void setPx(int px) { Px = px; } }
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Billiard extends JApplet implements ActionListener, MouseListener{ private static final long serialVersionUID = 1L; private JTextField textUnten, textRechts; private JButton start; private JLabel unten, rechts; private Table tisch = new Table(); private int zahlUnten, zahlRechts; public void threadstart(){ Thread thread = new Thread(tisch); thread.start(); } public int getZahlunten(){ return zahlUnten; } public int getZahlrechts(){ return zahlRechts; } public void actionPerformed(ActionEvent e){ if(e.getActionCommand().equals("Start")){ zahlUnten = Integer.parseInt(textRechts.getText()); zahlRechts = Integer.parseInt(textUnten.getText()); tisch.setX(zahlUnten); tisch.setY(zahlRechts); this.threadstart(); } } public void init(){ JPanel panelunten = new JPanel(); this.setSize(800, 400); this.setLayout(null); // Objekte erzeugen textUnten = new JTextField("2",5); textRechts = new JTextField("3",5); unten = new JLabel("unten:"); rechts = new JLabel("rechts:"); start = new JButton("Start"); //Tisch zeichnen getContentPane().add(tisch); tisch.setBounds(getWidth()/4, getHeight()/4, getWidth()/2, getHeight()/2); start.addActionListener(this); panelunten.add(textUnten); panelunten.add(unten); panelunten.add(textRechts); panelunten.add(rechts); panelunten.add(start); panelunten.setLayout(new FlowLayout()); panelunten.setBounds(0,getHeight()-40,getWidth(),40); getContentPane().add(panelunten); } public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub } public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } }
-
Was meinst du? Dass der Ball an der Bande immer einmal langwandert bevor er wieder abprallt?
Hab mal deine Ball-Klasse ein wenig verändert:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
package de.tutorials; import java.awt.*; //import javax.swing.*; public class Ball { private int Px, Py; Ball(int x, int y){ setPx(x); setPy(y); } void changePosX(int x){ setPx(getPx()+x); } void changePosY(int y){ setPy(getPy()+y); } void displayMe(Graphics g){ g.setColor(Color.cyan); //variabel machen g.fillOval(Px, Py, 20, 20); } public int getPx() { return Px; } public int getPy() { return Py; } public void setPy(int py) { Py = py; System.out.println("y: " + py); } public void setPx(int px) { Px = px; System.out.println("x: " + px); } }
Schau mal auf die Koordinaten-Angaben.. auch in deinem Code sieht man das ganz gut:
Code java:1 2 3
if(ball.getPy()+y < 0){ ball.setPy(0); }
Ich denke richtig müßte es heißen:
Code java:1 2 3 4
int newY = ball.getPy()+y; if(newY < 0){ ball.setPy(y-Math.abs(newY)); }
Er soll ja abprallen sobald er auftrifft und nicht erst einen Schritt später.
-
Irgendwie verstehe ich es nicht... An welcher Stelle soll ich deinen Code plazieren?
Soll ich es überall neu machen oder nur an einer bestimmten Stelle?
Wäre nett, wenn du es mir gena zeigst...
lg
Ähnliche Themen
-
Kugel rollen lassen
Von taylorlibbe im Forum Cinema 4DAntworten: 16Letzter Beitrag: 26.12.10, 00:08 -
VB 2008 Ball über eine Schräge rollen lassen
Von Taquar im Forum .NET Grafik und SoundAntworten: 4Letzter Beitrag: 24.02.10, 18:47 -
kugel rollen lassen
Von chanicua im Forum Cinema 4DAntworten: 1Letzter Beitrag: 29.05.07, 14:14 -
Ball physikahlisch rollen lassen
Von csfungamer im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 27.12.05, 11:00 -
Ball--> realistisch rollen
Von ponda im Forum 3D Studio MaxAntworten: 2Letzter Beitrag: 14.08.03, 22:04





Zitieren

Login





