マイクラのMODとか

どうも、hide92795です
とあるマルチ鯖で出会った人たちとわいわいがやがややってるのですが、実況しようぜということになり、鯖を作ることになりました。
最初は工業御三家くらいと少なめの構成だったのですが、Wikiを見てこれを入れてみようあれを入れてみようとやっているうちに導入MODの総計が50を超えましたw
その時に自分が体験した予想外のMOD干渉について書こうと思います。
①MODを増やしても減らしてもいないのに突然起動しなくなった
普通は設定だったりワールド破壊らへんを想像する(実際そうだと思ってた)のですが、
再度1から全部揃えるとちゃんと起動する
その設定を前のに移したら起動しない
学校でずっと考えてましたわ(´・ω・`)
ちなみに正解は「ファイルの順番」でした
modsに入れたzipのファイルの順番が違うだけで起動できなくなることがあるようです・・・
②BlockIDを拡張分に移すと起動しない
これはよくある話ですね
大抵は別のMODのブロックのIDをずらしてそこに埋め込む
というのが基本的な解決方法だと思います。
まぁ、エラーが起きなくてもおいた瞬間に別のブロックに化けたり
SunLightMODではブロックを置いた瞬間にそのブロックの下から核発電機が登場したり
初めて見た時はビビりましたって(´・ω・`)


MOD制作について少し
自分が非公式に更新しているHangableMapsというMODを作っていての経験談を

これはMapを右クリックで壁に貼り付ける時のソースです
ただし、このソースにはバグがあるようなのです。
ちゃんとしたソースはこちら

上のソースだとシングルで複数枚のMapを持っていた時に一気に全部消費します。
なんかもう何がなんやらという感じです。(ちなみにまだ間違っている箇所はわかっていませんw)
他にもSecretRoomsModのOne-WayBlockにて、
このブロックは一面だけが近くにあるブロックの対応する面のテクスチャに化けます。
ただし内側から見た時はテクスチャが見えなくなります。
つまり一方通行(OneWay)的に見えるブロックということです。
このMODのフォーラムでは、Forgeの最新版を使えと書いてあるのですが、DLリンクを見るに3.1.3.105が推奨バージョンのようです。
しかし、このバージョンは既に古く、他の様々なMODがModLoader、AudioMod,4096ブロック対応化MODなどの機能を搭載している3.3.7.***が必須になってきたりしています。
このMODにもその影響が及んだらしく、最新版のForgeではOne-Wayブロックの一方通行的な見え方がしなくなってしまいます。(内側から見ても透過されない)
早速修正に取り掛かって原因(?)を発見(もしかしたら別のところかもしれないけどとりあえず治った)、早速再導入してみたところ
やっぱり透過されない
けど、Forgeオンリーの環境に入れるとちゃんと動作する
つまりは他のMODとの干渉だなと思い、MODを1つづつ追加しながら検証
結局最後のMODを入れた後もちゃんと動作しちゃったよ
最初と違うのは「ワールドを新しく作っている」という点
結局それで解決しましたww
まだ近くにいると透過されないとかのバグがあるからそれも直さないとね
なんかだらだら書いた割にはどうだっていいことばっかりな気がしますがw
ではノシ

プラグインはほどほどに

どうも、hide92795です
Java系のプログラムの開発にはEclipseという開発環境(IDE)を使っています
自分の環境では、エディタ部分のフォントに「MS ゴシック」を使っています
「プログラミングには等幅フォント」って言われている(?)ように、
フォントがプロポーショナル(可変幅)だとなんとなく落ち着かないのですww
というわけで、Eclipseを使い始めてからずっとMS ゴシックを使っています。
等幅フォントなのでちゃんと縦に見た時に揃っていてくれていたはずなのですが・・・
何故かずれているorz
というわけでぐぐったところ、
エディタ内部に太字の文字(new, classとか)があるとずれるらしい
たしかに太字のところでずれている・・・
というわけで解決策として出ていたJStyleというプラグインを導入
そこまでは良かったのですよ・・・・
JStyle導入後、Eclipseを起動させようとするとやけに時間が掛かる(-cleanのせいだと思ってた)
数分待っても起動しないのでスプラッシュ画面をクリックしたら白い靄がかかった!?(つまりは反応なしww)
数回やっても起動しないのでJStyleのプラグインを抜くことに
READMEの通りに抜いても起動しねぇ・・・orz
というわけで泣く泣く旧環境を捨て、新しく環境を揃えることに・・・
ちょうど新しいバージョン(3.7.2 旧環境は3.7.1)が来てたのでまぁいっかと思ってたら
6月くらいにバージョン3.8が来るらしい(´・ω・`)
まぁ、仕方ないねw
教訓として「プラグインはほどほどに」というわけですw
(JStyleが既存のファイル書き換え型だったっていうのもあるけどねw)


これより先は自分の環境やら入れているおすすめのプラグインやらの紹介なのですー
(ちなみにまっさらな状態のEclipseにJStyleだけ入れても起動しなかったよ(´・ω・`))
基本環境はEclipseの公式サイトでDL出来る
「Eclipse IDE for Java Developers」
http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/indigosr2
ってやつに日本語化プラグインである
「Pleiades」
http://mergedoc.sourceforge.jp/
の単体版を導入したもの
フォントは「Consolas」に
「Miguフォント(Migu 1P)」
http://mix-mplus-ipa.sourceforge.jp/migu/
をフォントリンクさせたもの
(ただし、EclipseでConsolasにフォントリンクさせるにはなぜかMicrosoft Sans Serifに対して
フォントを登録させないといけないみたい。
さらに、ただ登録させただけだと、日本語フォントが小さくなってしまうので
登録させる時に「migu-1p-regular.ttf,Migu 1P,128,85」のようにスケーリングをさせないとダメだった)
フォントリンクの方法に関しては、レジストリをいじる作業なのでここでは書きません。
ここからがEclipseへのプラグインの紹介です
説明としては簡単にしか書いていないので、使い方やその他もろもろは自分で調べてください。
「更新サイトに登録」とあるものは「新規ソフトウェアのインストール」からインストール出来るもの
「自分で追加」とある物は自分でプラグインをダウンロードして「plugins」フォルダに入れるものです
1.Android 開発ツール
更新サイトに登録

http://dl-ssl.google.com/android/eclipse/

Androidアプリの開発には欠かせないものです。
2.FindBugs
更新サイトに登録

http://findbugs.cs.umd.edu/eclipse/

ソース内にあるバグを見つけてくれる。
3.QuickREx
更新サイトに登録

http://www.bastian-bergerhoff.com/eclipse/features/

正規表現のテストを行える
4.Explore It
更新サイトに登録

http://www.strippers.jp/eclipse/updates

パッケージ・エクスプローラーから右クリックで対象のフォルダを開ける
5.AnyEditTools
更新サイトに登録

http://andrei.gmxhome.de/eclipse/

エディタ上で様々な変換(半→全などなど)を行える
6.FileBookmark Plugin for Eclipse
自分で追加

http://sourceforge.jp/projects/filebookmark/wiki/FrontPage

Webサイトやファイルへのリンクをブックマーク風に登録できる
今の環境はこんな感じです
ではノシノシ

 

実機買ったよー

どうも、hide92795です
Androidの開発にやっぱり実機が欲しくなったので買って来ましたww
機種はSEMC Experia acro(au IS11S) Sofmapの中古で13800円でした
CA3G0083
実際にデバッグで使ってみましたがメモリ関係でやっぱりエミュより何枚も上手という感じでした
is11s_1
ちゃんとDDMSからSSも撮れるのでおkですw
最近やることが多くて疲れた(´・ω・`)
ではノシノシ

アプリの現状とか

どうも、お久しぶりです。
hide92795です
テストやらなんやらで久々の更新となりますww
まず、Twit Syncの新バージョンについて
GUIを1から作りなおしたので、だいぶ時間がかかりましたが、9割がた完成といったところです。
ただ、Twitter4jの仕様変更で、今まで使ってたメソッドがDeprecatedになってしまったので、代替メソッドを使おうと思っているのですが、それが見つからず・・・・
おそらくgetFriendsIds()でIDsを取って、それをlookUpUsers()にぶち込めばいいはずなんですけど、なぜかエラー。。。。。
どうしてもわからなければT4Jのメーリングにポストすることにします。。。。
次、Twit Time for Android Pro
こちらも9割方完成ですが、LVLの仕組みが全く理解出来ない・・・・・orz
別にLVLは搭載しなくてもいいのですが、Pro版に手を出したのもこのLVLの勉強の一環だからね・・・
最後、ノベルゲームのエンジン
こちらはすこしずつですが進行しておりますww
今はウェイトカーソル(1ページ分の文字を表示し終えたあとに表示されるアレ)が完成したところですww
https://github.com/hide92795/NovelEngine-Client
に時々プッシュしてるので、暇があったら見てみてくださいww
ではノシノシ

LWJGLで日本語を表示させる

どうも、hide92795です
前前前回の記事でノベルゲームのエンジンつくるお って感じで書きましたが、良い感じに苦戦しておりますww
あの記事を書いたときはSWT+Draw2Dでやっていたのですが、全体的に遅くなってしまったので諦めましたw
その後も、GTGEや普通にSwingなどでもつくってみたのですが、これらもイマイチ・・・・・
という訳で、Javaの文法から程遠いので使用を諦めていたLWJGLに落ち着いたわけですww
んで、このLWJGLを使う上で一番の悩みどころが
日本語の表示が簡単にできない
ということなんですよww
同じくLWJGLを使っているマインクラフトでは、v1.1から多言語表示に対応しましたが、対応方法は全部の文字が書かれたビットマップから文字を生成する
というもので画質が悪くなる上に、フォントの種類・太字等が変えられないという感じになってしまいますw
それだとさすがにあれなので、自分のやつでは
Graphics2d#drawString(String str, int x, int y) メソッドを使ってBufferedImageに文字を書き込み、
それをLWJGLでテスクチャとして貼り付けるということをすることにしましたww
ただし、この方法ではすでにどのような文字が表示されるのかが予めわかっているというのが前提なので、そうではない場合は使えないと思いますw
以下ソースコード

drawString自体にかかる時間は0.5秒ほどなので、別スレッドで画像の生成を行い、TextureにするのはGUIスレッドでという風にするのがいいと思いますw
また、drawStringした文字列の幅を取得して、一定数(幅)以上なら改行を行う
みたいなことを行なっていないので注意してくださいw
(そこで1時間ほど悩んでるwww)
ではノシノシ
ー2/13追記ー
LWJGLについて調べていたら、Slick Utilの中に「BufferedImageUtil」というクラスがあって、
それを使うとBufferedImageからTextureにダイレクトに変換することが出来るというのを見つけましたw
なので、OutputStreamなどなどが全てなくなって、

のようにすることができますw

MessagePack for Java を使ってみる

どうも、hide92795です
ノベルエンジンの作成の中で、読み込むデータなどをどのように保存(シリアライズ)しておくかということで、
調べていたら速度・圧縮率ともに優秀らしい MessagePack というライブラリを使用することにしました。
(今まではjava.io.Serializableを実装していましたが、圧縮率という面で不安になったので乗り換えることにしましたw)
The Message Pack
http://msgpack.org/

※この中では2012/01/16時点(MessagePack 0.6.6)について書いています

・インストール方法

MessagePackはjarとして配布がされていないので、gitかMavenリポジトリからソースを取得&コンパイルする必要があります
自分がやったやり方はeclipseとgitとAntでjarを生成する方法です。
①EgitでMessagePackのリポジトリからクローンする
msgpack_1
②リポジトリを右クリックし、「プロジェクトのインポート」
「プロジェクトをインポートするためのウィザード」では「一般的なプロジェクトとしてインポート」を選択
③パッケージエクスプローラーに「msgpack-java」というのが追加される
④プロジェクトの中の「built.xml」を右クリックし、「実行」→「Ant ビルド」を選択
⑤コンソールに「BUILD SUCCESSFUL」と出たら成功
⑥プロジェクトのフォルダの中の「build」フォルダにmsgpack-0.0.1.jarと「build\lib」フォルダに必要なライブラリが生成される
⑦これらをまとめてビルドパスに追加する
これで使う準備ができますw
・使い方
公式の方には、シリアライズしたいクラスに@Messageアノテーションをつければいいと書いてありましたが、byte[][]なんかを自分のクラスでは使っているのでエラーになってしまいました。

↑基本的にはこんな感じで使います。

自分のやつではこれでできないので、自分でPackerを生成し、値を一つずつ埋め込み&読み込みを行います。
・埋め込み

・読み込み

こんな感じですw
手順としては、PackerをcreatePackerで取得して、Packerに対してwrite(データ)で埋め込み、
read***()でプリミティブ型とString型の読み込み
(readInt(), readString(), readShort(), readLong())
read(Class c)でプリミティブ型のラッパークラス・その他Object・byte配列を除くプリミティブ型の配列の読み込み
(read(Integer.class), read(String.class), read(int[].class))
を行います。
埋め込みと読み込みの操作での操作は同じ順番(1番目にint 2番目にString みたいに)
これらを守ればほぼ確実にできると思いますw
ではノシ

C81行ってきたお

あけましておめでとうございます、hide92795です
今年もよろしくお願いします( `・∀・´)
記事の内容は去年のことですがw
人生初のコミケに行って来ましたw
行ったのは3日目
これもコミケの醍醐味かな?ということで自宅の最寄り駅の始発(4:55)で行きましたw
その始発にも同じ所に行くような感じの人が数名いたんだけどねww
りんかい線の駅に06:05位について、そのまま東館の待機列へ
c81_1
すでに結構な人がいました・・・
マップ上で表すと
c81_2
だいたいここら辺でした
もちろん待ってる間は寒く、3時間は結構長いですww
んで、コミケ初参加の俺がハマってしまったことが少し程・・・
1.入り口は東3・6側
2.壁側サークルの中には外に並ぶところもある
3.買ったものを入れておく袋が必要
4.小銭をわざわざ財布から出すのがめんどい(冬なら大抵コートとか来てるので1000か500を数枚ほどポケットに入れておくと便利だった)
常連さんには当たり前すぎるかもしれませんがww
事前にあまり調べずに行ったので1-3らへんでかなり惑わされましたw
使用金額は10000円前後
16サークルほどで買って来ましたw
数回読んでいますが、最後のあとがきの日付が2010.12になってたり(もちろん新刊)、
自宅で製本したらしきもので、同じページが2回続いてたりw
それも同人誌らしい面白いところなんですけどねw
次はC82で夏なのですが、さすがに夏場に朝早くから並んでいると死んでしまいそうなので(体型的に)朝から並ぶというのはしないと思います
ではノシ

ノベルゲームのエンジン作るお

どうも、hide92795です
およそ1ヶ月ぶりの更新となりますww
Twit Time for Android Proの制作は85%くらい終了となっていますw
今回は学校の友だちと一緒にギャルゲーを作ることになったのでそれについて
まぁ、自分の担当はタイトルからしてプログラム担当なんですがねw
方針としては、誰でもこれでゲームを作れるような感じにつくろうと思います
つまり、プログラム自体にはデータは入れず、別のソフトを使って音やらシナリオやらを作っていくという感じですwww
完成したら、適当に公開するつもりですw(ちゃんと完成出来るのかはわからないけどw)
今完成しているのは、「起動→ロゴ表示」だけですw
相当大変そうですが頑張って行きましょー

↑今はこんな感じ
テスト用のロゴをこれにしたらなんか懐かしくなってきた(´・ω・`)
ではノシ

[Android] オリジナルのPreferenceを作ってみる

どうも、hide92795です
Androidの設定画面はPreferenceを使えば簡単にできるのですが、

・現在の設定値がわかりづらい
・単位をつけて表示させたい(EditTextPreference)

というのが気にくわないのですww
(まぁ、はじめのはサマリーや別のPreferenceに表示すればいいだけですが、説明文が表示できなくなったり縦に伸びるのは自分的に×なんですよねw)
というわけで、オリジナルのPreferenceを作ってしまおうじゃないかというわけなのです(`・ω・´)
参考サイト:
EditTextPreferenceの拡張2 – HaseLab

http://www.haselab.com/androidpj/?p=370

XML でカスタムView – Android 奔走記
http://weide-dev.blogspot.com/2010/04/xml-customview.html


①PreferenceScreenに表示される方を改造する
original_preference_1

original_preference_2
こんなかんじ
これを改造するのは、これのレイアウトxmlを新しく作って、それを使うように新しく独自のクラスを作成すればおkです
デフォルトのレイアウトxmlは、androidSDKのフォルダの
「\platforms\android-*\data\res\layout\preference_child.xml」
です。
改造するときは、すでにあるViewのIdをいじらないようにしてください
自分が改造したxmlは、追記のほうに書いておきますw(結構長いのでw)


②DialogPreferenceを継承したオリジナルのダイアログを表示するレイアウト&クラスを作成する
・EditTextPreferenceの場合

original_preference_3
こんな感じ

この場合だと、入力するEditTextの横に単位をつける必要があるので、ダイアログ用のレイアウトxmlを作成します。
(とはいっても、EditTextとTextViewを横に並べるだけなんですけどねw)

custom_edittext_preference.xml

EditTextのIDは「text」、TextViewのIDは「unit」になっています

次は、↑のxmlを読み込むようにし、さらに色々と機能を追加させたオリジナルのDialogPreferenceを作ります

CustomEditTextPreference

メソッドの説明

