タグ:Java ( 24 ) タグの人気記事

Javaでオープンタイプフォント

というわけで、全く解決方法が見つからない、Javaでオープンタイプフォントを使用する方法。

一応おさらいしておくと、実行環境から、オープンタイプフォントをリストアップすることもできるし、
それで、createFont() することもできる。

でも、drawString("あいうえお")で表示すると、

b0163324_013675.png


となってしまうのだ。
標準のAPIを使用し、何もエラーが出ない。なのにコレ。
もうどうしようもないわ。

これを回避するには、やはりローテクを使うしかない。

多関節キャラのパーツ画像を1枚のテクスチャに敷き詰めるアルゴリズム。
先日、機能向上したが、この技術が使えそうだ。

文字1字ずつを1つのパーツとみなし、横に結合・展開してみたのが、これ。

b0163324_0155027.png


重ならずに、文字列として表示する分には、完璧だ。
あとは、横に伸びている「い」を何とかするだけ。

…と、思いがちだが、そんなに簡単ではない。
たとえば、今のままで、「ショートケーキ」を表示すると、どうなるか。

b0163324_0175286.png


ベースラインやアセントなどの、Y方向の情報がないんだから、そりゃ、こうなる。
で、ここから、ごにょごにょするとだな。

b0163324_019241.png

b0163324_0194393.png


どうよ、このできばえ!
Javaでオープンタイプフォント(OpenTypeFont)を使えたぜ!
[PR]
by miries | 2016-08-12 00:25 | ゲームを作る

解決方法がまったくわからねぇぞ!⇒OpenType Font

Javaでオープンタイプのフォントが化ける件、まったく分からねぇ!!

オラクルの公式リファレンスにも、サンプルなど全く載ってない。

Java Font でぐぐると、ものすごい解説ページが引っかかるのに、

Java Font OpenType に変えたら、ヒット数激減で、トップに来るのは、
海外の質問掲示板と来たもんだ。
(同じように、使い方に迷っているらしい)

日本語の質問掲示板もあったが、ttf使えば?って回答しかないし!

そもそも、OpenTypeにも対応して、

getAvailableFontFamilyNames();

で、OpenTypeフォントもリストアップされるってのが、SE7のウリなんでしょ、、。
実際リストアップされるし、フォントを作成することもできる。

普通に Font 生成して、drawStringできないとダメじゃん。
自分で細かく設定しないと表示できないとか、んなアホなしようじゃあるまい。

で、一体どんな風になるんだ?ってのを解説する画像を用意してみた。
ネタで一番使用する、「創英角ポップ」 (TrueType) で、drawString("あいうえお")をしてみたのがこちら。

b0163324_236516.png


問題なし。

で、フォントワークスの書体である、「FOT-ロダン Pro DB」 (OpenType)で、同様の描画をすると。

b0163324_2381883.png


どないなっとんねん!

文字が中央に集まってる上に、「い」だけが横に2倍のサイズになっている。
中央に集まるだけなら、なんとか解決する手段もあるだろうが、
ランダムに、横に伸びたりされると、もうどうしようもない。

これは、Javaがアホなのか、フォントデータに仕様ミスがあるのか。

そんなことより、解決方法はあるのか。
[PR]
by miries | 2016-08-06 23:12 | ゲームを作る

久しぶりに、根本的なバグに出会う。

しかも、Java。

ゲーム作成に必要なツール類は、改良を重ねてきたJava製ツール1つでまかなっている。
プラグイン方式なので、何でも詰め込める。

エクセル解析から、画像自動生成まで、何でもこなせるようになっているのだが。

フォント系の画像を作っていたら、今まで見たこともない現象が。

普通に、文字列を描画しているだけなのだが、文字がすべて一箇所に集まってしまう。

あいうえお

という文字列を表示しても、全部の文字が中央で重なってしまうのだ。
一文字だけ表示する分には、何も問題ないのだが。

試しに、textWidthを取得してみたら、0。
そりゃ重なるわな…。

なぜそんなことになるのか?
どうやら、答えは、フォント形式らしい。

オープンタイプのフォントを指定すると、ボロボロになるが、
トゥルータイプだと、全く問題がない。

まさか、オープンタイプに対応していないというのが、今頃発覚するとは。
さて、どうやって対応すればいいのやら。
 
まだ解決方法は見つかってないので、修正できたら、また記事にするわー。
[PR]
by miries | 2016-08-06 02:00 | ゲームを作る

Javaアプレットの衰退2

ゲーム制作に必要不可欠なのが、制作をサポートするツール群。

