カテゴリ:ゲームを作る( 118 )

せめて自分の担当はしっかりせえよ。

今、コンシューマー機でゲームを作っている(プログラム担当)が。

ワンダースワン開発秘話でも言った気がするんだが、プログラマは全作業の知識がなければならない。
サウンドデータをもらって組み込むには、サウンドの知識がいるし、ポリゴンモデルやアニメーションを表示するには、当然3Dなどの知識がいる。

もちろん、複数のプログラマで作る場合など、一人が全ての知識を持っている必要はないが、プログラマ全体で知識はもってなければならない。

だからこそ、プログラマ以外の人は、自分の専門をしっかりして欲しいのだが…。
今のプロジェクトでは、残念と言わざるを得ない。

パートで言うと、企画とUI、そしてサウンド。
モデル班は全く問題なし。

とにかく中途半端。

企画は、ゲームの仕様を考えきることができず、「分からない」「思いつかない」「数字に弱い」「別の企画が来たから任す」しか言えない。
こっちが仕様について少し突っ込んだ質問をすると言葉に詰まる始末。
(ここには書けないが、ホントにユーザーがプレイを投げ出すような仕様なのよ!見ただけで分かるくらいの!)

UIとサウンドは共に、プログラマに放りっぱなし。
画像データだけくれたので、「これをどういう演出で画面に表示したらいいのか」と聞くと、
「お任せします。」

もらった仕様では、全部表示できないのだが、突っ込むと「考えてなかった」。

BGMだけ音量が異常にでかいので、それを言うと「適当に調整しといて」だし。
適当に調整した結果、効果音とのバランス取ると、BGMは元の音量の0.6倍だぜ?
どんだけ適当に音量設定してんだって話だよ。

ゲーム全体を見通して作れ、とは言わないが(面白いゲームを作るためには必要だがね)、
せめて自分の担当パートには責任を持て。

なんて、今進行してるプロジェクトについて、こんなところで言っててもしょうがないので、ちゃんとミーティングで抗議するさ。
[PR]
by miries | 2013-12-08 23:57 | ゲームを作る

