IE8が落ちるCSSに遭遇


IE8特有のバグに遭遇したのでメモ。
bodyタグに背景画像(.png)を指定。
但し、外部スタイルシートに宣言したときのみ。

body {background:url(hogepiyo.png);}


これを宣言しただけでIE8は落ちる。
回避方法は直接スタイルを指定する方法しか、いまんとこわからない。

<body style="background:url(hogepiyo.png);">


レアなバグに遭遇した感じなんですけど
これってデザイナの間ではよく知られた現象なんですかね?

Titanium Mobile でRPG開発進捗65日目

今週は見た目的な変更はなし。
データ構造の見直しは、、ダンジョンまで終わりました。
プリセットキャラの見直しと同時にデータセーブ構造を考えています。
どこにどのような形でデータを保存するかというのは
iPhoneではかなり肝な部分だと思います。


で、今週の進み具合が最悪なのでメモっておきます。


<理由1>
会社で交流会があり何気なくデザイナーの方にアプリを見てもらいました。
メッセージログが縦に流れる所がiPhoneというデバイス
あっているんじゃないかという意見をいただきました。
あと戯言で流したVJモードはBPMの連動ができれば行けますよと
助言をいただきました。


<理由2>
金曜の夕方にいろいろ疲れてしまいました。
すごく心が荒んだので製作意欲が出ません。
土曜日ぼーっと過ごして大分前向きになりました。
仕事が上手くいかないと、趣味も捗らないということです。
社会人製作者はみんな気をつけろ!
そして、休むときはちゃんと休んで、次に繋げるんだ!
俺はそうする。


とりあえず、来週は頑張って肝な部分に触れていく予定です。

Titanium Mobile でRPG開発進捗58日目


もう製作初めて2ヶ月も経ちますね。
さて、今回の進捗

  • 戦闘エフェクトの変更
  • 体力ゲージ追加
  • 画像ファイルの調整
  • データ構造の見直し


戦闘エフェクトについてはドリランドを参考にして
少しでもわかりやすいものになるようにパクりました。
まだ中途半端なんですが、エフェクトははっきりと
伝わるものでないとあまり効果を発揮しません。
ですので、そういった部分は今後手直しします。


体力ゲージについても分かりやすさのため
追加したものになります。
今のところザコ戦闘しかないので効果的ではないです。


エフェクトなどを調整するにあたって
スライドパットで適当に書いた絵を少し差し替えました。
これはやり始めると終わらない危険性をはらんでいるので
今後は当分いじらない予定です。


データ構造の見直しについては
今まで動くもの優先で作ってきたためにベタ書きデータ
だったものを、今後追加変更が楽になるように
調整を行なっているところです。
プリセットキャラ、、ダンジョンのデータをこれから
調整を行なっていきます。

Titanium Mobile でRPG開発進捗51日目


見た目的なところはほとんど進んでいません。
変更点は以下のとおり。

  • どうぐの使用部分
  • 戦闘アニメーション演出の変更
  • NavBar廃止と画像タイトルの設定
  • cloneの実装変更(前回日記参照)


技と道具について、それぞれ固有の属性にプラスして
発揮する効果の属性を別につけようかと思っています。
何を言ってるかというと、例えば

A派の技その1(習得はA属性)は他派の解毒、点穴解除ができる。
効果はA派解毒、B派解毒、C派点穴解除。

みたいなものを想定しています。
道具は元々効果しかないので、効果側のオブジェクトに属性がついてますね。
まぁ中には道具そのものに属性があるものもあってもいいかもしれない。
思いつかないけど。


あと、中国には因果応報っていう考え方が根底にあるので
そういった要素をゲームシステム中に組み込めないかなーと
ぼんやり考えています。


12月あたりにターゲットを決めて進捗のリアル発表をしたいけど
いまんところいい機会がないです。

Titanium Mobile でRPG開発進捗48日目

先日id:dataichxさんにご指摘頂いたcloneについて
ようやく手をつけることが出来ました。


まず、教えて頂いたurlを参考に、よさそうな感じのソースをコピー。
参考
http://blogs.msdn.com/b/ie/archive/2010/10/27/ecmascript-5-part-1-reusable-code.aspx


問題発生。以下の2点。

  • ECMAScript5に対応した環境じゃないと使えないメソッドがあった
  • Object.prototypeにcloneを追加すると怒られる


仕方が無いので、原始的にコピーを行うclone関数を作成することに。
階層や配列の扱いにも対応してみた。
以下がソースです。
※ 2011/11/04 @rlldiさんのアドバイスを元に変更しています。

var clone = function (o) {
	if (typeof o != 'object') return o;
//	if (o.hasOwnProperty('length')) {
//	if(Object.prototype.toString.call(o) === "[object Array]") {
/*
	if (o instanceof Array) {
		var n = [];
	} else {
		var n = {};
	}
*/
	var n = (o instanceof Array)?[]:{};
	for (var p in o) {
		n[p] = clone(o[p]);
	}
	return n;
};


typeofでobject以外の場合は値として戻す。
lengthメソッドがあるか確認して、あれば配列として宣言
なければオブジェクトとして宣言することにした。
こうしないと配列もオブジェクトになってしまって
lengthが取得できなくなるのだ。


これがはたして正しいのかはわからんけれども
正常に動いているので今のところよしとしています。
問題点や、その問題点に関する解決方法があったらご指摘ください。


