Archief - [PROG][JAVA] grafisch gedoe

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

sabaoth

Legacy Member
Ik zou graag een tetris of dergelijke maken in Java, maar ik zou niet weten hoe ik aan het grafische gedoe moet beginnen. Ik heb al wat tutorials ligge zoeke maar die vind ik vrij onduidelijk :s
Zou iemand mij een goede inleiding kunne geven in het grafisch programmeren in java? :)

sabaoth

Legacy Member
Ik bedoel niet voor een GUI maar het tekene van sprites ofzo, of vierkantjes (en deze dan te late bewege)

MilM

Legacy Member
sabaoth zei:
Ik bedoel niet voor een GUI maar het tekene van sprites ofzo, of vierkantjes (en deze dan te late bewege)

Dat is gewoon met swing ...
Als je een vierkantje wilt doen bewegen, is dat met een timer die uw dataveld aanpast en dan de aanpassingen grafisch update.

Dus lees gewoon eens een tuturial over SWING.

Timmos

Legacy Member
In grote lijnen (NIET met Java2D):
  • Maak een JFrame aan
  • In dit JFrame komt een extensie van JPanel waarin ge zult tekenen
  • Elk JPanel heeft een methode Paint die ge dus zult overschrijven
  • Uw paintmethode wordt dus:
    Code:
    public void paint(Graphics g){
    // teken-methodes
    }
  • Methodes die ge bijvoorbeeld zult kunnen gebruiken zijn dan
    Code:
    g.setColor(new Color(200,100,133));
    g.drawRect(x0, y0, width, height);
    g.fillOval(x0, y0, width, height);

Raadpleeg de api voor een overload aan methodes en lees een tutorial. Het enige wat ge altijd in uw achterhoofd moet houden is dat ge werkt met een assenstelsel waarbij de y-as naar beneden staat gericht, een eenheid is een pixel en uw oorsprong ligt links bovenaan van uw JPanel.

Da Turtle

Legacy Member
Misschien is deze pagina wel interessanter. (de swing tutorial staat er ook op)
Onderaan vind je 2D graphics en sound :)

sabaoth

Legacy Member
even een beetje een off-topic vraag :p
Kben een breakout aan het make en er klopt iets niet met de collision detection. Het balletje slaat altijd een rij over
screenshot

Dit is de code:
Code:
int i = 0;
	while(i < blokjes.length)
	{
		if(!blokjes[i].destroyed)
		{
			if(v.y + v.height == blokjes[i].y && v.x + v.width > blokjes[i].x && v.x < blokjes[i].x + blokjes[i].width)
			{
				blokjes[i].destroyed = true;
				v.dy = -v.dy;
				System.out.println("Debug: blokje dood -> " + i);
			}
		}
	i++;
	}
v = het balletje en blokjes is de array met blokjes (spreekt voor zich :p )

dus blokje 0, 1, 2, 3, 4 & 10, 11, 12, 13, 14 & ... kunnen niet "dood" gaan
nochtans zou hij door heel de array met blokjes gaan en op elk blokje checken :s

(hij checkt alleen nog maar of het balletje de bovenkant van een blokje raakt)

MasterOfTerror

Legacy Member
Ik zie niet meteen een fout..

maar waarom moeten mensen toch altijd een while lus gebruiken als een for.. gebruik een for, ze dient er namelijk voor..

Wat doet: v.dy = -v.dy; eigenlijk ???

killgore

Legacy Member
Waarom loop je door elk blokje, je moet toch gewoon kijken in je balletjes-code of er zich in de richting van voortbeweging een blokje bevindt :/?

edit: @hierboven: de y-zin (horizontale zin) van uw beweging omkeren zodat er teruggekaatst wordt :).

sabaoth

Legacy Member
MasterOfTerror zei:
maar waarom moeten mensen toch altijd een while lus gebruiken als een for.. gebruik een for, ze dient er namelijk voor..

Ik vind dat da mooi oogt :p persoonlijke smaak he :)

killgore zei:
Waarom loop je door elk blokje, je moet toch gewoon kijken in je balletjes-code of er zich in de richting van voortbeweging een blokje bevindt :/?
Hoe bedoelt ge?
dan moet ik toch nog altij door al mijn blokjes gaan? want hoe kan ik nu wete welk blokje ersta? :s

killgore

Legacy Member
Ah, nvm, ik dacht dat je een speelveld bijhield (zal me leren eens code te bekijken :p).

Uw opzoeking kan efficiënter, maar daar ga ik nu niet over zagen.

En wat bedoel je met hij slaat een rij over?

Hij slaat de eerste rij blokjes over, of hij gaat in de rij blokjes en keert dan pas terug?

sabaoth

Legacy Member
zoals je op de screenshot kan zien zie je een rij blokjes, dan een rij niets, dan terug een rij blokjes , etc.
Op de plaatse waar er geen blokjes zijn, heeft het balleke de blokjes kapot gedaan. Door de rest vliegt em er gewoon los door :s

jodeman

Legacy Member
Code:
if(v.y + v.height == blokjes[i].y && v.x + v.width > blokjes[i].x && v.x < blokjes[i].x + blokjes[i].width)
{
	blokjes[i].destroyed = true;
	v.dy = -v.dy;
	System.out.println("Debug: blokje dood -> " + i);
}

je gebruikt beter rectangle.intersects als je het zo doet, maar je moet dit schrijven. sorry als er nog een fout in zit.

Code:
if ((v.y + v.height >= blokjes[i].y || v.y <= blokjes[i].y + blokjes[i].height) && (v.x + v.width >= blokjes[i].x || v.x <= blokjes[i].x + blokjes[i].width))

sabaoth

Legacy Member
! met die haakjes erbij en , && ipv || , lukt het wel :) bedankt jodeman

&& = and en || = or toch? :p

Want als ik het met || deed ware alle blokjes direct dood :p

Timmos

Legacy Member
"EN"
Code:
expr1 && expr2
"inclusieve OF"
Code:
expr1 || expr2
"exclusieve OF"
Code:
expr1 != expr2

sabaoth

Legacy Member
mmm nu heb ik ook gemaakt dat hij nakijkt of hij langst de linker zijkant op een blokje zit. Dit wil ook niet lukke (ik voel me dom :( )

jodeman

Legacy Member
het gewoon eens neertekenen helpt meestal goed voor zo een probleem als je het niet uit je hoofd kan doen :).

na collisie check je of de x van uw object groter is dan de x van uw blokje. Als dat zo is is het collisie aan de rechterkant, anders is het collisie aan de linkerkant.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan