内部でキャラ移動@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 は「サーバーの設定をクライアントにも適用する」なんだそうです。