とある日の妄想

- JavaScript -

何気ない日常にふと思いついた世迷言をつづるブログ

 

rss-feedRSSフィード

■携帯版はこちら
http://blog.toaruhi.net/m/

携帯サイトQRコード

ブログ内検索

キーワード

 

※検索エンジンで検索した情報が見当たらない場合にご利用ください。

新着記事

カテゴリ一覧

外部リンク

創作物の規制/単純所持規制に反対する請願署名市民有志

作者について

全25件中11〜20件を表示
2003年03月26日(水)
MacIE 5.16のバグ?
JavaScript
_test="";
alert(/tekito_mojiretu/i.test(_test));

これを実行すると「メモリ不足です」とかいう困ったエラーがでる。空文字列に対してiオプションをつけてtestメソッドを使うとなるようだ。iオプションを外せば問題ない。何故〜

IE5.22やネスケ6以降などでは問題無し。

◆(追記)

http://east.portland.ne.jp/〜sigekazu/css/javascript4.htm

やはりMacIE4/5環境で発生するようだ…。5.22では発生しないところをみると、やっぱりバグなのかな…。


コメント(0) トラックバック(0)
2003年03月22日(土)
Konfabulator&JavaScript変数のスコープ
JavaScript
◆ Konfabulator

なんか面白いね、これ。でも商用ソフトか…。

◆JavaScript変数のスコープ

について、大きな勘違いをしていたようだ…。varで宣言してないものは関数の内部で設定したものでもグローバル変数になるのか。

3/19雑記の場合は、関数の引数はローカル変数だからエラーになるけど、2つめの関数の変数count2はvarを使って宣言してないから、グローバル変数として扱われるためにエラーにならないってことね。

なんて豪快な勘違い…。いままでひっかからなかったのは何故-_-;


コメント(0) トラックバック(0)
2003年03月19日(水)
うーん?
JavaScript
setIntervalを使った再帰…

//エラーになるやりかた
function Counter(count)
{
if (!count)
{
 count=1;
 t=setInterval("Counter(count)",1000);
}
count++;
}

//エラーにならないやりかた
function Counter(count)
{
if (!count)
{
 count=1;
 count2=count;
 t=setInterval("Counter(count2)",1000);
}
count++;
}

ようするに(再帰でなくても)setIntervalに設定する引数名がそのsetIntervalを記述した関数の引数名と同じだとエラーになるようだ。そういうもんなのかな。

コメント(0) トラックバック(0)
2003年03月10日(月)
デザイン
JavaScript
このサイトはデザイン的には超適当なんだけど、なんかこったこともやってみたいような気がする今日この頃。でもめんどいし、センスなさげだ(致命傷)

◆ JavaScriptおもちゃ

二次関数の実験てなもんを作ってみた。

どーも数学というのはにがてなので実際に動かしてみればわかるんじゃないかと。まぁそれっぽい動きは演出できてるかな。

コメント(0) トラックバック(0)
2003年03月08日(土)
雑記CGIてなおし
JavaScript
なんかデータ壊れるバグがあったらしい(壊れてた)。BBSのと同じ形式にした。デザインの変更とかはかなり簡単にできるようになったが、デザインを考えるのはめんどいのでとうぶんこのままで。

◆ JavaScriptの、ブラウザ間の微妙な動作の違いメモ

あたらしくわかったことなど。

(1)RGB値(document.getElementById(elementID).style.colorの値)

Mac版IE5.22    16進数形式
Mac版NS7      rgb(r,g,b)
Mac版Mozilla1.2.1 rgb(r, g, b)

NS7とMozillaは同じrgb形式だが、Mozillaはコンマの後にスペースが入る。16進数はsubstringなどで切り出してparseInt関数で10進数に変換できる。

(2)正規表現

上記のRGB値を判定しようとして

/rbg((.*?),(.*?),(.*?))/i

みたいな正規表現を使おうとするとNS7とMozilla1.2.1では期待どうりに動くけど、IE5.22(ともにMac版)ではエラーになる。

/rgb((.*)?,(.*)?,(.*)?)/i

とすると上記の3つのブラウザで動作した(ただしIEで記憶装置に正しい値をとりだせたかどうかは未確認)。どっちが正しいのかな?

(3)単位

Mac版のブラウザではなぜか、