今でも、過去の資産を使うため、ツールは全部Javaアプリケーションで制作している。
ベースとなっている部分は、2000年に作成していたりする。
最近、大幅にバージョンアップして、さらに使い勝手を向上したところだ。

こういうツールは、大抵が自分用だが、稀に他人が必要としたりすることがあるが、
今回もそのパターンで、別のPCに環境をセットアップすることになった。

放置気味のPCなので、IEしか入っておらず、Chromeをインストールすることから開始。
そのChromeで今度は、JREをインストールしようとしたのだが…。
公式サイトでダウンロードしようとしたら、以下の警告が!

「Chromeを検出しました。Chromeは、2015年5月より、Pluginが標準で無効化になりました。」

いやいや、今Javaをダウンロードするヤツが、ブラウザで使おうとか思わんて。
そもそも、その前から、使えんようにしたのは、お前らやん、、、。

こういう点が、イチイチむかつくんだよなぁ。
[PR]
by miries | 2015-05-27 01:02 | デジタル系

Javaアプレットの衰退

2013年に、「将来アプリをブロックする」という警告に対して、
アプレットオワタ…というブログ記事を書いたんですが。

トラックバックをつけてくれた方が居たんですよ。

これからの正男界はどうなるか、どうするべきか
http://mugi.hp2.jp/masao/uncategorized2/2757


私と同じように、カスタムできるゲームを公開されている方です。
2013年当時、やはり別の言語への移植を考えられていますが、
設計方針などをみると、私と同じような考えの方だと推測します。
(過去の資産を切り捨てず、重視するタイプ)

私の方は、もうJava(アプレット)にうんざりして、研究やめちゃいましたが、
HTML5のCanvasの方では、60fps出せるプログラムも作ってるので、
カスタムカードくらいなら、単純な移植で、1ヶ月もあれば、できる…はずなんですよね。
今は仕事が超デスマーチなんで無理なんですが。

スマホ版は作ってないけど、インターネットから素材を拾ってくる方式で、
作れないこともないので、ちょっとだけ仕様を考えた程度。
google playに蹴られたら、野良apkを配布する形になってしまいますが、
それって結局、Java Appletの警告&ブロックと同じ問題になってしまうので、
最低限 GooglePlayに載せたいんですが。

Javaのプログラムの移植がめんどーなので、iOSは考えてないんですが、
一度JavaScript&canvasにしてしまえば良いんですけどね。

さすがに、モバイルのブラウザでは、30fps出すのも辛いので、まだまだゲームは無理っぽい。
ああ…だれか、半年ほど自由な時間をくれないだろうか。
[PR]
by miries | 2015-05-07 09:57 | ゲームを作る

Javaアプレットおわた…

しばらく更新してなかったJREだが、update40まで進んでたので、とりあえずアップデート。

ついでにリリースノートを覗いてみたのだが…。

----
【署名なしおよび自己署名付きのアプリケーションでの新しいセキュリティ警告】

「このような署名なしのアプリケーションを実行すると、安全でなくセキュリティ・リスクが生じる可能性があるため、今後のリリースでブロックされます」というメッセージが追加されました。
----

ブロックすんのかよ!
フリーのゲーム1個配布するのにも、クソ高い証明書を買えと?

そもそも署名が必要な現時点で、Custom Cardsみたいに配布前提にしているゲームは作れないんだが。


今でもCustomカードで遊んだり、カスタムされている皆さん、ブロックされて動かなくなったらごめんなさい。
さすがにJava自体に制限されると、こちらではどうしようもないので…orz
[PR]
by miries | 2013-10-15 11:55 | ゲームを作る

JScrollPaneのスクロール

JScrollPane jsp

を定義して、思いっきり縦長のスクロールリストを表示する。
一番下に追加して再描画する際、自動でスクロールリストを最下部に移動したい。

JScrollBarクラスに、setValue()で値をセットするメソッドがあるが、
これではスクロールしないというのは周知の事実:-P

でも、どうしても一番下にスクロールしたい…という場合は、Viewportを設定するそうだ。

jsp.getViewport().scrollRectToVisible(new Rectangle(0, Integer.MAX_VALUE - 1, 1, 1));

これが、汎用で使えるコードである。

…と、ここまでがGoogle先生が教えてくれた内容なのだが、実際に使ってみると、これにも不具合がある。

スクロールリストが既に一番下にある状態で、このViewportを設定する(例えば連続で2回呼ぶ)と、一番上に戻ってしまうのだ!

