cocos2dで遊ぼう!!

2Dゲーム用フレームワーク

tags:python, module, graphics, game
created:2011-10-01T11:25:12

cocos2dはバッテリーインクルードな2Dゲームフレームワーク。

概要

Python Developers Festa で、cocos2dについてハンズオンすることになりました。 で、セッティングやってみると意外とハマるハマる・・・。 当日スムーズにするためにまずはセットアップについてだけ書くよ!

cocos2d ってなんなの?

pyglet をバックエンドに2D−ゲームを構築できるフレームワークです。 pyglet はctypesベースでOpenGLへのアクセスをラップします。 pyglet だけでもかなりのことができます。 描画一式やメディア、入力デバイスを簡単に取り扱えるようにします。 今1.2devバージョンが懸命にアップデート中! cocos2d はそれに加えゲーム作りの抽象概念をいくつか取り扱えるようにします。

  • シーングラフ
  • ビューポートコントロール(カメラ)
  • レイヤ(描画面)
  • スプライト(キャラクター)
  • アクション(動作シナリオ定義)
  • パーティクルシステム(花火のような演出)
  • コリジョンデテクション(衝突判定)
  • シーントラジション(画面遷移)
  • メニューシステム(タイトルメニューみたいなのが構築しやすい)

プリセットのクラスセットだけでもかなり豊富に取り揃えてあるので、 ちょっとしたスクロールマップ型のゲームなら十数行で雛形が作れちゃいます。

注釈

cocos2dといえばもはやiPhone向けのものが有名ですね。 取り入れられている抽象概念は同じですが、 あちらとは少しコンセプトが違う気がします。 python版は環境ポータビリティ重視で、 iPhone版はシン(薄い)ラッパーを目指しているような。 あと、iPhone版はbox2dという物理シムエンジンも統合されています。 pythonの場合物理シムを使いたい場合はpybox2dなどと組み合わせます。

セットアップ

共通

  • お好みでvirtualenv環境を作る
  • システム環境にインストールする場合以下コマンドラインにsudoなどの権限昇格が必要になります。
easy_install pip

注釈

pipはeasy_installと同様のことができ、 かつアンインストールが簡単というメリットがあります。

WindowsやLinuxの方

64bit環境のひとはpygletのバージョンが現行の1.1.4ではNGです。 1.2.0相当バージョン以降でなければgl周りでエラーになるようです。

というわけでtrunk版引っ張りましょう。

hg clone https://code.google.com/p/pyglet/
cd pyglet
python setup.py install
pip install cocos2d

OS-Xの方

pygletがdarwin-cocoaでの動作のためにpyobjcに依存しているので、 virtualenvが–no-site-packagesだと動きません。

64bit環境のひと(OSX10.6〜)は pygletのバージョンが現行の1.1.4ではNGです。 1.2.0相当バージョン以降でなければgl周りでエラーになるようです。

というわけでtrunk版引っ張りましょう。

hg clone https://code.google.com/p/pyglet/

さらに、Lionの場合はフォーカスアクティベーションポリシーを変更するため pyglet/pyglet/app/cocoa.pyを編集します。

class CocoaEventLoop(PlatformEventLoop):

    def __init__(self):
        super(CocoaEventLoop, self).__init__()
        # Prepare the default application.
        NSApplication.sharedApplication()
        # Create an autorelease pool for menu creation and finishLaunching
        pool = NSAutoreleasePool.alloc().init()
        self._create_application_menu()
        NSApp().setActivationPolicy_(0)  # <- add!!
        NSApp().finishLaunching()
        NSApp().activateIgnoringOtherApps_(True)
        # Then get rid of the pool when we're done.
        del pool

つづき。

cd pyglet
python setup.py install
pip install cocos2d