_l="100%";
document.getElementById(elemID).style.left=_l+"px";

のような妙な値の設定が思ったように動作していた。つまり、単位が%の変数にさらにpxをつけても動作していた。WinIE(多分6)ではエラーになった。また、leftなどの値を得たときWinIEは単位つきで結果が得られるようだ。

(4)フォーカス

WinIE(6?)では、visibleでないフォームにフォーカスを当てようとするとエラーになる。MacIE5.22ではエラーにはならない。フォーカスは表示されているフォームの部品くらいにしておいた方が無難なようだ。

(5)document.URL

WinIE(多分6)はオフラインの時とオンラインのファイルの時で値の結果が違うみたいだ。オンライン上のファイルを見る時はクエリ文字列(?以降の文字列)を含めたURLが得られるが、オフラインの時は、クエリ文字列を除いたURLになっている。

セキュリティの問題かな〜?どうりでWinローカルでEVIL EARTHが動かなかったわけだ。どうもlocationオブジェクトのsearchプロパティ(?)がクエリ文字列のようなので、そっちの方を調べ中。escapeしないと#が含まれた場合おかしくなるのだが、escapeすると文字列がぶっ壊れる。なぜ。

(追記)
http://weapon.milkcafe.to/text/other/lecture004.html
どうやらやっぱりdocument.URLの働きがWinIEとMacIEで違うみたいだ…。とりあえずdocument.URLをlocation.hrefに置き換えることで解決(多分)。

◆ 画像変換

うちのMacでGIFをPNGに変換すると壊れることしばしば。なぜだろう…。プレビューの変換は透過色をそのまま透過できてないし。困ったもんだ。

コメント(0) トラックバック(0)
2003年02月26日(水)
parseIntか…
JavaScript
なるほどね〜こんな便利な関数があったんだ。

x=parseInt(document.getElementById("element").style.left);

みたいな感じでつかえば、IEでもほかのブラウザでも、整数で結果をえることができる。とりあえずこれを使って、「ギガトンパンチ!」のスクリプトも標準化してみた(すでにアップずみ)。

とはいっても、Mozilla系にはonkeydown/onkeyupイベントの実装にバグがあるらしく、イベントをくみこんでも作動させることができないので、動作可能ブラウザはあいかわらずIEのみになってしまった…。

いちおうNavigator0.6(Chimera?)でも動くんだけど、スクリプトの実行速度が遅いのか、めちゃくちゃコマ落ちするので、実用範囲外だ。Safariは、アローキーのキーコードが得られないし…(0がかえってくる)。

「ギガトンパンチ!」みたいな重いスクリプトを走らせるとよくわかるけど、画面内にフォームがあると、動作が一気ににぶくなる。素早くスクリプトを動かすには、フォーム部品を使わないことが重要っぽい。前回かいた、フォーカスをあててイベントをドキュメントに向けたい時は、アンカータグを使った方がよさそうだ。

ところで、SafariやNavigatorは新規ウィンドウがリサイズできてしまうので、ウィンドウを開く時にresizable=noを指定してみたんだけど、リサイズアイコンが消えただけで、ウィンドウのかどをドラッグすればリサイズできてしまう現象が発生。また、Safariは(ドキュメントの内容によるっぽいが)、指定した大きさでウィンドウが開けない。うーむ…。

コメント(0) トラックバック(0)
2003年02月24日(月)
久々の更新…
JavaScript
といっても新作があるわけでもなく。なかなか新作はできないねぇ…。システムはできてても本体(シナリオとか、BGMとか)がさっぱり開発すすまない今日この頃。

とりあえずいまあるJSゲーのスクリプトをNS6以降やその他のブラウザでも動くように書き直してみた(NS6以降といってもテストブラウザはOSX版のNS7だけだったり…)。デバッグにはNS6のJavaScriptコンソールを初めて利用。分かりにくいといえば分かりにくいけど、慣れればなんとかなりそうな気配。

標準化といっても、基本的にはdocument.all[]をdocument.getElementById()に置き換える作業。とうぜんNS4とかには関係のない話なんだよな〜。でも、これだけでかなりいろんなブラウザで動くようになった。

以下、気付いたことメモ。

