質問編集履歴
3
コメントの追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -54,8 +54,8 @@
|
|
54
54
|
this.setVisible(true);
|
55
55
|
|
56
56
|
timer = new Timer(1000 / FPS, this);
|
57
|
-
back = createImage(this.getWidth(), this.getHeight());
|
57
|
+
back = createImage(this.getWidth(), this.getHeight());//バッファイメージ
|
58
|
-
buffer = back.getGraphics();
|
58
|
+
buffer = back.getGraphics();//イメージのグラフィクス
|
59
59
|
titleImage = MyUtilities.getImage("../images/title/TitleImage.jpg");
|
60
60
|
|
61
61
|
timer.start();
|
@@ -64,6 +64,7 @@
|
|
64
64
|
@Override
|
65
65
|
public void paint(Graphics graphics){
|
66
66
|
if(buffer != null){
|
67
|
+
//イメージの更新、描画
|
67
68
|
buffer.clearRect(0, 0, this.getWidth(), this.getHeight());
|
68
69
|
buffer.drawImage(titleImage, 0, 0, this.getWidth(), this.getHeight(), null);
|
69
70
|
}
|
@@ -77,7 +78,7 @@
|
|
77
78
|
|
78
79
|
if(source == timer){
|
79
80
|
timeMeasure.Update();
|
80
|
-
repaint();
|
81
|
+
repaint();//再描画
|
81
82
|
}
|
82
83
|
}
|
83
84
|
|
@@ -87,7 +88,7 @@
|
|
87
88
|
@Override
|
88
89
|
public void componentMoved(ComponentEvent e) {}
|
89
90
|
|
90
|
-
@Override
|
91
|
+
@Override//リサイズしたとき
|
91
92
|
public void componentResized(ComponentEvent e) {
|
92
93
|
back = createImage(this.getWidth(), this.getHeight());
|
93
94
|
buffer = back.getGraphics();
|
2
コードの追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -17,5 +17,86 @@
|
|
17
17
|
・試しに、**paint(Graphics g)**において、先頭で**buffer = g;**を書くと(ダブルバッファリングしないようにすると)ちらつくが速くなった。
|
18
18
|
・試しに、インスタンス生成時に**createImage(2000, 2000)**とするとずっと遅くなった。
|
19
19
|
|
20
|
+
#修正(該当のコード)
|
21
|
+
```java
|
22
|
+
package orgmarigo.test;
|
23
|
+
|
24
|
+
import javax.swing.*;
|
25
|
+
import java.awt.Graphics;
|
26
|
+
import java.awt.Image;
|
27
|
+
import java.awt.event.*;
|
28
|
+
|
29
|
+
import orgmarigo.util.Vector2;
|
30
|
+
import orgmarigo.util.TimeMeasure;//フレームレートを測定するクラス
|
31
|
+
import orgmarigo.util.MyUtilities;
|
32
|
+
|
33
|
+
public class ScreenTest extends JFrame implements ActionListener, ComponentListener{
|
34
|
+
static public final Vector2 INITIAL_WINDOW_SIZE = new Vector2(630, 560);
|
35
|
+
static public TimeMeasure timeMeasure = new TimeMeasure(100);
|
36
|
+
static public final int FPS = 100;
|
37
|
+
|
38
|
+
private Timer timer;
|
39
|
+
private Image back;
|
40
|
+
private Graphics buffer;
|
41
|
+
private Image titleImage;
|
42
|
+
|
43
|
+
public static void main(String[] args) {
|
44
|
+
new ScreenTest();
|
45
|
+
}
|
46
|
+
|
47
|
+
public ScreenTest(){
|
48
|
+
this.setTitle("ScreenTest");
|
49
|
+
this.setBounds(300, 200, (int)INITIAL_WINDOW_SIZE.getX(), (int)INITIAL_WINDOW_SIZE.getY());
|
50
|
+
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
51
|
+
|
52
|
+
this.addComponentListener(this);
|
53
|
+
|
54
|
+
this.setVisible(true);
|
55
|
+
|
56
|
+
timer = new Timer(1000 / FPS, this);
|
57
|
+
back = createImage(this.getWidth(), this.getHeight());
|
58
|
+
buffer = back.getGraphics();
|
59
|
+
titleImage = MyUtilities.getImage("../images/title/TitleImage.jpg");
|
60
|
+
|
61
|
+
timer.start();
|
62
|
+
}
|
63
|
+
|
64
|
+
@Override
|
65
|
+
public void paint(Graphics graphics){
|
66
|
+
if(buffer != null){
|
67
|
+
buffer.clearRect(0, 0, this.getWidth(), this.getHeight());
|
68
|
+
buffer.drawImage(titleImage, 0, 0, this.getWidth(), this.getHeight(), null);
|
69
|
+
}
|
70
|
+
|
71
|
+
graphics.drawImage(back, 0, 0, this);
|
72
|
+
}
|
73
|
+
|
74
|
+
@Override
|
75
|
+
public void actionPerformed(ActionEvent e){
|
76
|
+
Object source = e.getSource();
|
77
|
+
|
78
|
+
if(source == timer){
|
79
|
+
timeMeasure.Update();
|
80
|
+
repaint();
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
@Override
|
85
|
+
public void componentHidden(ComponentEvent e) {}
|
86
|
+
|
87
|
+
@Override
|
88
|
+
public void componentMoved(ComponentEvent e) {}
|
89
|
+
|
90
|
+
@Override
|
91
|
+
public void componentResized(ComponentEvent e) {
|
92
|
+
back = createImage(this.getWidth(), this.getHeight());
|
93
|
+
buffer = back.getGraphics();
|
94
|
+
}
|
95
|
+
|
96
|
+
@Override
|
97
|
+
public void componentShown(ComponentEvent e) {}
|
98
|
+
}
|
99
|
+
```
|
100
|
+
|
20
101
|
#その他
|
21
102
|
・ネットで調べて、setDoubleBuffered(boolean)を見つけたが使い方がわからなかった。
|
1
追加
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
ダブルバッファリング
|
1
|
+
ダブルバッファリングしたら重くなりました
|
body
CHANGED
@@ -9,11 +9,13 @@
|
|
9
9
|
・componentResizedをオーバーライドして`Image[back]`と`Graphics[buffer]`を変更(更新)する。
|
10
10
|
・update(Graphics g)はオーバーライドしていない。
|
11
11
|
|
12
|
+
|
12
13
|
#問題点
|
13
14
|
・実行してみて、画面を大きくすると動きが遅くなることに気がついた。
|
14
15
|
・フレームレートを測定すると、画面の大きさに比例して時間が遅くなっていた。
|
15
16
|
・試しに、**graphics.drawImage(back, 0, 0, this)**だけをコメントアウトすると画面は変わらないが、フレームレートは速くなった。
|
16
17
|
・試しに、**paint(Graphics g)**において、先頭で**buffer = g;**を書くと(ダブルバッファリングしないようにすると)ちらつくが速くなった。
|
18
|
+
・試しに、インスタンス生成時に**createImage(2000, 2000)**とするとずっと遅くなった。
|
17
19
|
|
18
20
|
#その他
|
19
21
|
・ネットで調べて、setDoubleBuffered(boolean)を見つけたが使い方がわからなかった。
|