Toon posts:

[JAVA] een Cardlayout met dubbele buffer?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi hoi,

wij zijn druk bezig voor een school project een spel te bouwen. Het spel is opgebouwd uit meerdere schermen (Panels) die we via een Cardlayout aanroepen.

Nou knipperd het spel nogal bij het repainten dus wilden we een dubbele buffer gebruiken, maar dat werkt dus niet naar behoren. Het moet wel mogelijk zijn maar wij hebben geen flauw benul wat we precies fout doen.

als er iemand is die hier meer van weet zou ik daar graag wat van horen. Je kan behalve hier posten ook mailen nee, dat doen we niet.
Alvast bedankt

Rutger

[ Voor 6% gewijzigd door whoami op 14-12-2002 11:39 ]


  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 15:03
Wat heb je zelf al gedaan om de dubbele buffering aan de praat te krijgen? Laat ook eens wat code zien van waar het precies fout gaat. En aangezien het voor school is, neem ik aan dat je klasgenoten hetzelfde probleem hebben en zij je misschien ook kunnen helpen.. of niet?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:36
Misschien is het makkelijker als je eens vermeld wat je al geprobeerd hebt, en hoe je het gedaan hebt. Dan kan er beter geholpen worden.

https://fgheysels.github.io/


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
In twee stappen thuis mode: Gebruik Swing

Maar als je kennis op wilt doen, dan is het misschien handig als je eens wat tutorials gaat doorbladeren. Maar hier is de procedure uit m'n hoofd.
1) Je maakt een graphics object
2) Je tekent op dat graphics object
3) Je converteert het graphics object naar een image
4) Je tekent de image op het scherm met het graphicsobject, die je van het OS of de browser kreeg :)

Verder zou het ook verdomde handig zijn als we de foutmelding te zien kregen en wat relevante code.
Als de fout een NullPointerException is, dan kan ik je vertellen dat in je init() je getGraphics() niet gaat werken ;)

Verwijderd

Topicstarter
De fout is inderdaad de NullPointerException omdat getGraphics() niet werkt in de init..
Ik ben alleen helaas niet in staat een oplossing te bedenken.

Wat betreft het school gebeuren. Voor zover mensen het proberen komen ze er ook niet uit. Zelfs de docent wist hier niet zo gauw een oplossing voor (Kan aan de docent liggen natuurlijk... )

Anyways. Hier is een stukje code uit m'n applet. Deze roept de eigenlijke cardlayout aan.
Het is best veel maar als iemand hierna zou willen kijken en tips heeft hoe ik de dubble buffer op mijn paneel/scherm kan gebruiken. Ik weet onderhand waar het fout gaat (ben er een dag aan bezig geweest) Maar ik kom zelf niet tot een handige oplossing.


