※一覧:
その1→http://qiita.com/YSRKEN/items/ac75ffcb0f72adbd2a7f
その2→http://qiita.com/YSRKEN/items/6772903bf6242d8a86b7
その3→ここ
#概要
ここまでで、必要な機能の90%以上は既に実装できましたので、後は細かな改良となります。
とは言え、細かな改良でも積み重なれば大きなものになりますので、頑張っていこうと思います(欲しい機能がありましたらコメントでお寄せください)。
#あたしのガベージコレクション、あんまり役に立ってないかもー!
ご存知のように、Javaにはガベージコレクション(GC)が存在します。これは確保したリソースが参照されなくなった時点で自動解放されるというなかなかに便利な機能で、ガンガンnewしまくる言語にとっては必須と言っても過言ではない存在です。
ただ、使わない参照をずっと保持している場合はGCされませんし、いつGCによってリソースが解放されるかが分からないので適切なタイミングでリソースが解放されないと困る場合はGCが邪魔になります。C++にスマポ等があっても仕様上「GC」が存在していないのはパフォーマンスを史上とする言語として当然と言えるでしょう。
ただ、Javaでもリソースを明示的に解放することはできます。その有名なものの一つとして、Graphics#disposeメソッドがあります。名前の通り、Graphicsクラスのインスタンスを生成してから、それを使わなくなった場合に明示的に破棄できるといったものです。
これを明示的に宣言すべきかは意見が分かれているらしいのですが、使わないリソースがGCまで放置されるというのが気持ち悪いので早めにdisposeしておくことにします(C++脳)。
#新開発の自動画像取得機能が自慢なの!
前回、ショートカットキー入力がJavaの仕様上面倒臭いことを話しました。
その代わり、今回では、改装一覧画面に自動で画像が登録される機能を実装しました。つまり、前回までは、改装一覧画像(編成および装備が分かる画像)を作成するのに、
- 艦これの画面を改装画面にする
- 画像追加ボタンかAlt+Zキーで画像を登録する
- それを必要数分繰り返す
ことが必要だったのが、
- オプションから「自動取得」を有効にする
- 艦これの画面を改装画面にして、追加したい艦娘の場所をクリックして開く
- すると自動で登録されるので、後は艦これの画面を操作するだけでオッケー
になるのです。ポイントとしては、javax.swing.Timerを使えば定期的にスクショ画像を取得できるということでしょうか。あまり重いのも勘弁なので2fps程度にしていますが、人間がマウスを動かす際にそれほど高速に動かさないだろうということで特に調整機構は設けません。
#ど、どうしましょう? れ、連射用意! ……ですね?
連射とは行っても高橋名人的な意味ではなく、スクショを連続してキャプチャする機能のことを指します。これもjavax.swing.Timerを使えば簡単……なのですが、先ほどの自動取得もjavax.swing.Timerを使うのでコードが複雑になります。というわけで、条件を整理してみました。
動作モード | タイマー間隔[ms] | 挙動 |
---|---|---|
通常 | 100~1000 | 連射機能をONにした場合は1~10fpsで自動保存される |
改装 | 500 | 自動取得機能をONにした場合は2fpsで自動認識される |
ソート | なし | タイマーはOFF |
また、これらの挙動を実現するため、次の箇所でタイマーの間隔を変更するように記述しました。こういうときに**イベント駆動型プログラミングができる言語は便利ですね!**
- オプション画面で、自動取得のチェックを変更したとき
- オプション画面で、連射機能のfpsを弄ったとき
- メイン画面で、動作モードを変更したとき
#すこしは理想のソフトに近づけたかな?
更に、潜在的なユーザーの方々からありがたい意見を頂戴しつつ、それを反映させるように改良を進めました。具体的にはこんな感じです。
- スクショ撮影時に、自分や演習相手の名前を隠して保存することができる機能
- 編成画面で、編成部分だけを切り取って保存する機能
- 秋津洲ちゃれんじ用に、スクショを連射する機能
- 資源部分だけ切り取って保存する機能
- etc.
#更新が来ているぞ。確認せんのか?
以上を取り入れた記録は大切なの.jar Ver.1.2をリリースしました。活用してくだされば幸いです。