ネットゲーム

セカンドライフのスカイボックスに太陽の光を!

投稿日: 更新日:


スカイボックスをご存知でしょうか。

セカンドライフでは地面の上に家をたてる場合と、
4000mまでの上空の間に家を浮かばせるスカイボックスがあります。

スカイボックスの最大のメリットとしては、
周りの情景に気にせず好きなものを建てられるということです。

通常、地面の上に建てる場合、お隣さんの家に気を使ったりして大きな建物を建てられなかったり、
あるいは雪の土地の上であれば、冬っぽい家を建てないと気分がでないなど
様々な制約があるのですが、スカイボックスは、自分で地面から作成して、
周りの風景まで画像を張ったりすることで楽しむこともできます。
中から外へのボックスが透過にし、解放感も味わうこともできます。

しかし1つ問題があります。
それは太陽の光をあびれないということ……。

スカイボックスは、プライバシーのために箱で包むことがよくあるのですが、
解放感を出すため内部から外へは透明にすることがよくあります。
一見、外の空が見えるので、解放感はあるのですが、なぜだか内部が暗くなってしまいます。
それは、影のせいです。

例えばですが、次のように立方体を設置すると影がでます。
secshadow1

ここで、影側のほうから壁を透明にした場合でも、やはり影ができてしまうのです。
secshadow2
スカイボックス内で内部から外を透過して解放感を出しても、
外からの光は残念ながら中に入らないのです。

 

 

実はテクニックがありまして・・・

 

 

テテーン!
secshadow3

さて、どのようにして影を出さないようにしたのでしょうか。

実は、外側のテクスチャを微妙に透過させることで、
影を出さないようにしたのです。
調査した結果、12%の透過度にすると影がでなくなるようです。

少しは透けてしまうようになるのですが、
大体中は見えないですし、二重にすることでより見づらくすることもできます。

こんな感じに
secshadow4

以上、スカイボックスの中に太陽の光を!でした。

広告

セカンドライフの土地維持費

投稿日: 更新日:


セカンドライフをやっていると、自分の土地が欲しくなってくると思います。土地があると、自分の場所でのんびり制作できたり、人を呼んで話したり色々なことができるわけです。

土地を手に入れるためには2つ方法があります
・土地をレンタルする
・土地を購入する

このうち「土地を購入する」では、まず有料のプレミアム会員になることが必須となります。

プレミアム会員になるためには、月払い、3か月払い、1年払いのどれかでお金を払う必要があります。会員になると、512平方メートルの土地利用権利(土地 Tier)と、毎週リンデンドルでお小遣いがもらえます。512平方メートルはあくまで土地利用権利なので、最初に土地を購入する必要はあります。ただ、リンデンホームというシステムでリンデンが用意した家付きの土地を無料で手に入れることもできます。

512平方メートルでは飽き足らない場合は、土地維持費をより払うことで、より多くの土地 Tier を持つことが可能となります。

下記の表は、土地の使用許可を増やした場合で、1か月あたりにかかる料金と、その使用可能な土地の対応表となります。
t2_S
512平方メートル利用権利はプレミアム会員のため、最初から持っていることに注意してください。また、700平方メートルという中途半端な土地を持っている場合は切り上げで、1024平方メートルの合計土地使用料を払う必要があります。

下記は月払いと、その土地の利用可能サイズを対数グラフにしたものです。
t3_S
グラフを見ると分かるように、線が直線ではありません。つまり、5ドル追加で払って、1024平方メートル利用するより、8ドル追加で払って、1536平方メートル利用した方が、値段/土地的にはお得となります。もちろんそんな広くなくてもいいという方は5ドル追加でもいいと思います。

初めて買う場合は、「初めて土地を所有する方へのよくある質問集」がおすすめです。

セカンドライフの一人称視点での操作方法

投稿日: 更新日:


いまさらですが、セカンドライフの操作方法についておさらいします。
なぜ今なのかというと、一応操作自体は、GUI上で操作できるので、それほど困っていませんでした。
しかし、お化け屋敷SIMなど没入感を深めるために、一人称視点によくすることが多くなったのですが、
一人称視点では、GUIが使用できずキーボードで操作する必要が出てくるわけです。

というわけで以下、一人称視点のときによく使う操作方法となります。
全ての操作方法は「キーボードショートカットキー完全一覧」をみるといいです。


W or A or S or D

アバターを前後左右に動かす

C

しゃがむ

E

ジャンプ

F

空中飛行

浮いた状態で E or C

上昇、下降

Ctrl + R

歩く/走るの切り替え

Enter

チャット欄を表示

チャット欄で Ctrl + Enter

叫ぶ

チャット欄で Ctrl + W

チャット欄を閉じる(ウィンドウを閉じるコマンド)

M

一人称視点/三人称視点の切り替え

Ctrl + 8 or 9 or 0

視点の倍率の変更

Ctrl + Shift + S

スクリーンショットを撮る
このあとマウスで操作が必要

Ctrl + @

スクリーンショットを名前を付けて保存する

ネトゲver13

投稿日: 更新日:


グラフと、ログインウィンドウにバージョンを表示するようにしました。
ちなみに、このグラフもmmo!が元ネタだったりします^^;
 

また、サーバーとクライアントの安定のために色々しました。
サーバーは、クライアント1人に付き、スレッドを3つ作成します。
1つは、通信の入力用スレッド、2つ目は、通信の出力用スレッド、3つめは総まとめのスレッドです。
そのため、スレッドを意識したプログラミングをしなくてはいけないのですが、
スレッドに関しては、全くの未熟で、当初何度もフリーズしました。
(というかMessageEvent、MessageListenerとか使えばよかったですね。知りませんでした。無知は罪ですよ。)

最初やっちゃったのは、synchronizedをどこもかしくも適当につける。
これ、多分やっちゃいけないんですよね。いや、目的があるならいいのですが、
なんか複数のスレッドがアクセスする可能性があるからと、つけまくりました。
結果、デッドロックが起こりました^^
今は、適当にへらして、また負荷テストしてる途中です。

ver12のときに、複数の人が同時に落ちると、止まるという現象がおきたのですが、
これもsynchronizedが多分原因でした。
それは、「落ちると、終了処理して、自分が存在するクライアントに、自分を消去するように通信する」というもの。
これが原因で、1人が落ちて終了処理しているのに、ここにまた、自分を消去するようにって命令出すもんだから。
はい。あと、keep alive問題というもの。落ちてるのに、JavaのSocketがエラーを発見できずに、
落ちているクライアントに対して、通信をしようとするから、そこでまたストップ。
一応、いろいろやってみたのですが、直ってたらいいですね。

まあとにかく、内面的な機能更新が多いです。
敵とか、レベルとか、チームとか、冒険とか、まだそういうゲーム性なものがないので、やっていてもつまらないですね。
何か、増えれば楽しそうなのですが。サーバーの安定化と常時起動化が先決ですね。

このページでテストできます。

おもいきって、重要そうなとこもsynchronized外したら、同時切断もフリーズせずにうまくいくようになった。カオス。
これでプログラムっていいのだろうか。心配になってくる。

ネットゲームの開発日記

投稿日: 更新日:


実は前々からネットゲームが作りたかったです。

というのも、自分がやっていたネトゲはことごとく潰れるというジンクスがありまして。
ROBROBのMMO!!から始まり、じゃが島の軍団、ボンバーマン、全部遊べなくなってしまいました。
うう。TWは、遊べるから大丈夫だけど。うん。それでも結構亡くなる確立が高い。
そして、じゃが島軍団の一度目の閉鎖で、決心したのです。いつか作ろうと。
でもそのころはHSPしか言語ができなく、さらにまだまだ未熟な初心者でした。
HSPでランチャー兼ダウンローダを作ったり、d3moduleでなんとか形にしようと頑張った時期もありました。
そして2年前にCを去年にJavaを勉強して、ついに今度こそと、2月あたりからチャレンジすることに決めました。
特に、じゃが島には色々な思い出があり、軍団みたいで楽しいのを目指そうと、3DのFPSMMO?みたいなのを目標にすることに決めました。
Javaで3DというとJava3DとJOGLがあります。
Java3DはJavaの別モジュールみたいな感じで別インストールが必要。(jarで配布する方法もあります。)
JOGLはOpenGLです。こっちのほうがやるとしたら楽しそう。Java Web Startで配布できるらしい。
後で知ったのですが、どちらも、Java Web Startで配布できるらしいですね。

JOGLはアプレットでもいけるみたいです。

