JavatterAdventCalendar

by orekyuu 0 Comments

なんかできてました。
http://www.adventar.org
12月4日にJavatterFXのプラグインについて少し書きたいと思ってます。よろしくお願いします。

JavatterFXの進捗はいいかんじです。メモリリークのバグとレイアウトが崩れるバグが直った感じです。
厄介なのはツイートのハイパーリンクだけですね・・・頑張ります。

Unity勉強会行ってきました

by orekyuu 0 Comments

今回はUnity4.3が出たこともあり2Dの話が主な感じでした。
あとはOclurusRiftというヘッドマウントディスプレイ触らせていただきました!実際にその世界に入っているみたいな感覚で面白かったです。MMDのモデルとか色んな角度から見たい感じですね。特に下から

ネットワークとか繋げられたら最終的にソードアート・オンラインみたいなのも実現できそうです。今後が楽しみな感じです。
ちなみにOculusRiftの値段ですが、日本円でだいたい3万~4万の間みたいです。もっと手の届かないような値段だと思ってましたがそうでもないみたいです。余裕があれば買いたいですね!

ListViewつらい。

by orekyuu 0 Comments

JavatterFX進捗だめです。
スクロールするだけでメモリの使用量がガンガン増えていく・・・どこに参照が残っているのか・・・
というかスクロールするだけで新しくインスタンス作るのやめてくれ!頼む!

Unityの2Dで早速遊んでみた。

by orekyuu 0 Comments

楽しみにしていたUnity4.3が来ました!
今回の目玉はやはり2Dですよね!早速公式のチュートリアルで遊んでみました。

結構面白かったキャラクターのアニメーションについて書いておきます。
2DAnimation_0
Animationタブを開いてアニメーションさせたいオブジェクトをクリックするとこのような画面になります。(これに気付くのに30分ほど悩んでた)
そしてAddCurveでアニメーションさせたいオブジェクトを追加していくだけです。
ここで気づいたのですが、画像の移動だけでなく、Colliderなどのコンポーネントも変更可能だということです!
0:05のキーフレームでCircleCollider2DのCenterの座標をずらしてみましたが正常に動きました。
まさかAnimationでパラメータ変更ができるとは…

2DAnimation_1
新しいAnimationの作り方ですが、左上のIdlesをクリックするとメニューが出てくるので、CreateNewClipを選択するだけです。
思った以上に便利そうですね。Unity2D。

ImageEffect

ちなみにImageEffectも使えるみたいですよ。

ユーザーウィンドウできました。

by orekyuu 0 Comments

JavatterFXのユーザーウィンドウ出来ました。
UserInfo
こんなかんじのウィンドウです。
切り替えの時は上のToggleボタンを使って移動します。
折角なので、切替時のアニメーションをやってみました。イメージ的にはスマホとかのスワイプみたいな感じです。
anim

Swingと比べるとアニメーションがすごく楽でした。(そもそもSwingでアニメーションさせてなかったけど)

今回使った単純な移動のほうほうですが、TranslateTransitionというクラスを使ってやっています。

int MOVETIME=600;//アニメーションする時間
TranslateTransition trans=new TranslateTransition(Duration.millis(MOVETIME));//600ミリ秒アニメーションする
trans.setNode(node);//アニメーションさせたいNodeを渡す
trans.setFromX(0);//アニメーション開始地点を0に
trans.setToX(100);//アニメーション終了地点を100に
trans.playFromStart();//アニメーション開始

コード見れば解説必要なさそうな感じですが、nodeが0から100まで動くよって感じのコードです。
簡単ですよね!

ちなみにZ軸も扱えたりするので動きに幅が出て面白いと思います。これだけでもいろいろできるので、ぜひJavaFXで遊んでみてください

ちなみに先日関ジャバに初参加してきたのですが、スピーカーの方が映していた資料がパワポだと思っていたらJavaFXで作ったものだったみたいです。
JavaFXすごすぎ。というよりパワポ使わずにJavaFXでやろうという発想もやばい…

jarファイルで拡張できるプログラムを作る

by orekyuu 0 Comments

簡単なプラグインシステムの実装方法みたいな感じです。
今回はJavatterβで使用した方法を紹介します。

まずはFileからJarFileインスタンスを作成し、マニフェストファイルの文字列を読み込みます。

File file=new File("plugin.jar");//Fileインスタンス作成
JarFile jar=new JarFile(file);//Fileのjarファイル作成
Manifest manifest=jar.getManifest();//マニフェストファイルの内容を取得
Attributes attributes = manifest.getMainAttributes();//マニフェストの属性を取得
String mainClassName = attributes.getValue("Plugin-Main");//マニフェストのPlugin-Main属性の文字列を取得

これでjarの中にあるマニフェストファイルの文字列を読み込めます。
Plugin-Mainはプラグインのjarを作った時に書いてもらいましょう。

これで作成したいインスタンスのクラス名が分かりました。

次にjar中にあるクラスファイルを検索パス内に追加します。
URLClassLoaderのaddURLメソッドを使うのですが、protectedになっているのでリフレクションで呼び出します。
http://docs.oracle.com/javase/jp/6/api/java/net/URLClassLoader.html

File file=new File("plugin.jar");
URLClassLoader loader=(URLClassLoader) getClass().getClassLoader();//URLClassLoaderを受け取る
Method m=URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});//addURLメソッドのMethodインスタンスを取得
m.setAccessible(true);//アクセスできるようにする
m.invoke(loader, new Object[]{file.toURI().toURL()});//fileのURLを引数に渡してaddURLメソッドを実行

これで検索パス内に入れることが出来たので、最初にJarのマニフェストから得た文字列をもとにインスタンスを作成します

String name="マニフェストから得た文字列";
URLClassLoader loader=(URLClassLoader) getClass().getClassLoader();
Class clazz=loader.load(name);//文字列からClassクラスのインスタンス作成
Plugin plugin=clazz.newInstance();//Classクラスからインスタンスを作成
plugin.hoge();//Pluginクラスのhogeメソッドを呼び出す

Pluginはインターフェースでもクラスでもなんでもいいです。
プラグインを作る側の人はPluginクラス(またはインターフェイス)を継承、実装なりして読み込んだ時にメソッドを動かすようにしておけばいいと思います。

間違っているところがあったりすればコメントでこっそり教えていただけると嬉しいです。

Javatter宣伝

by orekyuu 0 Comments

JavatterというTwitterクライアントを作成したので紹介したいと思います。
名前の通りJavaで作ったTwitterクライアントで、GUIはSwingでやってます。
このクライアントの特徴はプラグインを作成できるところですね。自分のほしい機能を作って拡張できるわけです。良かったら使ってくださいね!

Javatterのサイト:http://www1221uj.sakura.ne.jp/wordpress/

Javatterプラグインフォーラム:http://www1221uj.sakura.ne.jp//bbs/index.php

Javatterのリポジトリ:https://github.com/orekyuu/Javatter_for_PC 
PullRequestしてもいいのよ?