内部でキャラ移動@HIROBA
今日は座標計算です。
本日のおしながき
1、クライアントクラスの定義
2、各クラス、変数の命名統一。
3、クライアント移動ロジック
仕組みとしては、各クライアントで最後に入力されたキーとキャラクターの座標を取ります。
そこから、表示すべき各クライアントの座標を計算します。その後、クライアント側で反映させる仕組み。
ん〜
意味合い的には、わかりやすくなった・・かな
命名は、Coodinate・Posxなどを使っていたところを→Position・PosXなどに統一しました。
特筆すると、Clientクラスが密な関係になってます。
以下はClientクラスの冒頭
class Client{ const F_ID = 'id'; const F_NAME = 'name'; const F_X = 'x'; const F_Y = 'y'; const F_INPUTKEY = 'inputKey'; const F_INPUTTIME = 'inputTime'; const F_LASTUPDATE = 'lastUpdate'; const ENABLE_LIMIT_TIME = 10; protected $id; protected $name; protected $x; protected $y; protected $inputKey; protected $inputTime; protected $lastUpdate; (以下略)
DBのレコードをそのまま格納できるようにしています。フィールド名を知らなくても、Client::定数を使えば参照できる形。
あとキャラクター移動ですね〜
{"id":"3","name":"tests","x":"100","y":-169.62,"inputKey":"40","inputTime":"1251616066.7953","lastUpdate":"1251616169.2618"},
y=マイナス?はい。デフォルト座標0、0から↑キーを押して何分か動かした結果です。もちろん4方向対応。まだ世界の限界という概念はありません。
ちなみに 毎秒1フレーム 1フレーム-2px移動 という遅さ(ぇ
ちなみに、キーを離したり、人にぶつかったりすると"inputKey":"40"→"inputKey":"0"となってキャラクターが止まるしくみ。
あ、それと
MySQLですが、文字化けおこしてたので調べてみました。
結論から言うと、my.cnfが存在しなかった為にサーバーのデフォルト値が適用されてlatin1になっていたところを、UTF8に設定しました。
とりあえず、先にインストールしたパッケージからmy.confのサンプルを取ってきて、/etc/my.cnfとして配置。
cp /var/devel/mysql-5.1.37-linux-i686-glibc23/support-files/my-medium.cnf /etc/my.cnf
で、viで開いて、
以下の行を追加。
default-character-set=utf8 character_set_server=utf8 skip-character-set-client-handshake
skip-character-set-client-handshake は「サーバーの設定をクライアントにも適用する」なんだそうです。