teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

メモリに関しては解決。CPUの負担に関しては未解決。描画のアルゴリズムを追記

2016/01/10 09:26

投稿

KureteRubyLua
KureteRubyLua

スコア206

title CHANGED
File without changes
body CHANGED
@@ -14,4 +14,31 @@
14
14
  一から作りなおして、Javaから別のGUIに切り替える、という事も考えたのですが、マルチプラットフォームにしたいため、Java用のGUI以外の選択肢がありません。C++におけるマルチプラットフォームのGUIはどれもがLGPL、GPLのライセンスばかりなのです。
15
15
 
16
16
  何とかしてSwingのままでCPUとメモリの使用量の負担を削りたいのですが、なにか良い手段はありますか?
17
- よろしくお願いします。
17
+ よろしくお願いします。
18
+
19
+ 追記:
20
+
21
+ メモリに関しては結局Integer型のArrayListをbyte型の配列に変えたら、大幅に削る事が出来ました。
22
+
23
+ CPUの負担に関しては削れていません。このうち、大きな負担になっているのがGraphicsクラスのdrawImage(画像を描画する関数)である事が分かっています。
24
+
25
+ 現在の表示方法のアルゴリズムは以下の擬似コードで書き示します。
26
+
27
+ int型の変数 width=描画される部分の横の長さ
28
+ int型の変数 height=描画される部分の縦の長さ
29
+ int型の変数 cs=マス目の解像度の大きさ
30
+
31
+ int型の変数 squareOfWidth=width/cs (横のマス目の数を計算する)
32
+ int型の変数 squareOfHeight=height/cs (縦のマス目の数を計算する)
33
+
34
+
35
+ for(int型の変数 x=0;x<squareOfWidth;x+=1){
36
+ for(int型の変数 y=0;y<squareOfHeight;y+=1){
37
+ g.drawImage(マス目に表示される画像)
38
+ }
39
+ }
40
+
41
+ 見て通りの単純なforループです。横のマス目の数が10、縦のマス目の数が10だと100回g.drawImageが呼ばれる計算となります。
42
+
43
+ このg.drawImageを呼ばれる回数を抑えたいのですが、方法はありますか?
44
+ 一旦別の画像の変数に表示されるマップを描画して、そこから描画する部分を取り出して表示するという方法も考えたのですが、この方法だと、かなりのメモリの量を使いました。