ballen laten stuiteren

Status
Niet open voor verdere reacties.

maxxie

Gebruiker
Lid geworden
14 dec 2006
Berichten
5
ik ben een beginnende programeur

ik ben nu bezig om een simpel programma te bouwen om een paar balletjes door een veld te laten stuiteren.

ik heb drie klasse

canvas(hier gaat alles goed)
boxball
balldemo

mijn code boxball:

PHP:
import java.awt.*;
import java.awt.geom.*;

public class BoxBall
{
    private int ballDegradation = 2;
    private Ellipse2D.Double circle;
    private Color color;
    private int diameter;
    private int xPosition;
    private int yPosition;
    private Canvas canvas;
    private int ySpeed = 20;                // Initiële snelheid omlaag
    private int xSpeed = 20;                 // Initiële snelheid horizontaal
    /**
     * Constructor voor objecten van de klasse BouncingBall
     */
    public BoxBall(int xPos, int yPos, int ballDiameter, Color ballColor,
                        int groundPos, Canvas drawingCanvas)
    {
        xPosition = xPos;
        yPosition = yPos;
        color = ballColor;
        diameter = ballDiameter;
        canvas = drawingCanvas;
    }

    /**
     * Teken deze bal op de huidige positie ervan in het venster.
     **/
    public void draw()
    {
        canvas.setForegroundColor(color);
        canvas.fillCircle(xPosition, yPosition, diameter);
    }

    /**
     * Wis deze bal op de huidige positie ervan in het venster.
     **/
    public void erase()
    {
        canvas.eraseCircle(xPosition, yPosition, diameter);
    }    

    /**
     * Verplaats deze bal afhankelijk van de positie en snelheid ervan
     * en teken de bal opnieuw.
     **/
    public void move()
    {
        // Wis de bal op de huidige positie in het venster
        erase();

        // controleer of de bal de rand geraakt heeft
        if (yPosition >= 500)
        {
            yPosition -=  ySpeed;
        }
        if (yPosition <= 0)
        {
            yPosition +=  ySpeed;
        }

            else
            {
                yPosition += ySpeed;
            }
        if (xPosition >= 600)
        {
            xPosition -= xSpeed;
        }
        if (xPosition <= 0)
        {
            xPosition += xSpeed;
        }
            else
            {
                xPosition += xSpeed;
            }

        // Teken de bal opnieuw op de nieuwe positie
        draw();
    }    

    /**
     * retourneer de horizontale positie van deze bal
     */
    public int getXPosition()
    {
        return xPosition;
    }

    /**
     * retourneer de verticale positie van deze bal
     */
    public int getYPosition()
    {
        return yPosition;
    }
}

balldemo:

PHP:
import java.awt.*;
import java.awt.geom.*;
import java.util.*;

public class BallDemo   
{
    private Canvas myCanvas;
    private int breed;
    private int hoog;

    /**
     * Maak een BallDemo-object. Maak een nieuw venster en maakt dat zichtbaar.
     */
    public BallDemo()
    {
        myCanvas = new Canvas("Baldemonstratie", 600, 500);
        myCanvas.setVisible(true);
    }      
        
    public void boxingBall()        
    {        
            int ground = 500;   

            myCanvas.setVisible(true);        

            BoxBall ball = new BoxBall(80, 50, 20, Color.blue, ground, myCanvas);        
            ball.draw();        
            BoxBall ball2 = new BoxBall(50, 40, 15, Color.red, ground, myCanvas);       
            ball2.draw();        
                  
            boolean finished =  false;        
            while(!finished) 
            {            
                myCanvas.wait(100);           
                // vertraging            
                ball.move();            
                ball2.move();                       
                if(ball.getXPosition() >= 1000 && ball2.getXPosition() >= 1000)            
                finished = true;        
            }        
            ball.erase();        
            ball2.erase();    
      }
    

    
}

als ik nu een het programma run, dan gaan de ballen mooi lineair naar rechtsonder, maar dan verdwijnen ze uit het beeld.


heeft iemand tips:

BVD max
 
Je schrijft 'mijn code boxball', als dat echt zo zou zijn zou ook weten wat je moet doen....
Maar goed, in de eerste code staat op een gegeven moment deze teskt;
// controleer of de bal de rand geraakt heeft
Hier wordt dus gecontroleerd of de rand wordt geraakt en wat er vervolgens met de bal gedaan moet worden.
Zo'n stukje (of precies het zelfde) moet je ook opnemen in je tweede code.

Vertaal voor je zelf gewoon wat er staat in begrijpelijk nederlands.
Bijvoorbeeld:
if (yPosition >= 500)
{
yPosition -= ySpeed;

Als de y positie van de bal groter of gelijk is aan 500 (de rand) dan
verander de y positie met de negatieve waarde van de (y)snelheid.

Lees zo eens de hele eerste code door en probeer te begrijpen wat er staat / wat de code betekend en voor actie zal opleveren.
De eerste code is wat dat betreft een prima stuk code om mee te beginnen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan