Silverlightは使えるか夏休みにSilverlightで遊んでみた。Phone向けウェザタイに向けて,って感じ。なんだけど,やろうとすることがことごとくSilverlightではサポートされてなくて思った以上に苦労する。Phoneで動くようにするとなるとSilverlightだよね,ってことで。XAMLからのリソース使用。WPFと同じようにresxに文字列を定義してXAMLからStaticResourceで表示しようとしたが,Silverlightではサポートされていない。そのためProperties.Resourcesをラップしたプロパティを作成してBindingで文字列を表示することに。Blendでデザイン時に表示されないのでXAMLでインスタンス化。Magazineのこの辺を参考にした。次に困ったのが背景のスクロール。画像のタイル表示はSilverlightではサポートされていないので画像をキャンバスに貼り付けて複数配置。次にThicknessAnimationがSilverlightではサポートされていないのでDoubleAnimationで中継。ここまでやってみたけどかなり重い。とりえずAndroid版のタイトル画面をほぼそのまま再現してみた。Silverlightだからもっと凝った画面にできるけどまだいいか。このままでも画面サイズを変更したいという要望はクリアできて,横長にすればある程度長い文字列も打てる,のかな。ちなみにMacでも実行可能だし,moonlightを使えばLinuxでも実行可能。Silverlightソケット通信の質問Silverlightで通信ができないというメールが来た。2になったときに仕様が変わったとのこと。ローカルPCにSilverlightのコンテンツを置いておいてローカルPC上のサーバにアクセスする際にも,クロスドメインポリシーを考慮しなければならなくなったらしい。どこがクロスだよ,って気もするけど。1のアンインストールが必要なのだが,普通にアンインストールしただけではだめで,更新プログラムの一覧からKB949325を直接消さないといけないというのにはまりつつ,インストール完了。微妙にWatermarkedTextBoxが消えてたりするのに困りつつ実験開始。確かに以前と同じコードでSocket通信すると,AccessDeniedになってしまう。いうことでクロスドメインポリシーサーバをたててみる。FlashのSocket通信のときに同じようなことをやってたのでほぼ流用。ポート943で,「<policy-file-request/>」という文字列を受信したら以下のような文字列を送信するサーバをたてればOK。許可ドメインはちゃんと絞り込まないといけないけど。/></grant-to></policy></cross-domain-access></access-policy>結局,Socket通信は以下のような感じになる。ロビーサーバ復旧ロビーサーバ復旧完了。Silverlight。Elementを入れればいいことが分かった。これにVerticalScrollBarVisibility="Auto",ScrollView.ScrollToVerticalOffsetを組み合わせれば一通りのことができる感じ。SilverlightのSocket通信の調査Silverlight版ロビーサーバをローカルではなくWebサーバ上に置いて実験してみた。ロビーサーバに接続しようとするとAccessDeniedが返ってくる。Deniedというページに原因が書いてあった。サーバのドメイン名の逆引きができないとダメらしい。まあIPアドレス指定すれば使えるから実験としてはいいか。Silverlightの正式版ではこの辺りの制限は緩くなるっぽいし,何か作って公開するまでには正式版が出てる,かなあ。第1ロビーサーバが停止している間にロビーサーバの気になっていた箇所を修正している。Unicode正式対応とか英語化とかゲームごとにサーバを分離とか。第1サーバ自体が復旧してももうしばらく第2サーバをメインにしておくかも。SilverlightでロビークライアントSilverlightの実験として,ロビークライアントを作ってみる。2.0からは日本語入力とSocket通信がサポートされたので,なんとなくうまくいった。使用できるポートが4502-4532に制限されているので,そのままではウェザタイのロビーサーバには接続できない。Silverlightでネット対戦ゲームは作れそうってことで。IEの中でロビークライアントが動いている。ホントはぱじさんのFlashクライアントと同時接続して,JavaのサーバにC++/Flash/Silverlightクライアントから同時利用,というわけのわからない画面が欲しかったんだけどとりあえずここまで。Silverlightの開発環境があまりに混沌としているのでメモ。2.0開発,実行が可能(必須ではないが)。