Thread: JAVA spel (opdracht)
-
04-04-2012, 19:23 #1
JAVA spel (opdracht)
Hallo,
Onderstaande foto is hetgeen wat ik heb gemaakt, en heel eronder een stuk code van het spel.
Het roze is een mannetje en het gele is gewoon een oppervlak.
De vraag is hoe kan ik het gele laten staan als het mannetje erover heen gaat?
(Telkens als ik erover heen ga wordt het vakje terug zwart.)

Met de code heb ik gebruik gemaakt van dubbel buffering.
Alvast bedankt!!Code:import java.awt.*; public class View extends Canvas { private Doolhof doolhof; private int b, h; private int marge; private Image buffer; /** * Constructor for objects of class View */ public View(Doolhof doolhof) { this.doolhof = doolhof; b = 20; h = 20; marge = 18; } public void paint(Graphics g) { if (buffer == null || buffer.getWidth(this) < getWidth() || buffer.getHeight(this) < getHeight() ) { buffer = createImage(getWidth(), getHeight()); } // teken op de buffer ipv op de canvas teken(buffer.getGraphics()); // teken de buffer op de canvas g.drawImage(buffer, 0, 0, this); } public void update(Graphics g) { paint(g); } public void teken(Graphics g) { g.clearRect(0,0, getWidth(), getHeight()); b = getWidth()/doolhof.getBreedte(); h = (getHeight()-marge)/doolhof.getHoogte(); g.drawString(doolhof.getPunten() + "/" + doolhof.getTeBehalenPunten(), 10, 15); for (int i=0; i < doolhof.getBreedte(); i++) { for (int j=0; j < doolhof.getHoogte(); j++) { Voorwerp vw = doolhof.getVoorwerpOp(i, j); if (vw == null) { g.setColor(Color.BLACK); g.fillRect(i*b,j*h+marge, b,h); } else if (vw instanceof Aarde) { tekenAarde(g, i*b,j*h+marge); } else if (vw instanceof Speler) { tekenSpeler(g, i*b,j*h+marge); } g.setColor(Color.WHITE); g.drawRect(i*b,j*h+marge, b,h); } } } private void tekenAarde(Graphics g, int x, int y) { g.setColor(Color.YELLOW); g.fillRect(x,y, b, h); } private void tekenSpeler(Graphics g, int x, int y) { g.setColor(Color.PINK); g.fillRect(x,y, b, h); } }no votes
-
-
04-04-2012, 19:39 #2Approved 9-lifer
- Registered
- 27/08/04
- Location
- Leuven
- Posts
- 930
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 11/38
Dat gebeurt omdat het aarde voorwerp in die positie in het doolhof verwijderd wordt als het mannetje erin wordt gestoken.
I am thee and thou art me and all of one is the other.
TED talk: Richard Dawkins on militant atheismno votes
-
04-04-2012, 20:39 #3no votes
-
04-04-2012, 22:36 #4
Eerste idee dat in mijn hoofd opkomt is gewoon:
Een array dat uw doolhof voorstelt, en dus bepaalde plaatsen zijn dan muren (of wat het exact is in het spel, die gele oppervlakken).
Dan hebt ge uw "manneke", maar de array van uw doolhof houd niet bij waar uw manneke zit, uw manneke heeft gewoon een x en y positie dat overeenkomt met een bepaalde positie.
Dan tekent ge eerst uw doolhof, en dan daarna uw manneke op zijn positie. (x * breedte van 1 tile, y * breedte van 1 tile).
Als ge het echt op uw manier wilt doen.
Iedere keer als uw manneke op een tile gaat staan, bijhouden in een aparte variabele welk type dat is, en ene keer hij weggaat van die tile die tile terugzetten naar zijn oorspronkelijke staat (dat ge hebt bijgehouden in die variabele).
Maar imo is dat meer een oplossing zoeken voor een probleem dat er niet moet zijn.
Want naar mijn mening moet uw array van uw doolhof niet bijhouden waar uw manneke staat, die moet enkel bijhouden op welke posities muren staan, etc.no votes
-
04-04-2012, 23:42 #5
Het doolhof heb ik gemaakt uit een array, de gele oppervlakten zijn daar als bestaande waarden ingegeven. Maar ik krijg het niet voor elkaar om die plaatsen te behouden wanneer het 'mannetje' erover is gegaan.
no votes
-
05-04-2012, 08:24 #6
Ofwel ben ik onduidelijk of ge moet mijn uitleg beter lezen.
Maar nog even kort.
In plaats van in die array bij te houden waar uw manneke staat.
Houd ge de positie van uw manneke bij in een aparte variabele of variabelen.
Lees dan nog eens men uitleg (eerste gedeelte), geen idee eigenlijk hoe ik het anders kan uitleggen.no votes
-
05-04-2012, 11:56 #7Member
- Registered
- 20/09/04
- Location
- Kortrijk / Gent
- Posts
- 7,177
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 3/43
Dan is uw datamodel verkeerd.
Met uw view zie ik niet direct iets verkeerds.
Als een mannetje over een geel oppervlak gaat, maar dat geel daarom logisch gezien niet verdwijnt (gewoon onzichtbaar is doordat het mannetje erop staat), dan is het onlogisch om dat te verwijderen.
Zoals aangehaald, één mogelijkheid is om in uw tabel enkel het speelveld te tekenen. Je laat uw dubbele for lus staan in uw methode teken(Graphics g) en NA die dubbele lus doe je iets in volgende aard:
tekenAarde(g, doolhof.getSpelerX()*b,doolhof.getSpelerX()*h+marg e);no votes
-
06-04-2012, 16:57 #8
Bedankt Lethall, MilM en NeverwinterX voor jullie antwoord, het is mij gelukt!
Last edited by Ismael; 06-04-2012 at 20:11.
no votes

