Nobollel開発者ブログ

Nobollelのエンジニアが、UnityやCocos2d-xの旬な情報・技術を紹介します。

CocosCreatorやCocos2d-x(JS)で利用できるCoffeeScript

こんにちは。清水です。今回は、CocosCreatorやCocos2d-x(JS)で利用できるCoffeeScriptを紹介します。

CocosCreator

CocosCreatorは、一般的にJavaScript向けプロジェクトで利用するエディタですが、リリース当初よりデフォルトでCoffeeScriptもサポートされています。ここではCoffeeScriptの詳しい説明は割愛しますが、CocosCreatorでは、自動でCoffeeScriptJavaScriptコンパイルしてくれます。

試しにHelloWorldをCoffeeScriptで書いてみましょう。

CoffeeScript
cc.Class
    extends: cc.Component

    properties:
        label:
            default: null
            type: cc.Label
        text: 'Hello, World!'


    onLoad: () ->
        @label.string = @text

そしてブラウザで実行すると、いつものように実行できます。そのソースコードを確認すると、次のようにJavaScriptに変換されていることがわかります。

JavaScript
"use strict";
cc._RFpush(module, '04afax9CbNGhaoEgGXM/B//', 'HelloWorld');
// Script/HelloWorld.coffee

(function() {
  cc.Class({
    "extends": cc.Component,
    properties: {
      label: {
        "default": null,
        type: cc.Label
      },
      text: 'Hello, World!'
    },
    onLoad: function() {
      return this.label.string = this.text;
    }
  });

}).call(this);

cc._RFpop();

Cocos2d-x

ではCocos2d-x(JS)でもCoffeeScriptを利用してみましょう。しかしCocos2d-x(JS)はデフォルトでCoffeeScriptはサポートされていません。私が今まで利用した中では、Jitterを利用する方法が最も簡潔だと思います。()

コマンド
cocos new CoffeeTest -l js
cd CoffeeTest/src
jitter ./ ./ --bare

app.coffeeファイルを作成し、次のようにソースコードを入力すると、jitterが自動でapp.jsを更新してくれます。これを実行すると、いつものHello World画面が表示されます。

CoffeeScript
HelloWorldLayer = cc.Layer.extend
  sprite: null
  ctor: () ->
    @_super()

    size = cc.winSize
    helloLabel = new cc.LabelTTF("Hello World", "Arial", 38)
    helloLabel.x = size.width / 2
    helloLabel.y = size.height / 2 + 200
    @addChild(helloLabel, 5)

    @sprite = new cc.Sprite(res.HelloWorld_png)
    @sprite.attr
      x: size.width / 2
      y: size.height / 2
    @addChild(@sprite)

    true;

HelloWorldScene = cc.Scene.extend
  onEnter: () ->
    @_super()
    layer = new HelloWorldLayer()
    @addChild(layer)

CocosCreatorやCocos2d-xでCoffeeScriptを扱うことは簡単ですね。JavaScriptよりも記述するコード量が少なくなるので開発効率も上がることでしょう。