世界の端を実装しました。

世界の端に到達すると、眼前に壊せないブロックの壁が立ちはだかります。
ただし、世界の端に到達するには、
休まずに歩き続けて実時間で約68年かかります。
先ずお目にかかることは無いでしょう。
水平方向に比べて、高低差は程々にしました。垂直下方向ならば、比較的簡単に限界まで到達できます。

世界の端を実装しました。
世界の端に到達すると、眼前に壊せないブロックの壁が立ちはだかります。
ただし、世界の端に到達するには、
休まずに歩き続けて実時間で約68年かかります。
先ずお目にかかることは無いでしょう。
水平方向に比べて、高低差は程々にしました。垂直下方向ならば、比較的簡単に限界まで到達できます。
新作アプリ「隣の田所さん」制作第18週目の作業予定です。
120日目:サーバからの地形データ読み込み効率化1
121日目:サーバからの地形データ読み込み効率化2
122日目:世界の端ブロックを作成その1
123日目:世界の端ブロックを作成その2
124日目:世界の端ブロックを設置その1
125日目:世界の端ブロックを設置その2
126日目:予備日(次の週の予定を立てる)
計画した作業は順調に消化しています。先週まででサーバに送信した地形データをクライアントで読み込んで表示するところまで実装しました。
ただし、読み込みが区画(7*7*7)単位で高頻度なhttpアクセスが必要になるため、今週は一度に10区画づつくらいを読み込めるように改良します。
そのあとは世界の”端”を作ろうと思います。
新作アプリ「隣の田所さん」制作第17週目の作業予定です。
113日目:サーバでの地形データ保存その1
114日目:サーバでの地形データ保存その2
115日目:サーバからの地形データ受信その1
116日目:サーバからの地形データ受信その2
117日目:サーバからの地形データ読込その1
118日目:サーバからの地形データ読込その2
119日目:予備日(次の週の予定を立てる)
先週、クライアントからサーバへの地形データ送信作業を行いました。
今週は、サーバに送信した地形データの保存と、その保存データをクライアントから読み取る作業を行う予定です。
作業は順調です。
あと100年以内にはリリース出来そうです。
…| ̄  ̄ |<新しいアプリはまだかね?
/:::| ___| ∧ ∧ ∧ ∧
/::::_|___|_ ( 。_。 ) ( 。_。)
||::::::(・∀・ ) /<▽> /<▽>
| |::/ <ヽ∞/> \ |::::::;;;;::/ |::::::;;;;::/
||::| <ヽ/>.- | |:と),__」 |:と),__」
_..||::| o o …|_ ξ|:::::::::| .|::::::::|
\ \__(久)__/_ \::::::| |:::::::|
.||.i\ 、__ノフ \| |:::::::|
.||ヽ .i\ _ __ ____ __ _.\ |::::::|
.|| ゙ヽ i ハ i ハ i ハ i ハ | し’_つ
.|| ゙|i~^~^~^~^~^~^~|i~
新作アプリ「隣の田所さん」制作第16週目の作業予定です。
106日目:球形範囲での地形データロード/アンロードその1
107日目:球形範囲での地形データロード/アンロードその2
108日目:サーバへの地形データ送信その1
109日目:サーバへの地形データ送信その1
110日目:サーバでの地形データ受信その1
111日目:サーバでの地形データ受信その2
112日目:予備日(次の週の予定を立てる)
先週はクライアント側での地形データロード/アンロード時に60fpsが保てないという問題が発生したため、先ずそれを解決します。
その後、サーバへの地形データ送信作業に進みます。
とうとう100日をこえました。はやくアプリストア にリリースしたい・・・
今週は、クライアント側でのログインID生成/保持と、地形データの動的呼び出し処理を行いました。
保存した地形データをプレーヤーの位置に応じて動的にロード/アンロードする実装に時間がかかり、サーバ側まで手が回りませんでした。
7ブロック四方を”1区画”として、プレーヤーを中心とした5区画×5区画の合計25区画が常に表示されるようにしてみました。
が、これだとロード/アンロードのタイミングで少しfpsが下がってしまうようです。(常時60fpsにしたいのですが一瞬57fpsくらいに下がる)
来週はfpsが下がらないよう、ロード/アンロードの処理を調整したいと思います。
…| ̄  ̄ |<新しいアプリはまだかね?
/:::| ___| ∧ ∧ ∧ ∧
/::::_|___|_ ( 。_。 ) ( 。_。)
||::::::(・∀・ ) /<▽> /<▽>
| |::/ <ヽ∞/> \ |::::::;;;;::/ |::::::;;;;::/
||::| <ヽ/>.- | |:と),__」 |:と),__」
_..||::| o o …|_ ξ|:::::::::| .|::::::::|
\ \__(久)__/_ \::::::| |:::::::|
.||.i\ 、__ノフ \| |:::::::|
.||ヽ .i\ _ __ ____ __ _.\ |::::::|
.|| ゙ヽ i ハ i ハ i ハ i ハ | し’_つ
.|| ゙|i~^~^~^~^~^~^~|i~
minnano.appに新しいアプリが増えました!
多分5年以上ぶりに増えました!
WebGLを利用した、ブラウザ上で超高速に動くConwayのLifegameだよ!
え?Lifegameを知らない?そんな不届き者はこのリンクを見やがってください。
このページから「LL – LIFEGAME LIGHTNING」を選んで見てね。
ブラウザから、いつでもどこでもスマホからでもPCからでもタブレットからでも動きます!
FireFoxやChromeやSafariで動きます。
IE、てめーは駄目だ。
( ゚∀゚)
右下の矢印アイコンからUIを表示して、「SIZE」を最小の1に、「SPEED」を最大の240にして「TOUCH」を”LASER”にするのがオススメです。
さあ、その状態で黒い画面をなぞってみましょう!!
超細かいライフが超高速に動きます!!
よければiOSアプリ版も買ってね。セーブやロードが出来るよ!
今日の作業は「クライアントでのログインID生成」です。
今制作しているアプリは先ずiOSでリリースする予定です。iOSでは「IDFV」を取得します。ブラウザからの場合は「UUID」を生成します。
共に、ハイフンを除いて32バイトとなります。取得/生成方法についてはググれば腐る程出てくるので詳細は省きます。
JSでこの関数相当のものを実装して今日の作業は完了してしまいました。3秒で終わりました。
この記事書く方がよっぽど時間がかかりました。
新作アプリ「隣の田所さん」制作第15週目の作業予定です。
99日目:クライアントでのログインID生成
100日目:クライアントでのログインID保存
101日目:クライアントでの地形データ保存その1
102日目:クライアントでの地形データ保存その2
103日目:サーバへの地形データ送信その1
104日目:サーバへの地形データ送信その2
105日目:予備日(次の週の予定を立てる)
冬のボーナスが42円でした。
アプリ1個売れれば稼げる額でした。
みなさんアプリ買ってください。
今回はクライアントとサーバ間の通信内容を考えました。前回に引き続き、意味不明でしたらごめんなさい。
-ーー ,,_
r'” `ヽ,__
\ ∩/ ̄ ̄ ヽつ
ノ ̄\ /”ヽ/ ” ノ ヽi
| \_)\ .\ > < |\クマー
\ ~ ) \ .\_ ( _●_)\_つ
 ̄ \_つ
