タグ

ブックマーク / nmi.jp (10)

  • 配列のランダマイズ、出来ますか?(後編)

    前回のエントリ、配列のランダマイズ、出来ますか?(前編)の続きです。 前回のエントリの最後では、次のようなコードを提示し、どこが問題なのかの疑問を提起しました。 // 配列の初期化 var a = []; for(var i = 0; i < 1000; i++) { a[i] = i; } function swap(s, d) { var t = a[s]; a[s] = a[d]; a[d] = t; } // ランダマイズ、その2 for(var i = 0; i < a.length; i++) { swap(i, (Math.random() * a.length) | 0); } ランダマイズのコードの厄介なところは、1回2回実行したところで問題がわからない点で、このプログラムもぱっと見た感じではきちんとランダマイズされているように見えます。ではどうやって問題があるかを判断す

  • 配列のランダマイズ、出来ますか?(前編)

    先日、When Random Isn't Random Enough: Lessons from an Online Poker Exploit(英文注意)という記事がタイムラインに流れてきて、同僚と少し配列ランダマイズの話になったので備忘録として書いておきます。 配列のランダマイズというのは、たとえば上の記事にあるようなトランプのシャッフルであるとか、音楽プレイヤーの再生リストのランダム再生とかで実装しますね。ゲームを作るときなどには実装することが多いでしょうが、記事を読む前に、自分だったらどのように実装するか是非少し考えてみてください。 自分が中学生の頃に書いた記憶のあるコードは、たしか次のようなものでした。 // 配列の初期化 var a = []; for(var i = 0; i < 1000; i++) { a[i] = i; } function swap(s, d) { v

  • JavaScriptでアニメーションを書く初歩の初歩

    JavaScriptを使ってアニメーションを書くときに有用なテクニックの、基中の基をご紹介します。おそらく、このブログを見ている人のほとんどにとっては釈迦に説法だと思います。今回、requestAnimationFrameの話すらしません。その点、ご留意ください。 まず、JavaScriptでアニメーションをする場合に気をつけないといけないのが、一度JavaScriptの実行(Context)を抜けないとブラウザに描画が反映されないということです。簡単に言うと、 <html><head><title>bad sample</title><script> onload = function() { var e = document.getElementById("e"); for(var i = 0; i <= 100; i += 5) { e.style.left = e.style.

  • JavaScript イディオム集

    JavaScriptでは、初見の人にはさっぱりわからないけれども、ある程度慣れた人は当たり前に使うイディオムが結構たくさんあります。知ってしまえば何てことはないので、私の知っている限りのイディオムとその意味を解説します。 (7/3追記: twitter等で教えていただいた内容を追加しました) +v (数値化) var v = "123"; console.log(+v + 100) // 223 console.log(v + 100) // 123100 vを数値化する方法では最もメジャーです。parseFloat(v) に比べて高速なのに加えて、parseFloatとは細かい挙動が異なります(例えば空文字列の場合、parseFloatならば NaN になりますが、 +v の場合はゼロになります)。必ず数値になることが保証されており、文字列などで数値化出来ない場合はNaNが返ります。 v

  • Titaniumで1週間でアプリを作ってみた: UI作成

    これから数回の記事で、Titaniumでアプリを作って公開するまでの経緯を公開したいと思います。 作成したアプリはこちらです→http://itunes.apple.com/jp/app/xin-zhe!news2/id548232809?mt=8 私は普段からHTML5ばかり触っていて、最後にiPhoneでアプリを書いたのはもう4年ほど前でした。当時はiOS2に対して Objective-C で直接書いていたのですが、最近はTitaniumやPhoneGap、cocos2dなど多数のフレームワークが登場してきており、それらの勉強をしたいという思いから今回の開発をスタートしました。 自分のMacがなかったので、7月5日にApple Storeで1台購入するところからスタートです。すぐにXcodeとTitanium Mobileを入れて開発環境を作り、サンプルのRSS Readerをビルドし

  • JavaScripterから見たJSX

    私は2001年からJavaScriptを専門にして実装をしており、かなり長い間JavaScriptを使い続けてきました。ExGameをはじめとして、異常なほどにJavaScriptを使い倒したプロジェクトを何個か完遂させています。前の会社「ブロードテイル」がDeNAに買収されたのは、JavaScriptのプロダクトだけでなく、私たちのJavaScriptのスキルを生かしたいという側面も大きくあったと感じています。 そんな私ですが、正直に言うとJSXの開発にはほとんど関わっていません。JSXは基的に一穂さんが主導し、gfxがフォローし、a_bickyがドッグフードをべる(自分たちのプロダクトをまず自分たちで率先して使う)という形で進んできました。私が強くかかわったのは、主に3月の言語仕様を決めるときの議論程度です。なのでJSXについてそこまで詳しい訳ではないのですが、そばで開発を見てきた

  • 連載 : 日経ソフトウェア 5 月号(最終回) 「縦シューティング」ゲーム

    日経ソフトウェア5月号にて、高速化のノウハウを詰め込んだ「縦シューティングゲーム」を作ってみました。 今回は最終回と言うことで、ゲームの王道に帰ってシューティングゲームを作ってみました。iPhone 3GSでもサクサク動くように、可能な限りの高速化のノウハウを詰め込んでいます。実際の詳しい説明は紙面にてご紹介しておりますので、是非ご覧になってください。 ゲームはこちらから試していただけます:http://nmi.jp/game5/shooting/ ソースコード一式はこちらからダウンロードできます:http://nmi.jp/game5/shooting.zip 今回のゲームは、ブラウザからも遊ぶことが出来ます。しかし可能であれば、是非スマートフォン実機にてお試しください。 なお、ゲームの画像素材に関しては、ハムコロ様(http://homepage2.nifty.com/hamcoros

  • JavaScriptでのencoding問題の解決方法

    JavaScriptでは、ほかの言語を扱う時に比べて、エンコーディングでトラブルに巻き込まれることはほとんどありません。ブラウザがサーバのヘッダとHTMLを利用してしっかりと文字コードを認識してくれるので、普通にJavaScriptを作っていれば自動的に適切なエンコーディングに設定されます。しかし、時にはencodingのトラブルが発生するのは避けられません。今回はそんなときのテクニックの紹介です。 一番トラブルで多いのが、HTMLのエンコーディングとJSファイルのエンコーディングが違うために文字化けを起こしてしまうことです。HTMLがSJIS、JSがUTF-8で、JSの中の日語の文字列が化けてしまうというのはありがちです。普通はJSのエンコーディングをHTMLにあわせて万事解決なんですが、事情によりそれが出来ないことが多々あります。たとえば複数のHTMLからそのJSを読んでいて、なぜか

  • HTML5で本格的なゲームを作る!(日経ソフトウェア10月号特集3)

    今日発売の日経ソフトウェア10月号で、「HTML5で格的なゲームを作る」という特集を寄稿しました。 この特集は、HTML5のCanvasを使用して、全画面がぐりぐり動くようなゲームを作ってみようという趣旨です。そのゲームのお題として、かの有名なBio_100%のmetysさんのゲーム「ろりろりろーりんぐ」の使用許諾をいただきました(関係者の皆さん、ありがとうございます!)。 ゲームは、こちらから試していただけます: http://nmi.jp/game5/rolling/ ソースコード一式は、こちらからダウンロードできます: http://nmi.jp/game5/rolling.zip iPhone3GS/iPhone4専用のゲームとなっておりますが、そのスクリーンキャプチャをご紹介しましょう。 ソースコードの詳しい説明を特集でしております。今までのHTMLでは到底実現できない表現を、

  • スマートフォン実機デバッグ: JSConsoleを使ってみる

    と入力してみましょう。 そうするとサーバでIDが自動的に割り振られ、挿入用のスクリプトタグが出てきます(上の画面で反転している部分です)。このスクリプトタグを、スマートフォンで読み込ませるHTMLに組み込んでみましょう。 <!DOCTYPE html> <html><head><title>JSConsole Test</title> <script> window.test = function(arg) { console.log("test message:" + arg); }; </script> </head> <body><div id="hello">hello world</div></body> <script src="http://jsconsole.com/remote.js?9D22144E-AFD1-428B-B505-1D6A4C6F7324"></scri

  • 1