なんということでしょう。

というわけで、確実に自動で一番下にするには、まず一番上に戻すのがいいだろう。

jsp.getVerticalScrollBar().setValue(0);
jsp.listPane.getViewport().scrollRectToVisible(new Rectangle(0, Integer.MAX_VALUE - 1, 1, 1));

これで今のところはOKだった。
[PR]
by miries | 2013-10-05 00:43 | ゲームを作る

Javaアプレットの警告画面

なんと!
例の警告画面は、Javaが出していたのか…。

http://www.java.com/ja/download/help/appsecuritydialogs.xml


これだよこれ、まさにこのダイアログっす。


しかも Java7 update21 からとか…。
Javaを使用する仕事が一段落したので、最新のUpdateを適用したのだが、それが原因とは。

----
黄色の警告の盾

アプリケーションが署名されていないか、証明書が有効ではないか、あるいはその両方であることを示します。証明書によって指定された識別情報を信頼できません。
----

署名をつけろと…?
しかしだよ、署名をつけたとしよう。

----
信頼できる認証局の証明書で識別されるアプリケーションに対するセキュリティ・プロンプト

----

これでも、実行ボタン押すのに勇気いると思うんだけど…?

さらに。
「カスタムカード」は、アプレット自体を配って、データ部分だけを自作して入れ替えてもらうゲームだ。
このアプレットに署名をしてしまうと…。
オレオレ署名だと、ネット上の至る所で私の書名付きアプレットが公開されることになるし、
正式な署名だと、動作しなくなるだろう。

うーむ、面倒くさいことになったものだ。
[PR]
by miries | 2013-05-15 16:13 | ゲームを作る

カスタムカードのその後。

たまには、Latache Noir のブログなんだし、そっちの話題にも触れよう(笑)

最近、Swingを使用したJavaアプリケーションは、いくつか作っているのだが、
アプレットのほうはさっぱりである。

最新アプレットが入ったマシンのHDDが吹っ飛んだという事故もあるが、
そのうち1つは別HDDで発見された。
(発見されてない方が必要ではあるのだが…)

Javaアプレット単体では、演出が限られてくるので、(加算ブレンディングが使えない)
JOGLを使用したアプレットも作ってはいた。

が、sunの署名が切れた段階で、動作がボロボロになって(このブログにも多少書いてあるが…)
作るのをやめてしまった。
JOGLを使用したアプリは署名を求められ、起動時に確認ダイアログがでてしまう。
こんなの出たら、いまどき誰も遊ばないでしょ。
昔よりはセキュリティ意識高くなってきてるし。

というわけで半透明の演出をあきらめて、ノーマルなJavaでアプレットを作ろうかと思ったのだが…。
Chromeでは、通常のアプレットでもダイアログが出るようになってしまった。

Latache.netで公開している「カスタムカード」は、別に怪しいこと(不正なこと)は何もしていない。
クライアントのデータを読み取るようなことはしていない。
…と言いたいところだが、Javaアプレットは、クライアントのPCで動作するわけだし、
文字表示を見ると、クライアントのフォントデータを使用している。
が、その程度だ。

しかしChromeで表示されるダイアログは以下の通り。

b0163324_14513173.png


こんなの表示されて、遊ぶやつがいるのかと。

というわけで、今はWebGLやHTML5でR&Dやってるけど、イマイチなんだよなー。
Android版のカスタムカードも考えたんだけど、結局カスタムできるという魅力が減るしねぇ…。
[PR]
by miries | 2013-05-13 14:58 | ゲームを作る

回転入力を作ってみた。

ドラッグなどの標準操作と、スマフォ特有のフリック入力やピンチ入力を実装した。

というわけで、次に必要になる回転入力を作ってみた。

画面上にジョグダイアルが表示されて、画面上で指をくるくるとドラッグすると、
ジョグダイヤルも回る。

ジョグダイヤル上でまわす必要はなく、画面上どこでまわしても、
まわす半径が大きくても小さくてもOK、逆回転もできる。

意外に楽にできた。

どこに必要な操作かというと、アイテムの購入数とか、
数字を入力する必要がある部分で使う。

コンシューマーゲーム機だと、左右キー押しっぱなしでリピート入力すればいいんだけどね。

スマフォ系はタッチ間がないので、できるだけ指を動かす、
そして、画面上どこでも入力してもOK、というコンセプトで作成中。

できれば指一本で操作させたいところだけど、
ピンチ操作が非常に便利なんだよなー。
[PR]
by miries | 2012-10-06 00:32 | Android