まぁ、自分が利用する範囲では問題ないので
利用範囲を限定すれば問題ないとは思います。

追記 2011/11/4


[twitter:@rlldi]さんからTwitterでアドバイスを貰いました。
insetanceof演算子しらなかったのでありがたかったです。
そこでこんなソースになりました。

//	if (o.hasOwnProperty('length')) {
	if (o instanceof Array) {


動きました!ばんじゃーい!
でも、instanceof演算子をぐぐったところ次の記事に行き当たりました。


Array かどうかを判定するいくつかの方法について - latest log
http://d.hatena.ne.jp/uupaa/20090116/1232051707


記事は結構古いものなのですが、jQueryのinArrayがどういう実装なのか
というところが速度を含めた形で書いてあります。
遅くなるけど、せっかくなので動作検証してみました。

//	if (o.hasOwnProperty('length')) {
//	if (o instanceof Array) {
	if (Object.prototype.toString.call(o) === "[object Array]") {


動きました!ばんじゃーい!
でも、まぁ文字列操作なんで遅いんでしょうね。
で、判定は結局 if (o instanceof Array) { で行けそうです。
ただ、typeofみたいに型名は取れませんので、型名取ろうかっていう話。


JavaScript メモ by kanegon
http://www2.wbs.ne.jp/~kanegon/doc/jsmemo.txt


2003年の記事でした。
でも気になって実行してみました。

var typename = function (o) {
	if (typeof(o) == "object") {
		if ((""+o.constructor).match(/^\s*function +(\w+)/)) return RegExp.$1;
	}
	return typeof(o);
};


オブジェクト名取れた!ばんじゃーい!
ということで、cloneの中身を少しだけ変えました。

Titanium Mobile でRPG開発進捗44日目


本日は進捗状況を動画でアップしてみました。
10/29にテストバージョン披露する「芋煮会」に参加してきました。
まぁ動画の様子を見てもらうと分かるんですが
まだまだ意見をもらえるような状況ではありません。


ここのところで進んだこととしては
メインエンジンとなるeventLoop.jsの実機動作
requireで問題があった部分を修正するのに10/27(製作41日目)
までかかっておりました。
10/28(製作42日目)に

  • ダメージ計算の実装
  • ダメージエフェクトの実装(味方、
  • 戦闘ターンの実装
  • 戦後処理の実装(ダンジョン進捗への回帰)


などを寝ずの作業で追加しての29日披露となりました。
最後の一日で猛烈に作業が進んだのは、それまでにメインエンジンで
すべての処理をキューに入れて再生するだけのものを
コツコツコーディングしてきていたので
あとは、そいつに自分がイメージした行動、エフェクトを
順番に投げるだけの作業となったためです。


まだ出来てないエンジンもあるのですが
このあとはリソースの作成にも少し時間を
かけていかなければならないところです。

製作進捗とは別の所で


ぼくも、わたしも、Titanium MobileでRPG作ってるよ!
またはこれから作ってみたいよ!って方いますかね?
そう言った方がいたら、是非連絡ください。


RPG部分でも、Titanium Mobileでも、製作メンタルの部分でも
今、失敗例や挫折点、苦労したことなどの共有をしていきたいと
考えているためにこの製作日記を続けています。


先日、@masuidriveさんに取り上げて頂いたお陰で
cloneのことは解決しましたし、苦労したことを共有することは
非常に有益なことだと思うのです。
そういうことを一緒にやっていける人がもしいるならば
少しお話ししたいと思ったので、連絡いただけると嬉しい。


ついったーか、コメントでもいいので、ぜひぜひ。

Titanium Mobile でRPG開発進捗37日目

本日もビジュアル的な進捗はナシ。
ほんとはある。
省略した行動ターゲットの状況を示すカーソル表示をした。
そのカーソル表示のために機能のディープコピーが布石として欲しかった。


が、事態は別の展開をしていくもので
ターゲットとなる画像のimageViewの座標を取ろうとしたところ
現在位置ではなくcreateした時の値が帰ってくる。
animateさせた後、imageViewオブジェクトのメソッドには
値が設定されないようだ。
仕方なくcompleteで停止箇所の値を代入。
appendMarkとremoveMarkというメソッドでカーソル追加が可能になった。


次に入力されたコマンドを実行する部分の製作にとりかかった。
まず行動順を決定する。
素早さ(AGI)を基本に運要素(LUC)も加えるようにした。
Math.randomの桁が大きい方は凄く偏りがあることがわかったので
桁を下げてあまりを求めるみたいなこっ恥ずかしい処理を書く。
そうこうして、ようやく順番はなんとか思い通りに。


あとはコマンドごとに数値計算して出すだけだ!
というところなんだけど、少し大きな機能を作成しなくちゃならない。
今画面にはログが流れる機能があるんだけれど
そいつがこのゲームのメインだ。
ユーザがすることは行動ログを読むこと。
このログが出力されるのと、表示された画像、エフェクトなどを
同期させたいのだ。
今はメッセージログをキューイングして流すだけの構造だけど
画像エフェクトや入力待ち、またゲームのシーンを切り替える機能など
一連の処理をシリアライズしてくれるキューが必要だ。
少し構造を妄想しながら次の土曜日までに何とかしたい。


やっぱりデモできる環境を持ち歩ける
iPhoneアプリってそういうとこがすごいから
目を引けるゲームコアだけは完成させないと
何見せられたかわからんもんになってしまう。
気合で行くしかない。
キアイ!って何だろうなwww