これがダブルバッファの威力か!(違う

HTML5で、適当なサイズ(1000x600くらい)のcanvasに、 Hoge を1200個くらい表示しても、30FPSが保てる。
2000個超えると、数フレーム落ちる。

その程度ではちらつきも全くないので、ダブルバッファの導入を見送る。

画面の演出を考えるため、色々なテストをしてみるが、とにかく激重い。
Javaの方では、drawImage で、同一画像内コピーを多用していたのだが、
同一内コピーのサンプルとして、ラスタースクロールをしたら、8FPSまで落ちた。

やっぱcanvasはダメだわ…。
と思ったのだが、ダブルバッファを試してみる。

canvasを2つ用意し、片方を hidden にして、そのcanvasに描く。
それをもう1つの visible なcanvasにコピーする、という方法なのだが。

1ラインずつ描画しても、これがなんと 30FPSのままなのだ。
試しに同じcanvasに描くと、やっぱり8FPS。

うーむ、ダブルバッファを使えというより、同じcanvasに drawImage するのがNGってことだな。
昔から、コピーエリアが被るってのは、色々問題起こすことだしな。
[PR]
by miries | 2013-10-24 00:33 | ゲームを作る

canvas + javascript

html5でゲームを作り始める。

もっとも、一年ほど前に、テストでADVは作っているので、Javaのゲーム用ライブラリを移植するのが、今回の主な作業である。

JavaScriptとdivだけで作ろうかと思ったが、それだと演出が根こそぎNGになるため、
html5のcanvasを使う。

とりあえずは、ブラウザにあわせて可変サイズにするところまでは、過去に作っているので、
サイズやFPSを表示するなど、まずは環境作り。

FPSを表示すると、ベンチマークをしたくなる。
というわけで、プリミティブな図形では一番コストがかかる、円を表示してみる。

html5で図形を描く場合、塗りつぶしと枠が別で指定できる。
わざと描画領域が大幅に重なるようにして、ランダムな色で描画するようにしてみる。

このPCでは、3200個で、30FPSの処理落ち無し。ただし、塗りつぶし or 枠のみ。
両方を同時に描画すると、10FPSと極端に下がる。

これを、塗りつぶし6400個にしても、20FPS程度にしかならない。
3200個の半径を倍にしても30FPS出る。
枠と塗りをあわせると、なぜココまで落ちるのだろうか。

また、実行中は、しばらくするとPCのファンの音がうるさくなる。
タスクマネージャで見ると、クアッドコアのCPUが全て50%程度。

本当は60FPS目指したいが、まぁそこまでのゲームを作ることはないだろう。
[PR]
by miries | 2013-10-21 02:26 | ゲームを作る

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 | ゲームを作る

久しぶりのJavaSwing

そして、久しぶりの趣味全開のプログラム。

このSwingツールを触るのは一年ぶりくらいか。
昨日ふと思い出したら、改造したくなったのだが、そもそも過去3年くらいに渡っていじっているものだ。
その間に、いくつかリリースはされている。

プラグイン的なクラスを追加することで機能が充実していく…はずだが、まあそう上手くはいかないわな。
それにしても、未だに「なんでこんな変な作りしてんだ!」という点が山ほどあるとは、奥が深い。

というわけで、クラスの取捨選択でさくっとプロジェクトを整理したのち、
今まで放置していた、アプリの多重起動チェックを実装することにした。

Javaアプリケーションで多重起動チェックするメジャーな方法は、

・ServerSocketでポートのロック
・ファイルのロック

この2つがメジャーらしい。
ServerSocket派から見ると、ファイルロックは、プログラムがクラッシュした際に、ロックされ続ける危険があるからダメなんだそうだ。
(最悪、システム再起動で直るけどね)

だが、ServerSocketにしても、1つのポートに割り当てられるアプリは1つというのを利用しているわけで、別のアプリがそのポートを使用していたら、そもそも1つも起動できないことになる。
ロックするポートを決めるのは困難だな。

さて、どうするかな…。
[PR]
by miries | 2013-09-26 02:07 | ゲームを作る

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 | ゲームを作る

Javaアプリで、なぜここまで複雑にする?

今、他人のプログラムの不具合を修正する作業をしているのだが。


これがまたさっぱり分からん。
おおもとの用件が、Javaで作成しつつも、exeファイルとして実行できるように、
というものなので、eclipseで色々やってる後は見える。

アプリ単体をまとめて1つのパックにし、
それをランチャーから起動する方式をとっているようだ。

ランチャー部分はもろeclipseのをそのまま使っている。
が、もらったプロジェクト一式には、その辺の情報が含まれていないので、
(ちょっとまてコラw)
ビルド以前に、そもそもプロジェクトがインポートできねぇ。

それでも、実行ファイル一式があるのでマシ。

まずは、1パックになっている jar を展開。
プログラムである .classファイルのみ全差し替えし、
再度圧縮。

圧縮については、マニフェストファイルがないため、
jarで圧縮するのではなく、7zipで圧縮。

実行ファイル内のパック差し替えで起動を確認。

これでようやく自分でビルドしたものを起動できるとこまで確認できたわけだ。

eclipseとかには、結構便利なプラグインとかあって、
swingの見栄えとかも、良いパーツがあったりするのだが、
機能に頼りっきりで、適当に作るのはやめてくれねぇかなぁ。

コメントも一切ないし。
[PR]
by miries | 2012-06-24 02:31 | ゲームを作る

うを、初めて413エラーがでたぜ。

リクエストエンティティが大きすぎます、か。
これだけじゃサッパリ分からんな。

GETで取得しかしてないんで、想定の転送量を超えた、という解釈でいいのだろうか。

まぁ、すげー数のGETを投げてるからな。
拒否られて当然なのだが、さて、どう解決したものか。
[PR]
by miries | 2012-06-20 03:37 | ゲームを作る