[java]ik wil actie op 1 object ipv alle tegelijk..

Pagina: 1
Acties:

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:16

Haan

dotnetter

Topicstarter
Sorry voor wazige titel, maar het lukte niet zo goed om probleem in 1 regel te beschrijven..

Ik heb nu afgelopen trimester een beetje leren programmeren (nog nooit eerder gedaan :) ), dit deden wij met Java. Nou was ik een beetje aan het spelen geslagen met een simpele opdracht die ergens in het boek stond. Dat was 'maak een programma waarin een bal in een vierkant rond kan stuiteren'.
Dat is wel gelukt ;) , maar ik vond het wel grappig en ging toen uitbreiden naar meerdere ballen, die van kleur moeten wisselen bij het aanraken van 1 van de zijdes van het vierkant.

Nu het probleem:
Het programma werkt eigenlijk prima, op het kleine feit na dat het me niet lukt om de ballen afzonderlijk van kleur te laten wisselen. Het lukt me alleen om ze allemaal van kleur te laten wisselen zodra eentje een muur raakt.
Het bestaat uit:
een 'Client' class (die runt alleen het programma),
een class 'Ball', die bevat de info over hoe de ballen zich gedragen
een class 'Bounce' die o.a. het aantal ballen bepaalt en zorgt dat ze op het scherm komen

Hieronder wat code, waar volgens mij het probleem zit: (ter info, bij het boek wordt gebruikt gemaakt van een CSLib.jar library, waarin ook een DrawingBox, hierin teken ik de ballen), setColor maakt een random rgb kleur.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void Draw(DrawingBox d, int SIZE, int RAD ){
      
        //teken een stip met random positie, straal RAD
        d.fillCircle( (rndx),(rndy), RAD );  
        
        rndx = rndx +dx;
        rndy = rndy +dy;
        
        //als de stip buiten een van de 'muren' komt, stuitert de stip terug, 
        //en er wordt weer een random kleur gekozen.
        if ((rndx > SIZE-RAD) || (rndx <=RAD)) {
            dx= -dx; 
            setColor(d);
        }
        
        if ((rndy > SIZE-RAD) || (rndy <=RAD)){
            dy= -dy;
            setColor(d);
        }
    }

De hele code staat hier in een zip-file.

Het gaat waarschijnlijk fout bij setColor(d); Nu wordt dus iedere keer als een van de ballen een muur raakt, de kleur voor alles in de DrawingBox verandert. Ik wil dus eigenlijk dat er ipv van setColor(d); iets komt waardoor alleen de desbetreffende bal van kleur wisselt.

In de Bounce class is een array met b1, b2 etc . voor iedere afzonderlijke bal.
Maar ik heb al van alles geprobeerd om iets van 'public void Draw(DrawingBox d, int SIZE, int RAD, Ball [] b )' en setColor(b[i]) (ook zonder [] etc. ) te maken, maar dat mag blijkbaar niet..

Het zal vast iets simpels zijn, maar ik weet niet wat :'(

Kater? Eerst water, de rest komt later


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:00
Draw is een member method van de class Ball ?
En setcolor ook ?

https://fgheysels.github.io/


  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:16

Haan

dotnetter

Topicstarter
Ja.
En de Draw method wordt vervolgens aangeroepen vanuit de Bounce class.
Java:
1
2
for (int j=0; j<n; j++) {
     b[j].Draw(d,SIZE,RAD);

(waarbij n het aantal ballen is dat gaat stuiteren)

Kater? Eerst water, de rest komt later


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 23-04 15:14

Robtimus

me Robtimus no like you

Het probleem zit in DrawingBox, die houdt maar 1 kleur bij. Wat je liever wilt is dat je per Ball een kleur bijhoudt: een private Color variabele, waarbij setColor alleen die kleur zet en niet de kleur van de DrawingBox. De DrawingBox moet dan niet zijn eigen kleur gebruiken bij het tekenen maar de kleur van de Ball (die moet dan ook een public Color getColor() krijgen).

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:16

Haan

dotnetter

Topicstarter
IceManX schreef op woensdag 23 november 2005 @ 21:01:
Het probleem zit in DrawingBox, die houdt maar 1 kleur bij. Wat je liever wilt is dat je per Ball een kleur bijhoudt: een private Color variabele, waarbij setColor alleen die kleur zet en niet de kleur van de DrawingBox. De DrawingBox moet dan niet zijn eigen kleur gebruiken bij het tekenen maar de kleur van de Ball (die moet dan ook een public Color getColor() krijgen).
Ja dat had ik opzich ook bedacht, maar ik krijg het niet voor elkaar. Denk je dat het uberhaupt mogelijk is mbv die DrawingBox? Ik wil eigenlijk helemaal af van die CSLib die we op de uni moeten gebruiken, maar ik kan nergens op internet vinden hoe je normaal gesproken dit zou doen.

(Iets met Graphics geloof ik, maar dat is me nog niet duidelijk).
Dus als je nog een iets duidelijkere tip en/of link hebt, graag _/-\o_

Kater? Eerst water, de rest komt later


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 23-04 15:14

Robtimus

me Robtimus no like you

java.awt.Canvas en de paint method overriden. Je krijgt dan iets als volgt:
Java:
1
2
3
4
5
6
7
8
9
10
11
public void paint(Graphics g) {
    Color old = g.getColor();
    for (int i = 0; i < balls.length; i++) {
        g.setColor(balls[i].getColor());
        int r = balls[i].getRadius();
        int x = balls[i].getX() - r / 2;
        int y = balls[i].getY() - r / 2;
        g.fillOval(x, y, r, r);
    }
    g.setColor(old);
}
Of misschien nog beter, geef Ball een draw(Graphics g) method waarmee hij zichzelf tekent op het Graphics object.

More than meets the eye
There is no I in TEAM... but there is ME
system specs

Pagina: 1