・コンストラクター
xmlで指定された値を各変数に格納します
・onCreateView(ViewGroup parent)
①が生成されるときに呼ばれます
これをオーバーライドして、①で作ったxmlが呼ばれるようにし、設定値を表示させるTextViewを変数に格納します。
layoutInflater.inflate(unitPosition, null)のunitPositionは、コンストラクターで設定されたxmlのリソースIDです。
・onBindView(View view)
①が表示される直前に呼ばれる?
保存されている値を取得し、変数に格納します。
・onCreateDialogView()
ダイアログが生成されるときに呼び出されます。
EditTextは、値を保存する際に使用するので、変数に格納します。
この時に、onBindViewで読み込んだ値を設定します。
他にも、コンストラクターで読み込んだ設定を各部品に割り当てていきます。
・onDialogClosed(boolean positiveResult)
ダイアログが閉じられる時に呼び出されます。
positiveResult = true なら、値を保存します。
・updateInputValue()
①の現在の設定値に表示させる値を更新します。
コンストラクターでxmlで指定された値を~と書きましたが、この部分では

のように書いています。ここで値を指定しています。
見た方はわかると思いますが、普通なら「android:****=”….”」みたいなのだけのはずが、「hide92795:****=”….”」というのが追加されています。
次は、これのやり方です


③xmlに独自の属性を追加する
まず、「\res\values\」フォルダ内に「attrs.xml」を作成します。

attrs.xml

書式としては、declare-styleable name=”名前”で名前に好きな文字を(別のサイトでは、クラス名にとありましたが、クラス名じゃなくても正常に動作しました(;^ω^))
attr format=”種類” name=”名前”で種類に使用できるリソースの種類、名前にxmlで使用する属性の名前を設定します。
この種類のところには、文字列→string 色→color リソース(xmlで指定するやつ)→reference みたいなのを入力します。複数個ある場合は、「|」で区切ってください。
これを作ったあとに、Preferenceのレイアウトxmlのはじめの部分を

のように
xmlns:(:の前につくやつ)=”http://schemas.android.com/apk/res/(パッケージ名)”
を追加します。
これによって、「hide92795:inputType=”number”」みたいなのを追加してもエラーが起こらないようになります。
ここで設定した値を取得するには、さっきの②のCustomEditTextPreference.javaのコンストラクターであった

を使用します。
context.obtainStyledAttributes() の第2引数は、R.styleable.(attrs.xmlのはじめの部分で指定した名前)となります。
R.~なので、クラスが自動生成されるので、eclipseを使っていれば補完機能でわかると思いますww
取得は、TypedArrayクラスにあるget****()メソッドを使用します。
http://developer.android.com/reference/android/content/res/TypedArray.html
引数のint型は、R.styleable.(attrs.xmlのはじめの部分で指定した名前)_(name = “…”で入力した名前) となっています
これもeclipseの補完機能でどれがどれかわかると思いますww


だいぶ長くなりましたねww
久々と言うかここまで長くなったのは初めてかな?w
実は、ListPreferenceも設定値を表示できるように改造したクラスを作ってありますw
ここに書いたものを少しいじればできるようになるので、ここでは省略させて頂きます
コツと言うかヒントと言うか答えと言うか、独自のListPreferenceを作るときに注意する点は
・ListPreferenceを継承させる(単位を追加することはまずないと思うので、ダイアログの部分はそのまま使います)
・↑のおかげで、ダイアログの生成をオーバーライドしなくて済み、自分で値を保存・読み出ししなくておk
・リストで選択されている文字を取得するには、getEntry()
これらをちゃんとソースに反映させれば現在の選択している値がちゃんと表示されるようになるはずです。
一応、これで動いてはいますが、間違っている部分を見つけたら教えて下さいww
ではノシ

続きを読む

Twit Time for Android v1.20公開

どうも、hide92795です
Twit Time for Android v1.20を公開しました
更新点は
①:v1.11までのユーザーデータと履歴データの互換性がなくなった
②:別のアプリのトークンを使っていたのを修正。
③:xAuth認証を廃止、oAuth認証のみへ
④:内部のコードを見直し、メモリ使用量の削減と高速化。
⑤:データ取得中などにキャンセルを行えるように変更
⑥:横向きのレイアウトへ対応
とたくさんありますww
ここで気をつけて欲しいのが、①と②です
①は、データの互換性がなくなったことにより、保存されていたユーザーデータと履歴データが使えなくなります。(アップデート後の起動で自動で削除されます)
再度認証を行えば問題はないので、再認証をお願いします(m´・ω・`)m
②は、v1.11までに認証したせいでどうこうなるというわけではありませんが、気になる方はTwitterの「アプリ連携」から「名称未設定」ってやつの許可を取り消してください。
↓これ
notitle
ダウンロードはこちらから
https://market.android.com/details?id=hide92795.Twit_Time_Android
Pro版はもしかしたら年明けになってしまうかもしれません・・・(年末が忙しいのでw)
(まぁ、早めに作るように努力しますがw)
ではノシ