追記
インストール無しで利用できるJava3Dのアプレットの設置方法は
mebius.tokaichiba.jpさんの「org.jdesktop.applet.util.JNLPAppletLauncher」を使った手法
Java3Dのアプレットを公開する方法」が参考になります。
JOGLのアプレットの設置も同じく「JNLPAppletLauncher」を利用すれば設置できます。

まあそういうのはおいておいて、3Dは自作と決めました。
理由は、3Dの勉強をかねる。まあよくある理由ですね。ようはやる気なんです。
3Dを作るが目的ではなく、3Dを表示が目的なら、上で上げた奴の方がもちろんいいです。
ところで自作3Dといっても、実は2種類あります。
それはGraphicsのdrawPolygonを使うかどうかに関わってきます。
もちろんdrawPolygonを使うほうが、速度が早くそして簡単にできるのですが、
全てJAVA OSに任せてしまうため、頂点カラーやスムーズシェーディング、Zバッファが出来ないのです。
というわけで、画像をピクセルで、必要とあればGraphicsを使用できて、
ピクセルはBufferedImageに直結しているというようなクラス作成から始めました。
次に、描写関係です。
最初は、「2点を結ぶ線分」からはじめました。実はこれが、一番の基本となるのです。
簡単そうに見えて、意外に難しい問題です。ウィンドウの外の部分を描写するのは時間がもったいないわけですし、
実数を使うのも、どうかと。まあ頑張って実装しました。
これが出来れば、あとはすらすらいけました。「2点を結ぶ線分」
→「下の辺2点が水平な三角形」→「上の辺2点が水平な三角形」→「2つ上下をくっつけて任意の形の三角形」

→「任意の形の3角形を、2つくっつけて、任意の形の四角形」

こんな感じdrawPolygonを実装できます。
「2点を結ぶ線分」というのは、始点と終点に、それぞれ色を設定して、
始点から、終点までなめらかに色が変化する、というものも実装して見てください。
まあ話は飛んで、サーバーとクライアントの作成に。
参考にしたページは、mmo!!でおなじみのロブロブさん開発日記MMOの作り方です。
ここで恥ずかしながら、初めてArrayListやHashMapの使い方を勉強しました。
だって今までツール作りしかやってなかったんで。いや、ツール作りでも使う人は使うか^^;
HSPにはこんなのなかったし、初めての概念だったというわけです。
通信の勉強は、TECHSCOREのTCPIPネットワークプログラミングを見て、サンプルから拡張して感じで。
そんなこんなで、ゲームとしてはまだまだですが、動くものが完成しました。

続く。かないかもしれない。

オブジェクト作成。(画像は懐かしいあの看板

マップ作成
オブジェクト配置
ネットワーク

ネトゲ日記-1

投稿日: 更新日:


猫が獲物を狙っていた

 

友達がヘリに閉じ込められた

 

ちょっと休憩

 

とてもいい一日だった

じゃが島風島_memo24

投稿日: 更新日:


顔グラは、モンタージュ式に決定しました。
まあ顔グラはおいておいて、
これから作らなきゃいけないののメモです。
1.データベース
データ管理に使用するやつ。高速で処理しないといけないので、はい。
多分、前作った人工知能のデータベースを改造して使うつもり。
2.アップデーター
ネットゲームはバージョンアップが当たり前なので、これは大事。
しかも、最初にCRC32とかでファイルをチェックするから、不正に改造とかも防止できるし。
これも、一度HSP2で作ったことあるけど、あまりに昔のやつで使い物にならない。
ダウンロードどうしようかな。素直にhspinet使うか、sock系のdllで地道にダウンロードするか、
ってか今hspinet見たら、CRC32とかMD5を調べる命令あるし、知らなかった。
まあこっちのほうは使わないと思うけど。便利だなあ。
FTP系の命令も入ってるんだね。これで自動でページをアップロードすることも出来るわけだ。
3.当たり判定
実はまだ作っていない。一応どういう感じにするかは決めているんだけど。
いけないポイントとか作りたくて、でもそのいけないポイントはある高さだといけるとか、その辺がうん。
クリックゲーとかじゃないので、リアルでクライアント処理です。チート怖いけど速度が大事。
うん。
ちなみに、家のネット環境はケーブルなのですが、送信速度は50k/sです^^
1秒に50kbyte送ることが出来ます^^