---------------------------------------------------------]
package game;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Four_Play extends Applet {
private CardLayout cardlayout;
protected Paneel paneel;
protected String cat1[], cat2[], cat3[], catOV[];
protected Reader r1, r2, r3, rOV;
protected Vraag vraagjes[], vragen[][];
protected OpenVraag ovragen[];
private int i, a, b;
private Image achter, gender,wiet, heart, plaatjes[];
private MediaTracker plaatje;
private Applet applet;

public void init()
{
plaatje = new MediaTracker(this);
achter = getImage( getCodeBase(), "sherm3.plt" );
gender = getImage( getCodeBase(), "gender.plt" );
wiet = getImage( getCodeBase(), "wiet.plt" );
heart = getImage( getCodeBase(), "heart.plt" );
plaatje.addImage(achter,0);
plaatje.addImage(gender,1);
plaatje.addImage(wiet,2);
plaatje.addImage(heart,3);

try{
plaatje.waitForAll(5000);
}
catch( InterruptedException e){}

plaatjes = new Image[4];
plaatjes[0] = achter;
plaatjes[1] = gender;
plaatjes[2] = wiet;
plaatjes[3] = heart;

vraagjes = new Vraag[20];
vragen = new Vraag[3][20];
ovragen = new OpenVraag[20];

cat1 = new String[20];
cat2 = new String[20];
cat3 = new String[20];
catOV = new String[20];
arrayCreator();

r1 = new Reader(cat1, 0);
r2 = new Reader(cat2, 0);
r3 = new Reader(cat3, 0);
vraagjes = r1.toArray();
i =0;
createVragen();
vraagjes = r2.toArray();
i =1;
createVragen();
vraagjes = r3.toArray();
i =2;
createVragen();

rOV = new Reader(catOV,1);
ovragen = rOV.toArrayOV();


cardlayout = new CardLayout();// optioneel
setLayout( cardlayout );
paneel = new Paneel( cardlayout,this, vragen, ovragen, plaatjes);
add("paneel", paneel);

}
-----------------------------------------------------------------------------
Hieronder een stukje van de constructor + paint voor het paneel/scherm.
-------------------------------------------------------------------------------
package game;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

class Paneel extends Panel
{
private CardLayout cardlayout;
private Applet applet;
private Graphics g, gB;
private Button knopV, knopA;
private String regel;
private Vraag vragen[][], vraag;
private OpenVraag ovragen[], ovraag;
private int speler, i, c, cp, vsoort;
private Reader r1;
private Image plaatjes[] /*, buffer*/;
private TextArea infoVeld, vraag1, vraag2, sp1, sp2;
private TextField bSp1, bSp2;
private double ant, vers1, vers2;

// de presentator onderdelen
private int x0 = 285, y0 = 15;
private Mond mondje;
private Button wenkbrauwKnop;
private Wenkbrauw wenkbrauwLinks, wenkbrauwRechts;
private Oog oogLinks, oogRechts;


public Paneel(CardLayout cardlayout,Applet applet, Vraag vragen[][], OpenVraag ovragen[], Image plaatjes[])
{
this.applet = applet;
this.cardlayout = cardlayout;
this.vragen = vragen;
this.ovragen = ovragen;
this.plaatjes = plaatjes;


//De presentator settings
wenkbrauwKnop = new Button( "Wenkbrauwen bewegen" );
wenkbrauwKnop.addActionListener( new WenkbrauwKnopHandler() );
wenkbrauwKnop.setBounds(10,50,100,30);
add( wenkbrauwKnop );


setLayout( null );
setBackground( Color.black);

infoVeld = new TextArea("Druk op de vraag knop om het spel te beginnen. De eerste vraag is een percentage vraag om te bepalen welke speler begint.", 10, 50, TextArea.SCROLLBARS_NONE);
infoVeld.setBackground(Color.black);
infoVeld.setForeground( Color.white );
infoVeld.setBounds(215,176,318,170);

vraag1 = new TextArea(" ", 10, 5, TextArea.SCROLLBARS_NONE);
vraag1.setBackground(Color.black);
vraag1.setForeground( Color.white );
vraag1.setBounds(25,15,229,117);

vraag2 = new TextArea(" ", 10, 5, TextArea.SCROLLBARS_NONE);
vraag2.setBackground(Color.black);
vraag2.setForeground( Color.white );
vraag2.setBounds(497,15,227,117);


sp1 = new TextArea(" ", 12, 5, TextArea.SCROLLBARS_NONE);
sp1.setBackground(Color.black);
sp1.setForeground( Color.white );
sp1.setBounds(25,410,262,106);

sp2 = new TextArea(" ", 12, 5, TextArea.SCROLLBARS_NONE);
sp2.setBackground(Color.black);
sp2.setForeground( Color.white );
sp2.setBounds(463,410,262,106);

bSp1 = new TextField("0");
bSp1.setBounds(125,132,30,20);
bSp1.setVisible(false);

bSp2 = new TextField("0");
bSp2.setBounds(537,132,30,20);
bSp2.setVisible(false);

knopV = new Button("Vraag");
knopV.addActionListener(new KnopHandler());
knopV.setBounds(335,450,100,30);

knopA = new Button("Antwoord");
knopA.addActionListener(new KnopHandler());
knopA.setBounds(335,450,100,30);

add(infoVeld);
add(vraag1);
add(vraag2);
add(sp1);
add(sp2);
add(bSp1);
add(bSp2);
add(knopV);
add(knopA);
speler = 0;
regel =" ";
i = 0;
cp = 1;

}


public void paint( Graphics g ){
g.drawImage(plaatjes[0],0,0,750,530,this);
g.drawImage(plaatjes[cp],615,185,100,100,this);


oogLinks = new Oog( getGraphics(), Color.blue, Color.black, x0+45, y0+20, 30, 30, Color.black, x0+59, y0+34, 3, 3 );
oogRechts = new Oog( getGraphics(), Color.blue, Color.black, x0+105, y0+20, 30, 30, Color.black, x0+119, y0+34, 3, 3 );
oogLinks.start();
oogRechts.start();

wenkbrauwLinks = new Wenkbrauw( getGraphics(), Color.yellow, x0+40, y0+15, 40, 10, 0, 180 );
wenkbrauwRechts = new Wenkbrauw( getGraphics(), Color.yellow, x0+100, y0+15, 40, 10, 0, 180 );
wenkbrauwLinks.teken(g, Color.yellow );
wenkbrauwRechts.teken(g, Color.yellow );

mondje = new Mond( getGraphics(), Color.red, x0+45, y0+90, 90, 10 );
mondje.teken(g, Color.red);

//g.drawImage(buffer,0,0, this);
//gB.setColor( Color.black );
//gB.fillRect(0,0,790,550);
}

Verwijderd

Topicstarter
De twee dingen die ik dus heb geprobeerd zijn:

1.
het applet 'meegeven' dmv. 'this' aan de constructor van het panel. En dan de dubbele buffer creeren in het Panel. Maar dat werkt niet omdat de constructor in de init van de applet zit.

2.
De buffer al in het applet creeren en dan meegeven aan de constructor van het Panel. Hier treedt het zelfde probleem op. omdat je nog in de init zit met die constructor werkt het niet.

De vraag luidt dus eigenlijk hoe kan ik het zo maken dat het wel werkt (buiten de init om) Maar dat niet me cardlayout de mist in gaat.
Ik heb nl ook geprobeerd om de cardlayout niet in de init aan te roepen maar dan krijg ik m'n Panel niet op mijn scherm.

Wie o wie weet hier meer van.

Verwijderd

Zet het even in code tags zo is het niet te lezen

Verwijderd

Topicstarter
Jongens,
Ik ben nog enigzins nieuw hierzo, heb deze site van wat vrienden. Maaruh... kan iemand mij vertellen wat ie met code tags bedoeld?

  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 15:03
[ c o d e = j a v a ] en [ / c o d e ] (zonder de spaties dan he)
Krijg je zoiets als dit:
Java:
1
2
3
4
5
6
public class Main
{
     public static void main(String[] args)
     {
     }
}


Lees anders de faq eens: http://gathering.tweakers.net/forum/faq

[ Voor 15% gewijzigd door Jelmer op 14-12-2002 16:06 ]


Verwijderd

Topicstarter
Top, thanks Jelmer. Zal ik ff asap aan-/toepassen

Verwijderd

Topicstarter
Oh ja nog een heel ander vraagje voor whaomi.

Waarom niet emailen?

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Omdat dat niet des forums is. Dan heb alleen jij er wat aan. :o
Pagina: 1