Iedereen die met java werkt heeft natuurlijk wel getekent. Meestal op het begin, gaat dat dmv paint methode van het applet. Later door middel van je klassen een eigen paint methode te geven. NOu ben ik ook wel eens aan het tekenen met java, maar zit ik met de vraag in mn maag, wat is nou de beste manier. De manieren die ik heb gebruikt zijn
- Een hoofdklasse maken die van canvas overerft en het grapics object aan de paint methodes van de andere objecten meegeven waarmee getekent wordt.
- De klassen die getekent kunnen worden van component laten erfen(beetje overkill)
- ehh, kan er even niet opkomen, maar volgens mij zijn er nog meerdere manieren.
Maar mijn vraag is dus, wat is de beste manier om je klassen te maken als je veel kleine dingen hebt die getekent moeten worden dus bijvoorbeeld een spel met player, enemy etcetera.
Een ander probleem waar ik wel eens tegen ben gelopen hiermee, is dat soms maar een enkel object verplaatst en ik het te duur vind om het hele scherm te repainten, daarvoor had ik bedacht om met de achtergrondkleur (bijv zwart)het hele object in te kleuren en dan het verplaatste object weer te tekenen. bij
iemand nog tips of links voor de betse manier om met dit soort dingen om te gaan, want in de meeste boeken hierover staan alleen maar smerige code examples
[edit]kwam opeens op nog iets wat ik wel eens gebruikte
namelijk bijhouden of het model veranderd is en als alle objecten gerepaint worden wordt er niks getekent bij die objecten(zie onder)
- Een hoofdklasse maken die van canvas overerft en het grapics object aan de paint methodes van de andere objecten meegeven waarmee getekent wordt.
- De klassen die getekent kunnen worden van component laten erfen(beetje overkill)
- ehh, kan er even niet opkomen, maar volgens mij zijn er nog meerdere manieren.
Maar mijn vraag is dus, wat is de beste manier om je klassen te maken als je veel kleine dingen hebt die getekent moeten worden dus bijvoorbeeld een spel met player, enemy etcetera.
Een ander probleem waar ik wel eens tegen ben gelopen hiermee, is dat soms maar een enkel object verplaatst en ik het te duur vind om het hele scherm te repainten, daarvoor had ik bedacht om met de achtergrondkleur (bijv zwart)het hele object in te kleuren en dan het verplaatste object weer te tekenen. bij
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| public class BallView extends View{ private GameObjectModel oldModel; public BallView( MutableGameObjectModel model ){ super( model ); oldModel = GameObjectModel.getGameObjectModel( model ); } public void paint(Graphics g) { g.setColor( Color.BLACK ); g.fillOval( oldModel.getX(), oldModel.getY(), oldModel.getWidth(), oldModel.getHeight()); g.setColor( Color.YELLOW ); g.fillOval( model.getX(), model.getY(), model.getWidth(), model.getHeight() ); oldModel = GameObjectModel.getGameObjectModel( model ); } |
iemand nog tips of links voor de betse manier om met dit soort dingen om te gaan, want in de meeste boeken hierover staan alleen maar smerige code examples
[edit]kwam opeens op nog iets wat ik wel eens gebruikte
namelijk bijhouden of het model veranderd is en als alle objecten gerepaint worden wordt er niks getekent bij die objecten(zie onder)
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| public class WallView extends View implements ModelListener{ private boolean updated = true; /** * @param model */ public WallView(Wall model) { super(model); model.attachListener( this ); } /* (non-Javadoc) * @see balspelletje.View#paint(java.awt.Graphics) */ public void paint(Graphics g) { if( updated ){ g.setColor( Color.BLACK ); g.fillRect( model.getX(), model.getY(), model.getWidth(), model.getHeight() ); Wall wall = (Wall)model; List list = wall.getBlocks(); for( Iterator it = list.iterator(); it.hasNext(); ){ AbstractBlock block = (AbstractBlock)it.next(); View blockview = null; if( block instanceof DefaultBlock ){ blockview = new DefaultBlockView( block ); }else if(block instanceof DoubleBlock ){ blockview = new DoubleBlockView( block ); }else if(block instanceof LargerBlock ){ blockview = new LargerBlockView( block ); } blockview.paint( g ); } updated = false; } } public void update( GameObjectModel model ){ updated = true; } } |
[ Voor 27% gewijzigd door Verwijderd op 21-07-2005 21:48 ]