3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

enchant.js と Underscore.jsが出会ってn-way弾をうつ

Last updated at Posted at 2015-01-22

Underscore.jsを触っていて思いました。
each,map,find,shuffle,contains,groupBy・・・・
これで弾幕や当たり判定とか、色々作れるな・・・w

###これはゲームのアルゴリズムと相性が良いはず
そうなんですねー。ゲームでやってることってUnderscore.jsと相性が良いのではと思いますよね、簡単なn-way弾を作ってみました。

まずenchant.js内に、「X,Y,速度,角度」の引数で角度に対して弾が撃てるクラスを作ります。
この原理は「弾幕の初歩(距離系と角度系)」にのせました。
その原理をもとに、enchans.jsのクラスの作り方とブレンドします。

それをもとにUnderscore.jsのメソッドを実行すると・・・

3way
nway.gif

3way
game.rootScene.addEventListener('enterframe', function() {
  //20フレームに1回
  if(this.age % 20 == 0){

    //まず最初に空の配列を作って、wayが増えるたびに配列にプッシュ
    // X,Y,速度,角度
    var bArr = []
    var way_1 = [450,30,3,90];
    bArr.push(way_1);
    var way_2 = [450,30,3,45];
    bArr.push(way_3);
    var way_3 = [450,30,3,135];
    bArr.push(way_3);

    _.each(bArr,function(elm,i){
       var bullet = new Bullet(elm[0],elm[1],elm[2],elm[3]);
    });

  }
});

こうするとwayを増やすのが容易になります。
これがUnderscore流?

5way
5way2.gif

5way

game.rootScene.addEventListener('enterframe', function() {
  //20フレームに1回
  if(this.age % 20 == 0){

    //5way弾幕ならこのように
    //まず最初に空の配列を作って、wayが増えるたびに配列にプッシュ
    // X,Y,速度,角度
    var bArr = []
    var way_1 = [450,30,3,90];
    bArr.push(way_1);
    var way_2 = [450,30,3,125];
    bArr.push(way_2);
    var way_3 = [450,30,3,55];
    bArr.push(way_3);
    var way_4 = [450,30,3,160];
    bArr.push(way_4);
    var way_5 = [450,30,3,20];
    bArr.push(way_5);

    _.each(bArr,function(elm,i){
       var bullet = new Bullet(elm[0],elm[1],elm[2],elm[3]);
    });

  }
});

##ぶっちゃけ
まぁ、大したことはやってません。実際、普通にJavaScriptでも書けます。。
でも、ロジックが複雑化したらどうか?・・・
オブジェクトが簡単に探索できたら?DB連携とかしはじめたら?・・・
ここらへんは未検証です。

当然、懸念点もあります。

##Unity,Cocos2d-JSBではどうする
web系だと通用する方法ですが、これはUnityやCocos2d-JSBといったネイティブ系のJavaScriptコードをコンパイルするような環境では使いにくいですね。

Cocos2d-JSではWebviewを使ってネイティブ実装するという手もあるようですが、実際どうなんでしょう?それができれば、Underscoreとか色々JSで培ってきたものが使えるのですが。

##Webゲーム開発とネイティブゲーム開発を繋げたい・・
どうしても懸念されるのは、ブラウザとネイティブ実装の乖離です。
Webview,TitaniumのようなJS→ネイティブ変換の技術は結構あるようですし、海外ではCocos2d-JSを使ったゲーム開発も多くなっているようですが、まだまだです。
実際enchant.jsで作ったゲームはスマホだともっさりしてたことがありました。あと、広告SDKが無かったり。
あとCocos2d-JSBも試してみたのですが、思わぬところでコンパイルエラーが出てしまいモチベーションが下がりました。そうであれば最初からC++でCocos2d-xの方が早いと思ってしまいます。

##逆に言うと
逆に言えば、これがスムーズになっていけば開発効率がぐっと上がります。JavaScriptでブラウザでテストして、スマホ移植っていう流れが出来ればいろんなクリエイティブが発揮できる人が増えるでしょう。Underscore.jsやjQueryだって使えるようになりますし、websocketとかHTML5とか、Web系技術の出番も増えてきます。

##どうなんでしょう
JS→ネイティブ連携にくわしい方、何か考えがある方はコメントかhp0isme@gmail.comまでお願いします。
Cocos2d-JSでまともにゲームが作れるのか、JSで作ったゲームをネイティブに持っていくのって普通になったのか。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?