やり取りするデータは以下の3つです。
1.土地データ
2.設置アイテムデータ
3.プレーヤーデータ
1.土地データ
入力
・区画位置
出力
・入力及び隣合う区画データ [10,125バイト]
(9+9+9=27区画、1区画375バイトなので 27*375=10,125)
2.設置アイテムデータ
入力
・区画位置
出力
・入力及び隣合う区画のアイテムデータ [6*アイテム*27バイト]
(各区画に10アイテムあるとして、6*10*27=1,620バイト)
3.プレーヤーデータ
入力
・区画位置
・ログインID
出力
・プレーヤー名 [64バイト]
・HP [2バイト]
・プレーヤー位置[1バイト+1バイト+1バイト=3バイト]
・所持アイテム [アイテムID2バイトを各最大数量255で最大64個所持=181バイト]
合計 [250バイト]
以上から、先ずログインすると10,125+1620+250=約12kバイトのデータ通信を行う必要があります。
1000万人のアクティブプレーヤー数で秒間データ平均通信量は、
10,000,000 * 12,000 / (24 * 60 * 60) = 1,388,888 ≒1.4Mバイト
うん、実現可能な範囲ですね。
アクティブプレーヤー数が1000万人という数値以外は。
この2日間はサーバ側データの保存形式を決めていました。
以下、私の開発用メモになってしまっている部分が多々あります。
意味不明でしたらごめんなさい。
-ーー ,,_
r'” `ヽ,__
\ ∩/ ̄ ̄ ヽつ
ノ ̄\ /”ヽ/ ” ノ ヽi
| \_)\ .\ > < |\スマソ
\ ~ ) \ .\_ ( _●_)\_つ
 ̄ \_つ
