PSN jschut_82 | Xbox: JSchut82
Verwijderd
Ik weet niet op welke manier je het hebt gedaan, maar dubbele buffering heeft normaal gesproken geen last van schokken e.d.
ik doe het op deze manier
[script]
public void update(Graphics screen) {
Dimension applet_size = getSize();
offImage = createImage(applet_size.width, applet_size.height);
offGraphics = offImage.getGraphics();
// Erase the previous image
offGraphics.setColor(bg_game);
offGraphics.fillRect(5,5,490,293);
offGraphics.setColor(Color.black);
offGraphics.fillRect(0,0,500,5);
offGraphics.fillRect(0,0,500,5);
offGraphics.fillRect(0,0,5,300);
offGraphics.fillRect(495,0,5,300);
offGraphics.fillRect(0,298,500,2);
// Paint the frame into the image
paintFrame(offGraphics);
// Paint the image onto the screen
screen.drawImage(offImage, 0, 0, null);
}
public void paintFrame(Graphics screen) {
if (mainscreen) {
screen.setColor(Color.black);
screen.drawImage(main_background,0,0,this);
screen.drawImage(startbutton,205,229,this);
} else if (game_over) {
screen.setColor(Color.black);
screen.drawString("Game over Score " + score,230,150);
screen.drawString("Klik in het spel om opnieuw te beginnen",170,170);
} else {
if (!startlevel) {
screen.setColor(Color.black);
screen.drawString("LEVEL " + level,230,150);
screen.drawString("Klik in het spel om te beginnen",170,170);
} else {
if (!ballshot) {
screen.drawImage(ball,xCursor,281,this);
} else {
screen.drawImage(ball,xBall,yBall,this);
}
// blokken neerzetten voor level 1
if (level == 1) {
for (int j=0; j<level1.length; j++) {
if (level1[j][0] == 1) {
use_color = oranje;
}
if (level1[j][3] != 0) {
screen.drawImage(use_color,level1[j][1],level1[j][2],this);
}
}
}
screen.setColor(Color.black);
screen.drawString("Score: " + score,420,16);
screen.drawString("Balls: " + ballen,10,16);
screen.drawImage(balk,(xCursor-30),290,this);
}
}
}
[\script]
[script]
public void update(Graphics screen) {
Dimension applet_size = getSize();
offImage = createImage(applet_size.width, applet_size.height);
offGraphics = offImage.getGraphics();
// Erase the previous image
offGraphics.setColor(bg_game);
offGraphics.fillRect(5,5,490,293);
offGraphics.setColor(Color.black);
offGraphics.fillRect(0,0,500,5);
offGraphics.fillRect(0,0,500,5);
offGraphics.fillRect(0,0,5,300);
offGraphics.fillRect(495,0,5,300);
offGraphics.fillRect(0,298,500,2);
// Paint the frame into the image
paintFrame(offGraphics);
// Paint the image onto the screen
screen.drawImage(offImage, 0, 0, null);
}
public void paintFrame(Graphics screen) {
if (mainscreen) {
screen.setColor(Color.black);
screen.drawImage(main_background,0,0,this);
screen.drawImage(startbutton,205,229,this);
} else if (game_over) {
screen.setColor(Color.black);
screen.drawString("Game over Score " + score,230,150);
screen.drawString("Klik in het spel om opnieuw te beginnen",170,170);
} else {
if (!startlevel) {
screen.setColor(Color.black);
screen.drawString("LEVEL " + level,230,150);
screen.drawString("Klik in het spel om te beginnen",170,170);
} else {
if (!ballshot) {
screen.drawImage(ball,xCursor,281,this);
} else {
screen.drawImage(ball,xBall,yBall,this);
}
// blokken neerzetten voor level 1
if (level == 1) {
for (int j=0; j<level1.length; j++) {
if (level1[j][0] == 1) {
use_color = oranje;
}
if (level1[j][3] != 0) {
screen.drawImage(use_color,level1[j][1],level1[j][2],this);
}
}
}
screen.setColor(Color.black);
screen.drawString("Score: " + score,420,16);
screen.drawString("Balls: " + ballen,10,16);
screen.drawImage(balk,(xCursor-30),290,this);
}
}
}
[\script]
PSN jschut_82 | Xbox: JSchut82
Het is trouwens [ code ] en [ /code ].
JSchut, geef je toevallig ergens een repaint() naar die class van jou? Wat je kan (en zal helpen) is een repaint(x,y,w,h) doen. Dit zorgt ervoor dat er maar een klein deel wordt gerepaint en niet het hele scherm.
Normaal gesproken.. Remember Robbie?Op vrijdag 01 maart 2002 10:17 schreef JavaRules het volgende:
Ik weet niet op welke manier je het hebt gedaan, maar dubbele buffering heeft normaal gesproken geen last van schokken e.d.
JSchut, geef je toevallig ergens een repaint() naar die class van jou? Wat je kan (en zal helpen) is een repaint(x,y,w,h) doen. Dit zorgt ervoor dat er maar een klein deel wordt gerepaint en niet het hele scherm.
Verwijderd
ik weet niet of het effect zal hebben, maar ik doe het altijd anders.
even uit de losse pols:
[script]
public void update(Graphics screen) {
Dimension applet_size = getSize();
offImage = createImage(applet_size.width, applet_size.height);
offGraphics = offImage.getGraphics();
// Paint the frame into the image
paint(offGraphics);
}
public void paint(Graphics screen) {
// Erase the previous image
screen.setColor(bg_game);
screen.fillRect(5,5,490,293);
screen.setColor(Color.black);
screen.fillRect(0,0,500,5);
screen.fillRect(0,0,500,5);
screen.fillRect(0,0,5,300);
screen.fillRect(495,0,5,300);
screen.fillRect(0,298,500,2);
if (mainscreen) {
screen.setColor(Color.black);
screen.drawImage(main_background,0,0,this);
screen.drawImage(startbutton,205,229,this);
} else if (game_over) {
screen.setColor(Color.black);
screen.drawString("Game over Score " + score,230,150);
screen.drawString("Klik in het spel om opnieuw te beginnen",170,170);
} else {
if (!startlevel) {
screen.setColor(Color.black);
screen.drawString("LEVEL " + level,230,150);
screen.drawString("Klik in het spel om te beginnen",170,170);
} else {
if (!ballshot) {
screen.drawImage(ball,xCursor,281,this);
} else {
screen.drawImage(ball,xBall,yBall,this);
}
// blokken neerzetten voor level 1
if (level == 1) {
for (int j=0; j<level1.length; j++) {
if (level1[j][0] == 1) {
use_color = oranje;
}
if (level1[j][3] != 0) {
screen.drawImage(use_color,level1[j][1],level1[j][2],this);
}
}
}
screen.setColor(Color.black);
screen.drawString("Score: " + score,420,16);
screen.drawString("Balls: " + ballen,10,16);
screen.drawImage(balk,(xCursor-30),290,this);
}
}
// Paint the image onto the screen
screen.drawImage(offImage, 0, 0, null);
}
[\script]
even uit de losse pols:
[script]
public void update(Graphics screen) {
Dimension applet_size = getSize();
offImage = createImage(applet_size.width, applet_size.height);
offGraphics = offImage.getGraphics();
// Paint the frame into the image
paint(offGraphics);
}
public void paint(Graphics screen) {
// Erase the previous image
screen.setColor(bg_game);
screen.fillRect(5,5,490,293);
screen.setColor(Color.black);
screen.fillRect(0,0,500,5);
screen.fillRect(0,0,500,5);
screen.fillRect(0,0,5,300);
screen.fillRect(495,0,5,300);
screen.fillRect(0,298,500,2);
if (mainscreen) {
screen.setColor(Color.black);
screen.drawImage(main_background,0,0,this);
screen.drawImage(startbutton,205,229,this);
} else if (game_over) {
screen.setColor(Color.black);
screen.drawString("Game over Score " + score,230,150);
screen.drawString("Klik in het spel om opnieuw te beginnen",170,170);
} else {
if (!startlevel) {
screen.setColor(Color.black);
screen.drawString("LEVEL " + level,230,150);
screen.drawString("Klik in het spel om te beginnen",170,170);
} else {
if (!ballshot) {
screen.drawImage(ball,xCursor,281,this);
} else {
screen.drawImage(ball,xBall,yBall,this);
}
// blokken neerzetten voor level 1
if (level == 1) {
for (int j=0; j<level1.length; j++) {
if (level1[j][0] == 1) {
use_color = oranje;
}
if (level1[j][3] != 0) {
screen.drawImage(use_color,level1[j][1],level1[j][2],this);
}
}
}
screen.setColor(Color.black);
screen.drawString("Score: " + score,420,16);
screen.drawString("Balls: " + ballen,10,16);
screen.drawImage(balk,(xCursor-30),290,this);
}
}
// Paint the image onto the screen
screen.drawImage(offImage, 0, 0, null);
}
[\script]
Verwijderd
Hmmm dubbele buffering gaat ervan uit (bij mij
) dat je pic al getekend en al is op het moment dat je het plaatje laat zien het ook af is. Als het dan nog schokt is je code ofwel te traag(het schokt tussen de frames) of je dubbele buffering is niet echt dubbel (1 stap) OF je hebt de V-sync UIT staan.
Ik ben nog in je code aan t snuffelen maar die paintimages zijn bitblit routines. Ik heb zelf dubbel en zelfs triple buffering op de MSX geprogrammeerd , maar de uiteindelijke weergave van de pagina deed ik niet met bitblitten maar met een page swap. Verder kun je de IRQ's wel ff laten wachten op je beeldopbouw.
jaja op de MSX al. Sources op te vragen.
Edit: TYPO
Ik ben nog in je code aan t snuffelen maar die paintimages zijn bitblit routines. Ik heb zelf dubbel en zelfs triple buffering op de MSX geprogrammeerd , maar de uiteindelijke weergave van de pagina deed ik niet met bitblitten maar met een page swap. Verder kun je de IRQ's wel ff laten wachten op je beeldopbouw.
jaja op de MSX al. Sources op te vragen.
Edit: TYPO
het probleem is dat ik telkens me me hele scherm of zowat me hele scherm moet repainten omdat er een balletje door het scherm spring en bepaalde blokjes dan weer wel en dan weer niet zichtbaar zijn
PSN jschut_82 | Xbox: JSchut82
Verwijderd
je had trouwens ook paintFrame gebruikt terwijl paint aangeroepen wordt bij een repaint. de update wordt alleen aangeroepen zodra er iets in 't scherm veranderd is...
Ja dat komt omdat ik het volgende doe
bij repaint word paint aangeroepen en omdat ie normaal je scherm leeg donderd override ik hem en dan roep ik daarin paintFrame aan
en in paint staat alleen
dus als dat voor bij is doet paint niks meer dus dan gebruik ik alleen nog update en paintFrame
bij repaint word paint aangeroepen en omdat ie normaal je scherm leeg donderd override ik hem en dan roep ik daarin paintFrame aan
en in paint staat alleen
code:
1
2
3
4
5
| if (mainscreen) {
screen.setColor(Color.black);
screen.drawImage(main_background,0,0,this);
screen.drawImage(startbutton,205,229,this);
} |
dus als dat voor bij is doet paint niks meer dus dan gebruik ik alleen nog update en paintFrame
PSN jschut_82 | Xbox: JSchut82
oeps foutje paint moet update zijn die override ik niet paint
sorry......
sorry......
PSN jschut_82 | Xbox: JSchut82
ik het het probleem al gevonden
beetje een domme fout
ik had staan
offImage = createImage(applet_size.width, applet_size.height);
ff veranderen in
[code]
if (offImage == null) {
offImage = createImage(applet_size.width, applet_size.height);
}
[\code]
en het probleem was weg
in iedergeval voor de reacties
beetje een domme fout
ik had staan
offImage = createImage(applet_size.width, applet_size.height);
ff veranderen in
[code]
if (offImage == null) {
offImage = createImage(applet_size.width, applet_size.height);
}
[\code]
en het probleem was weg
in iedergeval voor de reacties
PSN jschut_82 | Xbox: JSchut82
Pagina: 1