kidoOooOoooOOomスマートフォン用の表示で見るkidoOooOoooOOomゲーム開発やってます2015-03-09mongodbで正規表現でcollectionを指定してremovemongodbmongodbで正規表現を指定して特定のcollectionsだけremoveしたいケースがあったので、それのメモ。ゲームデザインドキュメントゲームドキュメントを作成するにあたって重要なガイドラインが示されている章。自分でドキュメントを作成・確認する機会があれば、またこの章を見直しながら作業をしたい。ポイントを挙げると下記のような感じ。Document)は、ゲームで何が起こるかを正確に説明する十分な長さが必要であるデザインは、ワンシート、テンページャー、GDDの順に進める事ワンシートは、ゲーム全体をシンプルに1ページにまとめた概要書であるテンページャーはゲームの「全体を大まかに」カバーした概要書で、ゲームの背景となる要素を説明するドキュメントであるテンページャーはいかにおもしろく読み易いものにするかが重要GDDでは、1にも2にもとにかくゲームプレイを重視するゲームデザインは生き物である。実は、最終的にあなた自身が自分のGDDを読む必要が出てきます。ドキュメントの作成は、チームのメンバーだけでなくあなた自身も助けてくれるのです。「頭の中に」ゲームのアイデアをしまっておこうとすると、把握しておかなければいけないことがあまりに増え、やがてパンクします。なると、どんな素晴らしいアイデアだって簡単に忘れてしまいます。argumentsが存在する。このargumentsを使うと、下記のように可変長引数関数を自作できる。26.5ただし上記の場合、引数に配列を使いたい場合はapplyメソッドを使わなければならず、クライアント側から使うのに面倒なケースがある。そこでお勧めされているのが、明示的に配列を受け取る「固定アリティ」関数と、「可変アリティ」の両方を提供することでクライアントの便宜をはかることができる。argumentsオブジェクトを書き換えないargumentsオブジェクトは配列のように見えるが、常に配列のように振る舞うとは限らない。arugmentsオブジェクトは標準Array型ではないため、例えばarguments.shift()を直接呼び出す事ができない。それでもcallメソッドを用いて配列のsliceメソッドを適用すると、標準Array型のインスタンスにコピーすることができる。argumentsへのリファレンスは変数に保存するiteratorの挙動を期待した関数をargumentsを用いて下記のように実装する。}}しかし、上記のコードは期待した結果を得られない。undefinedこれは、argumentsがit.next()の引数をアクセスしてしまっているからである。ネストした関数からargumentsを参照する場合は、values()メソッド内のローカル変数に結合しておく必要がある。固定レシーバを持つメソッドを抽出するにはbindを使う関数について、そのレシーバを特定のオブジェクトに結合(bind)するバージョンを作成する場合、ES5ではbindメソッドを用いればよい。普通に呼んでしまうとグローバルオブジェクトをレシーバーにしてしまうforEachメソッドに対し、bufferオブジェクトをレシーバにしたい場合は下記のように書く。hoge.forEach(buffer.add.bind(buffer));ただし、bindは新しいadd関数を作成するのであり、buffer.add関数を書き換えるわけではないとのこと。関数をカリー化するには、bindを使う下記のコードは、simpleURLメソッドに対し、paths.mapに無名関数を渡して反復処理させるコードである。"http"と"hoge"の文字列がどの繰り返しでも同じであり、本当に必要なのは3つ目のpath引数だけである。このようなケースの時、bindを用いてカリー化を行うと効率的に書ける。]通常のようにbindの第1引数はレシーバの値を提供する。今回の例ではsimpleURL関数がthisを参照しないため、nullかundefinedを使うのが通例となるとのこと。simpleURLに渡される引数は、simpleURL.bindの引数に新しい関数に対して提供された引数を連結したものになる。このように関数に対して、その引数の部分集合を結合させるテクニックはカリー化と呼ばれる。カリー化を使うと、関数の委任を明示的なラッパー関数を使うよりも決まり文句が少ない簡潔な方法で実装できる。人がゲームを遊べば、そこで「物語」ー「こんなことが起こった後に、あんなことが起こった」という出来事の流れーが生み出される。プレイヤーが作り出す物語は無限である。あるプレイヤーによっての物語は「雑魚敵をひたすら倒してレベルアップした」かもしれないが、別のプレイヤーの物語は「雑魚敵をスルーして低レベルで進んだ」かもしれない。ゲームデザイナーは、起こる可能性があるすべての物語を把握し、どうやったらすべての物語が面白くなるかを考える必要がある。ストーリー上発生するキャラクターの死は、プレイヤーによって意味のあるものにすると印象に残り易い。FF7のエアリスは多くのプレイヤーにとって心に残っていると思われる。ゲームにしっくりくるタイトルをつけるのはもちろん、キャラクターにもしっくりくる名前をつけた方がいい。強そうなキャラクターなのに名前が「ぴよこ」とかだとしっくりこない。アイデアまず印象に残ったフレーズがよいアイデアとは、ばかばかしく聞こえるものだよいアイデアを出すためのヒントとして下記が挙げられている。いつもなら絶対読まないものを読む散歩する。シャワーを浴びるセミナーに出席する出来の悪いゲームをプレイする自分の情熱に従うアイデアというのは完全オリジナルなものはもはやほとんど存在しない。各ゲームのアイデアはそれ以前のタイトルの上に成り立っている。何かを革新的だと思ったら、それはあなたが周囲に注意を払っていない証拠だ。開発者は開発中のゲームを何百回もプレイするため、それがおもしろいかどうかというのは客観的に見る事が難しくなる。そこで、「おもしろい」と思うアイデアから作り始めたものに対し、開発過程で「おもしろくないもの」を見つけたらそれを抹殺すべきという理論が提唱されている。関数、メソッド、コンストラクタの、呼び出しの違いを理解するJSでは、関数・メソッド・コンストラクタは全て関数(function)を用いた3種類の利用パターンとしてとらえる。JSではメソッドは単なる「関数であるオブジェクトプロパティ」にすぎない。this参照されている。JSでは、thisに結合される値は、その呼び出しのレシーバと呼ばれる。thisを使う関数を、メソッドではなく関数として呼び出すのはあまり推奨されない。undefinedに結合されるため、実行時エラーになる。undefinedが出力される。this.username;}console.log(byebye());気をつけるべし。高階関数を快適に使えるようになろう高階関数とは、「ほかの関数を引数として受け取るか、結果として関数を返す関数」とのこと。高階関数に引数として渡す関数はしばしばコールバック関数と呼ばれる。文字列を大文字に変換するという単純な例を、map関数にコールバック関数を渡して実行する例を下記に示す。]高階抽象には多くのメリットがある。実装にトリッキーな部分があれば、それらをまとめて高階関数の実装に局所化(localize)できる。自分が同じパターンを繰り返し書いていると気づいたら高階関数に切り替えることを学べば、よりコードが簡潔になり、生産性が高まる。カスタムレシーバ付きでメソッドを呼び出すにはcallを使う項目18で述べた通り、通常、関数またはメソッドのレシーバは呼び出し側の構文によって決まる。ときにはカスタムレシーバをつけて関数を呼び出す必要が生じる。call()を使えばよい。arg3);上記の記述によって、objをレシーバとしてf関数が呼び出される。callメソッドは高階関数を定義するときにも便利に使える。高階関数で一般的なイディオムのひとつは、オプションの引数によって関数呼び出しのレシーバを提供するものである。下記のコードは、クライアントがコールバック用にレシーバを提供できる高階関数をcallによって定義している。使おうcallメソッドの親戚で、引数を配列として受け取りたい場合はapplyメソッドを使うとよい。thisを第1引数で結合できるのはcallメソッドと同じである。見る興味がある分野なので読書メモを残しておきます。新人さん、いらっしゃいこの章で印象に残ったのは、メンバーの役割についての項目。自分は一応プログラマーであるが、この本で述べられているプログラマーにとって理解が必要な下記項目は覚えておかないといけない(全然足りない)。コンピュータネットワーキングまた、ゲームデザイナーにとって必要なスキルも印象に残った。下記のように、非常に多くの分野に渡って理解すべきである。サウンドデザインテクニカルライティングビジュアルアートそしてもう一つ、ゲームデザイナーが責任を負うべき職務として「開発するゲームが楽しいこと」は激しく同意したい。(3)注目記事スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。