サーバ側で保存すべき主なデータは3つです。
1.土地データ
2.設置アイテムデータ
3.プレーヤーデータ
それぞれの詳細は以下の通りです。
1.土地データ
1つのブロックを1バイト(0〜255)で持つこととします。
1区画を、7×7×7と定め、この単位で各プレーヤーが”支配”可能です。1区画のデータ量は7×7×7=343バイトに加え、支配者識別IDの32バイトを加えて合計375バイトになります。
区画数は、縦方向(y軸)に10、横方向(x軸とz軸それぞれ)に4294967296(4バイト)あり、論理上の合計区画数は1.844674407370955e20個となります。
DBは読み書きが遅いので、データはバイナリファイルに保存します。区画の位置を元に、ファイル名はN-N-N.landとします。
世界の中心の区画を0-0-0区画として、0-0-0〜9-9-9区画(1000個の区画)のデータを”0-0″ディレクトリに格納します。0-10-0〜9-19-9区画のデータを”0-10″ディレクトリに格納します。10-0-0〜19-9-9区画のデータを”10-0″ディレクトリに格納します。10-10-0〜19-19-9区画のデータを”10-10″ディレクトリに格納します。マイナス10-マイナス10-0〜マイナス1-マイナス1-9区画のデータを”m10-m10″ディレクトリに格納します。
このような形で読み書きしたい区画データファイルをディレクトリで分類し、素早くアクセス可能にします。
尚、区画データ内の支配者IDは横方向(x軸とz軸)で一意に決まります。つまり縦方向(y軸)で支配者IDが変わることはありません。天井/地下方向とも戦うのは辛いですからね。東西南北4方向と戦います。
2.設置アイテムデータ
・アイテムID [2バイト]
・設置位置 [3バイト]
・設置状態[1バイト]
上記6バイト×設置数
区画の位置を元に、ファイル名はN-N-N.itemとします。保存ディレクトリは対象区画データと同じです。
3.プレーヤーデータ
・プレーヤー名 [64バイト]
・HP [2バイト]
・プレーヤー位置[1バイト+1バイト+1バイト=3バイト]
・所持アイテム [アイテムID2バイトを各最大数量255で最大64個所持=181バイト]
合計 [250バイト]
保存ファイル名は”ログインID.ply”です。保存ディレクトリはプレーヤーが存在する区画に基づきます。プレーヤー名が重複した場合は、○○区画の○○などと表示して区別します。
クライアント側にはログインID(GUID的なIDを自動生成)と区画位置、編集した区画データを保持します。
一意なIDでの重複チェックなどが必要ないデータ構造のため、区画毎に別サーバに分割可能で、サーバ数に応じてリニアに計算/通信性能向上可能です。
将来的に不足などが生じたら都度修正します。