Safari pbはCookieのpathを省略すると、自動的に文書のURLにpathが設定されるみたいだ。そのため、Cookieを書き込む汎用スクリプトをpath属性を指定するように書き換える。「月光の刻」のように複数のページでCookieを使うと、別のパスとしてつぎつぎと新しいCookieを保存してしまうので、この設定は必須っぽい。

NS6などでは、onkeydownやonkeyupイベントを有効にするために、documentの部品にフォーカスが当たる必要があるようだ。そのためダミーのフォームなどをおいて、focus()、blur()とやってみる(onkeypressイベントには必要ないようだ)。なんかNavigatorではスタイルシートで見えないフォームにしてフォーカスをあててるのに、なぜかテキストカーソルが点滅したり、おかしな動きがあった。

また、document.getElementById(id).style.leftやstyle.topの値に文字列pxが含まれているので、そのまま取り出して計算に使ったりはできない。pxを消してから数値に変換する必要がある(コレまえにもやったような…)。この処理を「ギガトンパンチ!」のメイン部分で正規表現によっておこなうようにしたら、もともと思い動作がさらに重くなり、実用性が無くなったり。やむをえず「ギガトンパンチ!」だけはいまだIE5以降専用…。

MIDIBGMの表現に、IE以外のブラウザはobjectタグを使うようにしてみた。NS7、Navigator0.6、Safari pbなどではobjectタグが使えた(IEは使えないようだが…)。結構このタグ、使い勝手がいい感じですき。

以下のブラウザでテストの結果、だいたい動いた。でもゲームによってはうまくいかなかったり、不審な動作をしたりして、微妙な実装の違いがあるっぽい。いまのところ全てMac版でのみテスト。

IE5.22
NS7
Navigator0.6(Chimera)
Safari public beta

OmniWeb、iCabではほとんど動かなかった。新作もできればいくつかのブラウザに対応したいな〜。


未修整項目として、ポップアップウィンドウのプロパティ。これも汎用スクリプトを修正する必要があるかも。scrollbars=noやresizable=noとか。リサイズ禁止はデフォルトがそうなってるのと、そうでないのと別れてる。スクロールバーは、Navigator0.6で「煩悩タイピング」をやると、枠外のレイヤを表示した時に勝手に表示されて、なんか見苦しくなる。ま、そのうち。

コメント(0) トラックバック(0)
2002年11月11日(月)
JScriptでADVを作ろう! 〜一応完成。
JavaScript
GameBookScript-Engineはネットカフェを利用した2回目のWindowsマシンによる修正で主な調整が完了した(ここでのWinIEはIE6SP1のこと)。

BGMはやはりMacIEとWinIEでbgsoundの実装に差があるようだ。Netscape互換にするためにはobjectやembedのほうがよいのだけど、なんか重いのでゲーム特化ということでやはりbgsoundを採用。

主な違いを復習しておくと、MacIEとはloopの数の扱いが1コズレ。また、レイヤーのinnerHTMLにbgsoundタグを書き込んでもWinIEでは再生できなかった。逆に、bgsoundタグにidをつけて要素を直接操作するやり方だとMacIEで再生できない。やむをえず、BGMは完全に振り分けて実行することに。

レイヤー位置がズレる問題は、やはりコンテントフレームの大きさの扱いの違いからきていたみたいだ。WinIEではウィンドウのサイズはタイトルバーやフレーム幅も含み、top、leftはウィンドウの左上端になる。MacIEではウィンドウサイズにタイトルバーやフレーム幅は含まれず、左上はコンテントの左上になる。Winの場合にレイヤーの位置を上から30px、左から10pxずらし、ウィンドウサイズを縦30px、横10px大きくすることでMacIEとほぼ同じ動作を得ることができた(と思う)。

クリックで選択される問題は解決できず。MacIEではダブルクリックイベントがテキスト選択に先行するので、イベントを抜けてしまえば選択状態にはならないが、WinIEでは先にテキスト選択が行われるのでonDblclickを使ったダブルクリックテキスト選択禁止はできない。

そこで暫定対策としてonContextMenuイベントでfalseを返してコンテキストメニューがでないようにして、右クリックでストーリーを進めることもできるようにした。右クリックの場合はダブルクリックしてもテキストが反転選択状態になることはないみたいだ。ただ、右クリックはonmousedownイベントには反応するが、onclickイベントには反応しないらしく、選択肢の選択決定ができない。そのため選択肢は左クリックで選ばないといけないという不便なことになる。うーむ…。

