5 berichten aan het bekijken - 1 tot 5 (van in totaal 5)
  • Q:

    Bijdrager
    NewToMac

    cirkel bewegen in java

    Hey,

    ik wil graag een cirkel over het scherm laten bewegen.
    Kan iemand mij helpen?
    Dit is wat ik heb:

    int x,y,x1,y1;
    x=20,y=70;
    while(x<500){
    x=x+10;
    repaint();
    g.setColor(Color.orange);
    g.fillOval(x, y, 10, 10);

    nu paint ie alles, maar het voorgaande laat ie gewoon staan.
    Wanneer ik er een delay in gooi, zodat de cirkels niet te snel gaan, dan stat mijn applicatie heel langzaam op. Het lijkt wel alsof het wil vastlopen.

    Dit is de delay en komt voor de repaint functie.

    try {
    Thread.sleep(1000);
    }
    catch(InterruptedException ex) {
    }

    Alvast bedankt


    Bijdrager
    phalkone

    Je kan dit oplossen door het volgende te doen. Maak een child class van de gewone panel class dat zowel een witte achtergrond als je cirkel tekent. Als hij dan de repaint() uitvoert tekent hij ook altijd de witte achtergrond en zal de vorige cirkel weg zijn. Volgend code toont hoe je deze nieuwe klasse kunt aanmaken (mss best als inner class, gezien deze class zich toespits op een bepaalde functie en dus van weinig nut zou zijn als ze publiek is).

    [code:1:ecdfdc37d4]
    class TekenPanel extends JPanel {
    public void paintComponent(Graphics g) {
    g.setColor(Color.white);
    g.fillRect(0,0,this.getWidth(),this.getHeight());

    g.setColor(Color.orange);
    g.fillOval(x,y,40,40);
    }
    }[/code:1:ecdfdc37d4]


    Bijdrager
    NewToMac

    hey,

    het cirkeltje moet een auto voorstellen dat een bepaalde weg neemt uit verschillende wegen. Het achtergrond is dus niet wit, maar bevat allerlei wegen.


    Bijdrager
    phalkone

    Vervang dan de witte achtergrond door een achtergrondafbeelding van je wegen:

    [code:1:c9d759ac0f]Image image = new ImageIcon("wegen.jpg").getImage();
    g.drawImage(image,2,2,this);[/code:1:c9d759ac0f]


    Bijdrager
    rvamerongen

    misschien een hint voor je.

    Hak het in stukken. :)

    Als je achtergrond complex is of/en er zijn meerdere lagen over elkaar, hak de achtergrond en eventueel de rest in stukken ( zeg maar als een grid ).
    Check waar je auto rijdt ( screen co├Ârdinaten. ) en herteken alleen de grids die bedekt of geraakt zijn door je auto of andere bewegende onderdelen. Zo kan je ook je achtergrond laten bewegen als je auto de kant nadert en uit beeld wilt rijden.

    Je grid kan b.w.v oneindig groot zijn zonder dat het teken tijd kost, want je vertekend altijd maar enkele grids.

    Dit kan je ook gebruiken als je auto b.v in het midden staat en dat de achtergrond beweegt.

5 berichten aan het bekijken - 1 tot 5 (van in totaal 5)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.