Dag Tweakers,
ben voor school-projectje bezig het spel pong te maken. Ik heb een aantal tutorials gekeken/geprobeerd op het internet. Omdat de meeste tutorials op het internet niet of slechts gedeeltelijk OO werken heb ik geprobeerd de informatie die ik hier uit kreeg te gebruiken in een OO-benadering. Tot zover heb ik 5 klassen, namelijk een Main, een Ball, myFrame, Paddle en AL.
Als ik deze code run krijg ik een lijst met errors, vooral stack overflow errors
Deze liggen aan de methode repaint() die wordt aangeroepen in de klasse ball. Ik heb ondervonden dat je deze methode alleen mag aanroepen in de klas met het frame. Ik heb hier geprobeerd omheen te werken door de methode rerepaint() te maken in klasse myFrame. Dit zorgde ook niet dat de errors gefixed werden en dat het programma ook maar enigszins werken werd.
Mijn voornaamste vraag is nu:
Hoe zorg ik dat ik repaint kan gebruiken in klasse Ball?
Eventueel andere suggesties die ten goede komen aan de code zijn uiteraard ook welkom!
ben voor school-projectje bezig het spel pong te maken. Ik heb een aantal tutorials gekeken/geprobeerd op het internet. Omdat de meeste tutorials op het internet niet of slechts gedeeltelijk OO werken heb ik geprobeerd de informatie die ik hier uit kreeg te gebruiken in een OO-benadering. Tot zover heb ik 5 klassen, namelijk een Main, een Ball, myFrame, Paddle en AL.
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
| import java.awt.Color; import java.awt.Graphics; import java.awt.Rectangle; import java.util.Random; public class Ball implements Runnable { // globale variabelen int x, y, xDirection, yDirection; Rectangle ball; static Paddle p1 = new Paddle(15, 140, 1); static Paddle p2 = new Paddle(370, 140, 2); static int p1Score; static int p2Score; public Ball(int x, int y) { p1Score = p2Score = 0; this.x = x; this.y = y; // set ball moving randomly Random r = new Random(); int rDir = r.nextInt(2); if (rDir == 0) { rDir--; } int yDir = r.nextInt(2); if (yDir == 0) { yDir--; } setXDirection(rDir); setYDirection(yDir); // maakt een ball; ball = new Rectangle(this.x, this.y, 10, 10); } public void setXDirection(int xdir) { xDirection = xdir; } public void setYDirection(int ydir) { yDirection = ydir; } public void paint(Graphics g) { g.setColor(Color.WHITE); g.fillRect(ball.x, ball.y, ball.width, ball.height); } public static void draw(Graphics g) { Ball.draw(g); myFrame.rerepaint(); } public void run() { try { while (true) { move(); Thread.sleep(7); } } catch (Exception e) { System.err.println(e.getMessage()); } } } |
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
| import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.KeyListener; import javax.swing.JFrame; public class myFrame extends JFrame { Image dbImage; Graphics dbg; public myFrame() { setTitle("Pong"); setSize(400,300); setResizable(false); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); setBackground(Color.DARK_GRAY); addKeyListener((KeyListener) new AL()); } public void paint(Graphics g) { dbImage = createImage(getWidth(), getHeight()); dbg = dbImage.getGraphics(); draw(dbg); g.drawImage( dbImage, 0,0, this); } public void rerepaint() { repaint(); } public void draw (Graphics g) { Ball.draw(g); Ball.p1.draw(g); Ball.p2.draw(g); g.setColor(Color.WHITE); g.drawString("" + Ball.p1Score, 15, 50); g.drawString("" + Ball.p2Score, 270, 50); repaint(); } } |
Als ik deze code run krijg ik een lijst met errors, vooral stack overflow errors
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
45
46
47
48
49
50
| Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem: Cannot make a static reference to the non-static method rerepaint() from the type myFrame at Ball.draw(Ball.java:54) at myFrame.draw(myFrame.java:32) at myFrame.paint(myFrame.java:24) at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source) at javax.swing.RepaintManager.access$700(Unknown Source) at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source) at java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$200(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem: Cannot make a static reference to the non-static method rerepaint() from the type myFrame at Ball.draw(Ball.java:54) at myFrame.draw(myFrame.java:32) at myFrame.paint(myFrame.java:24) at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source) at javax.swing.RepaintManager.access$700(Unknown Source) at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source) at java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$200(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) |
Deze liggen aan de methode repaint() die wordt aangeroepen in de klasse ball. Ik heb ondervonden dat je deze methode alleen mag aanroepen in de klas met het frame. Ik heb hier geprobeerd omheen te werken door de methode rerepaint() te maken in klasse myFrame. Dit zorgde ook niet dat de errors gefixed werden en dat het programma ook maar enigszins werken werd.
Mijn voornaamste vraag is nu:
Hoe zorg ik dat ik repaint kan gebruiken in klasse Ball?
Eventueel andere suggesties die ten goede komen aan de code zijn uiteraard ook welkom!
[ Voor 20% gewijzigd door Creepy op 15-01-2013 22:28 . Reden: Wat code gesnipt ]