ちなみにonContextMenuでfalseを返してもMacIEでは何事もなくコンテキストメニューが表示されるみたい。

さて、あとはゲーム本体を作るだけだな〜。その前にGameBookScriptのコマンドとかをまとめておく必要があるなぁ。自分も忘れかけてたり…。

コメント(0) トラックバック(0)
2002年11月08日(金)
JScriptでADVを作ろう!(謎) 〜あいかわらず厄介な仕様の違い…。
JavaScript
長いスクリプトを書くと必ず発生する、WinIEとMacIEでの動作の違い。開発中のADVエンジン「GameBookScript-Engine」は必要だと思われる動作を大体もりこみ、Mac版IEで簡単な動作確認を終えるところまでこぎつけた(実際ゲームを作ってないのでまだなんとも言えないが)。

さてWinで動くかな〜とおもいネットカフェに行ってWindows2000/IE6SP1で動かしてみると…でるわでるわエラーの嵐。ひとつづつ検証していってみると…

・11/5に書いたクリック選択対策、WinIEでは全く効果なし(苦笑)。
・あとから設定したイベントに対してにdeleteを使うとエラー。
・bgsoundのloopの指定がMacIEとWinIEで違う解釈をする(Winは1回多くなる)。
・そこでbgsoundタグ自体にidをつけ、getElementByIdで参照すると、Macで動かず。
・open、closeなどを変数に入れるとそのまま関数オブジェクトとして扱われる。
・ウィンドウサイズとコンテント部分のサイズが違うようだ。

特に最後の問題に今困ってるトコ。WinIEのウィンドウサイズは、タイトルバーやフレームの幅も含んでるのかな?MacIEではWindowサイズ=コンテントサイズっぽい。ん〜…。

コメント(0) トラックバック(0)
2002年11月05日(火)
JScriptでADVを作ろう!(謎)〜クリック対策とか。
JavaScript
あてにはならんメモをつらつらと…。さて今日の小品は正規表現実験ツール。便利だけど、別にどこにでもあるとおもわれる。これで実験してからスクリプト組むと数倍ラクになったり。

ADVゲームってクリックでテキストをすすめるコトがなんとなく多くなる。もうすでに読んだテキストや、そんなに重要でもなさそうな気がするテキストを読む時、何気なくボタン連打してしまうクセのある人も多いと思う(ていうか俺)。

だけど、画面を素早くクリックすると、ブラウザはそれをダブルクリックとして、テキストを反転選択状態にする。コレ結構読みづらくなってうっとうしい。

そこで、document.body.onDblclick=MyDblClick;というふうにダブルクリックイベントをとらえる関数を定義する。こうするとダブルクリックが発生した時、テキスト反転が行われる前に、MyDblClick関数が呼び出される。MyDblClick関数は、処理は何もせずただreturnするだけでOKだ。これで素早いクリックでテキストが選択状態になるのは防げる。

しかし、ドラッグによってテキストが選択状態になるのはこの方法では防げない。っカチャカチャと小刻みにクリックを繰り返していると、はずみで選択状態になってしまうこともないとはいえない。

まぁそこまで対策しなくてもいいと思うけど、できるだけテキストが選択された状態のままになるのを防止したい。そこで、隠しテキストフォームとonmouseupイベントを使ってみる方法を考えてみた。

マウスを押した状態でテキストをドラッグし、離す。この動作でテキストは反転状態になる。そこで、その最後の動作のmouseupが起こった時に、スタイルシートのvisibility属性をhiddenにしたテキストフォームをselect()で選択する。これで選択反転状態は解除されるので、テキストフォームに移ったフォーカスをbodyに戻してやれば、選択反転してもすぐ元にもどるのでそれほどは気にならないとおもう。

ちなみにADVゲームのようにゲーム領域全体でのマウスダウンあるいはクリックイベントをとらえたい時は、ゲーム領域と同じ大きさにピクセル固定したレイヤ(divタグで作ったもの)を用意する必要がある。bodyへのイベントは空白領域では反応しないからだ。

コメント(0) トラックバック(0)


Dragon Quest 6

龍が如く4

FF13

THIS IS IT

ときめきメモリアル4

鉄拳6