SlideShare ist ein Scribd-Unternehmen logo
1 von 12
Downloaden Sie, um offline zu lesen
QuickTiGame2dとは?
✤   TitaniumMobile向けの2Dゲーム開発のためのフレームワーク

✤   札幌に住んでる井口さんという方が開発中




        2011年12月28日          2012年1月8日
スマフォ向けゲーム開発ツール

 開発ツール            開発言語                 特徴

Titanium Mobile                iPhone/Android向けのアプ
                  JavaScript
+QuickTiGame2d                     リがリリース出来る

                               ブラウザ上で稼働するWeb
   enchant.js     JavaScript
                                 アプリケーション


    ngCore        JavaScript      DeNAが開発してる

                               Unity Technologies社が開
     Unity        JavaScript   発しており、GREEがこの会
                                    社と提携してる
QuickTiGame2dの主な機能



jcarbaugh        John Kroll         Daves Portfolio


                   「舞台」のような位置づけ。    「俳優」のような位置づけ。
「監督」のような位置づけで      例えばステージ1は誰でもクリ   画像を表示する機能はもちろん
ゲームの進行管理を担う        アーできる程度の敵を配置する   のこと、画像の変形、移動とい
・弾道と敵が当たった時のアク     だけにしておき、ステージ2は   う処理はもちろんのこと、画像
ションを決定する           少し難易度をあげる・・・とい   同士が重なってるかどうか簡単
・ゲームのスコアー管理をする     うようなゲームにしようとした   に判別出来たりするので、ゲー
・何面まで進んだのか管理する     場合にこの「舞台」を切り替え   ム開発者が面倒な処理を考えて
                   ることで簡単に実現可能      なくても済む
実際の画面ではこのように配置されます




  Window
 オブジェクト
           GameView            Scene   Sprite




              Score

           Titanium.UI.Label
ソースコード解説:初期設定

var win1 = Titanium.UI.createWindow({
    title:'Tab 1',
    backgroundColor:'#fff'
});

var totalScore = 0;

var scoreLabel = Titanium.UI.createLabel({
  top : 10,
  left : 10,
  height : 20,
  width : 'auto',
  color : 'white',
  text : 'Score: ' + totalScore
});
var quicktigame2d = require('com.googlecode.quicktigame2d');
var game = quicktigame2d.createGameView();
var scene = quicktigame2d.createScene();
game.screen = {width:320, height:480};
game.fps = 30;
game.color(0, 0, 0);
game.pushScene(scene);
var tank = quicktigame2d.createSprite({image:'images/tank.png'});
tank.x = (320/2) - (tank.width/2);
tank.y = 480 - tank.height;
var back = quicktigame2d.createSprite({image:'images/back.png'});
back.x = (320/2) - (back.width/2);
back.y = 480 - back.height;
scene.add(back);
scene.add(tank);
簡単そうで意外と難しいキャラクターの画面
配置(1)



画面の横幅の半分を取    画像の横幅の半分だけ
得してその値を画像のX     ずらせばOK
  に指定した場合
簡単そうで意外と難しいキャラクターの画面
配置(2)




画面の縦幅をそ
のまま自機のY
位置に設定する
 とこうなる
           画像の縦幅
           ずらせばOK
ソースコード解説:ゲーム難易度設定

/*
     弾道の数、速度や敵の数、移動スピードといったパラメータを変更することでゲームの難易度が変わりそうだが
     各スプライトに直接値を設定するとマジックナンバーになりそうなので以下オブジェクトを作成
 */
var gameLevel ={
  // MAXALIENS   :敵の表示最大数の設定
     // MAXBULLETS   :弾の最大数
     // ALIENSSPEED :敵の移動スピード設定
     // BULLETSSPEED:弾の移動スピード設定

     easy:{
       MAXALIENS :5,
       MAXBULLETS :15,
       ALIENSSPEED:10,
       BULLETSSPEED:15
     },
     middle:{
       MAXALIENS :10,
       MAXBULLETS :10,
       ALIENSSPEED:15,
       BULLETSSPEED:15
     },
     hard:{
       MAXALIENS :10,
       MAXBULLETS :10,
       ALIENSSPEED:15,
       BULLETSSPEED:10
     }
};
var selectedLevel = 'easy';
ソースコード解説:メイン処理

var aliens = [];
var aliensSpeed = [];
var bullets = [];
var bulletsSpeed = [];
game.addEventListener('onload', function(e) {
  for (var i = 0; i < gameLevel[selectedLevel].MAXALIENS; i++) {                敵機となる画像を
    aliens[i]= quicktigame2d.createSprite({image:'images/alien1.png'});
    aliensSpeed[i] = gameLevel[selectedLevel].ALIENSSPEED;                      MAXALIENESで設定した数
    aliens[i].x = Math.random() * game.screen.width;                            だけ画面に配置。バラバラに
    aliens[i].y = -100;
    scene.add(aliens[i]);                                                       配置したいので乱数を活用し
  }
  for(var j=0;j<gameLevel[selectedLevel].MAXBULLETS;j++){                       てる
    bullets[j]= quicktigame2d.createSprite({image:'images/bullet.png'});
    bullets[j].x = initBulletsPostion();
                                                                                ※弾道も基本的には同じ考え
    bullets[j].y = tank.y - (bullets[j].height);                                です。
    bulletsSpeed[j] = gameLevel[selectedLevel].BULLETSSPEED;
    scene.add(bullets[j]);
  }
  game.start();
});                                                                    「enterframe」内に書かれている処理が
game.addEventListener('enterframe', function(e) {
  bulletCollidesWithAliens();                                          定期的(1/30秒)ごとに呼び出される。
  updateAliensPosition();
  updateBulletPosition();                                              ※この場合には後述する3つのサブ処理が
});
                                                             実施される
game.addEventListener('touchmove',function(e){
  tank.x = e.x;
});
win1.add(game);
win1.add(scoreLabel);
win1.open();
ソースコード解説:サブ処理(弾道と敵機配
置)
/*
     敵の位置の再計算を行い、非表示にしたいものがあったら画面外に配置させることで結果的に非表示にする
  */
function updateAliensPosition(){
   for (var i = 0; i < gameLevel[selectedLevel].MAXALIENS; i++) {
     aliens[i].y += aliensSpeed[i] * Math.random();
     if(aliens[i].y > 480){
       aliens[i].y = -100;
     }
   }
}
/*
   弾の位置の再計算を行い、非表示にしたいものがあったら画面外に配置させることで結果的に非表示にする。
 */
function updateBulletPosition(){
  for (var i = 0; i < gameLevel[selectedLevel].MAXBULLETS; i++) {
    bullets[i].y -= bulletsSpeed[i];
    // 弾が画面外に出た時にはタンクの砲台位置に弾を再設定
         if(bullets[i].x < 0 ||bullets[i].x > 320 || bullets[i].y < 0 || bullets[i].y > 480){
           bullets[i].x = initBulletsPostion();
           bullets[i].y = tank.y - (bullets[i].height);
         }
     }
}
なぜ、敵機や弾道が動いて見えるのか?

              実際の処理はこんな感じ
                   スタート時
      スタート時
      の位置




  1秒後の位置




                   1秒後
ソースコード解説:サブ処理(弾道当たり判
定と弾道初期化)

function bulletCollidesWithAliens(){
  for (var i = 0; i < gameLevel[selectedLevel].MAXBULLETS; i++) {
    for(var j=0;j<gameLevel[selectedLevel].MAXALIENS;j++){
      var flg = bullets[i].collidesWith(aliens[j]);
      if(flg){
        totalScore +=100;
        scoreLabel.text = ('Score:' + totalScore);
        aliens[j].y = -100;

                //弾道をタンクの位置にセットしなおす
                bullets[i].x = initBulletsPostion();
                bullets[i].y = tank.y - (bullets[i].height);
            }
        }
    }
}

function initBulletsPostion(){
  // 弾道は配列で保持しているけれど、幅はすべて同じなので
    // 配列の先頭に格納している弾道の幅を取得した上で
    // 弾道を砲台の箇所に位置するように処理
    return tank.x + (tank.width/2) -(bullets[0].width/2);
}

Weitere ähnliche Inhalte

Was ist angesagt?

PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaPF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaandroid sola
 
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)Takashi Yoshinaga
 
Html canvas shooting_and_performanceup
Html canvas shooting_and_performanceupHtml canvas shooting_and_performanceup
Html canvas shooting_and_performanceupYohei Munesada
 
Acme minechan
Acme minechanAcme minechan
Acme minechantakesako
 
How to make Inn-fighting dice
How to make Inn-fighting diceHow to make Inn-fighting dice
How to make Inn-fighting diceMasujima Ryohei
 
パズルゲーム用ステージの自動生成
パズルゲーム用ステージの自動生成パズルゲーム用ステージの自動生成
パズルゲーム用ステージの自動生成yskcon
 
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介UnityTechnologiesJapan002
 
Canvas de shooting 制作のポイント
Canvas de shooting 制作のポイントCanvas de shooting 制作のポイント
Canvas de shooting 制作のポイントYohei Munesada
 
㉕cocos2dを覚えよう!初級編③
㉕cocos2dを覚えよう!初級編③㉕cocos2dを覚えよう!初級編③
㉕cocos2dを覚えよう!初級編③Nishida Kansuke
 
㉔cocos2dでゲームを作ろう!その2
㉔cocos2dでゲームを作ろう!その2㉔cocos2dでゲームを作ろう!その2
㉔cocos2dでゲームを作ろう!その2Nishida Kansuke
 
【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!
【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!
【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!UnityTechnologiesJapan002
 
Creators'night#14今井
Creators'night#14今井Creators'night#14今井
Creators'night#14今井Daisuke Imai
 
Cocos2d-xハンズオン#1 in 大阪
Cocos2d-xハンズオン#1 in 大阪Cocos2d-xハンズオン#1 in 大阪
Cocos2d-xハンズオン#1 in 大阪Shingo Yamano
 
中高校生対象プログラミング講座Part1
中高校生対象プログラミング講座Part1中高校生対象プログラミング講座Part1
中高校生対象プログラミング講座Part1優希 山本
 
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法LINE Corporation
 
中高校生対象プログラミング講座Part2
中高校生対象プログラミング講座Part2中高校生対象プログラミング講座Part2
中高校生対象プログラミング講座Part2優希 山本
 
WindowsストアーアプリでSharpDXを動かしてみる
WindowsストアーアプリでSharpDXを動かしてみるWindowsストアーアプリでSharpDXを動かしてみる
WindowsストアーアプリでSharpDXを動かしてみるShinichiAoyagi
 

Was ist angesagt? (20)

PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaPF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
 
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)
 
Arctic.js
Arctic.jsArctic.js
Arctic.js
 
Html canvas shooting_and_performanceup
Html canvas shooting_and_performanceupHtml canvas shooting_and_performanceup
Html canvas shooting_and_performanceup
 
Aiwolfseminar2020
Aiwolfseminar2020Aiwolfseminar2020
Aiwolfseminar2020
 
Acme minechan
Acme minechanAcme minechan
Acme minechan
 
How to make Inn-fighting dice
How to make Inn-fighting diceHow to make Inn-fighting dice
How to make Inn-fighting dice
 
パズルゲーム用ステージの自動生成
パズルゲーム用ステージの自動生成パズルゲーム用ステージの自動生成
パズルゲーム用ステージの自動生成
 
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
 
Canvas de shooting 制作のポイント
Canvas de shooting 制作のポイントCanvas de shooting 制作のポイント
Canvas de shooting 制作のポイント
 
㉕cocos2dを覚えよう!初級編③
㉕cocos2dを覚えよう!初級編③㉕cocos2dを覚えよう!初級編③
㉕cocos2dを覚えよう!初級編③
 
㉔cocos2dでゲームを作ろう!その2
㉔cocos2dでゲームを作ろう!その2㉔cocos2dでゲームを作ろう!その2
㉔cocos2dでゲームを作ろう!その2
 
【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!
【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!
【Unite Tokyo 2018】カスタムシェーダーでモバイルでも最先端グラフィックスな格闘ゲームを!
 
Creators'night#14今井
Creators'night#14今井Creators'night#14今井
Creators'night#14今井
 
Gocon2013
Gocon2013Gocon2013
Gocon2013
 
Cocos2d-xハンズオン#1 in 大阪
Cocos2d-xハンズオン#1 in 大阪Cocos2d-xハンズオン#1 in 大阪
Cocos2d-xハンズオン#1 in 大阪
 
中高校生対象プログラミング講座Part1
中高校生対象プログラミング講座Part1中高校生対象プログラミング講座Part1
中高校生対象プログラミング講座Part1
 
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法
 
中高校生対象プログラミング講座Part2
中高校生対象プログラミング講座Part2中高校生対象プログラミング講座Part2
中高校生対象プログラミング講座Part2
 
WindowsストアーアプリでSharpDXを動かしてみる
WindowsストアーアプリでSharpDXを動かしてみるWindowsストアーアプリでSharpDXを動かしてみる
WindowsストアーアプリでSharpDXを動かしてみる
 

Andere mochten auch

Lineage media profile
Lineage media profileLineage media profile
Lineage media profileViren Shah
 
Interakcja na ekrania media
Interakcja na ekrania media Interakcja na ekrania media
Interakcja na ekrania media Karolina Mroczek
 
Ives De Saeger - Creëer veerkracht en wendbaarheid in de huidige turbulente m...
Ives De Saeger - Creëer veerkracht en wendbaarheid in de huidige turbulente m...Ives De Saeger - Creëer veerkracht en wendbaarheid in de huidige turbulente m...
Ives De Saeger - Creëer veerkracht en wendbaarheid in de huidige turbulente m...switchingonthefuture
 
California DECA - What is DECA?
California DECA - What is DECA?California DECA - What is DECA?
California DECA - What is DECA?californiadeca
 
alaydabi
alaydabialaydabi
alaydabiass7ab
 
Firefox osにenchant.jsを食わせてみた
Firefox osにenchant.jsを食わせてみたFirefox osにenchant.jsを食わせてみた
Firefox osにenchant.jsを食わせてみたLuccafort Dx
 
Lakhvi's real place the prison
Lakhvi's real place  the prisonLakhvi's real place  the prison
Lakhvi's real place the prisonRohan Bendre
 
2009 Dijital Pazarlama Stratejisi Ozgur Alaz
2009 Dijital Pazarlama Stratejisi Ozgur Alaz2009 Dijital Pazarlama Stratejisi Ozgur Alaz
2009 Dijital Pazarlama Stratejisi Ozgur AlazOzgur Alaz
 
WGLG bangladesh best school for girls campaign NGCAF_Patnitala May 2014
WGLG bangladesh best school for girls campaign NGCAF_Patnitala May 2014WGLG bangladesh best school for girls campaign NGCAF_Patnitala May 2014
WGLG bangladesh best school for girls campaign NGCAF_Patnitala May 2014Mahmud Hasan
 
RESTEC EVENTS presentation
RESTEC EVENTS presentationRESTEC EVENTS presentation
RESTEC EVENTS presentationRESTEC EVENTS
 
Music Magazine Analysis
Music Magazine AnalysisMusic Magazine Analysis
Music Magazine AnalysisHannahPenton
 
Justmeans power point
Justmeans power pointJustmeans power point
Justmeans power pointjustmeanscsr
 
Nirogi Mata Dr. Shriniwas Kashalikar
Nirogi Mata Dr. Shriniwas KashalikarNirogi Mata Dr. Shriniwas Kashalikar
Nirogi Mata Dr. Shriniwas Kashalikarsiddhayess
 
Presentatie synext
Presentatie synext Presentatie synext
Presentatie synext emmamedia
 
香港六合彩
香港六合彩香港六合彩
香港六合彩weige
 
Student Project: Health
Student Project: HealthStudent Project: Health
Student Project: Healthicti
 
personal branding
personal brandingpersonal branding
personal brandingCelineLu
 
Ordenagailuaren Zatiak
Ordenagailuaren ZatiakOrdenagailuaren Zatiak
Ordenagailuaren Zatiakmarkel94
 

Andere mochten auch (20)

Lineage media profile
Lineage media profileLineage media profile
Lineage media profile
 
Interakcja na ekrania media
Interakcja na ekrania media Interakcja na ekrania media
Interakcja na ekrania media
 
Ives De Saeger - Creëer veerkracht en wendbaarheid in de huidige turbulente m...
Ives De Saeger - Creëer veerkracht en wendbaarheid in de huidige turbulente m...Ives De Saeger - Creëer veerkracht en wendbaarheid in de huidige turbulente m...
Ives De Saeger - Creëer veerkracht en wendbaarheid in de huidige turbulente m...
 
California DECA - What is DECA?
California DECA - What is DECA?California DECA - What is DECA?
California DECA - What is DECA?
 
alaydabi
alaydabialaydabi
alaydabi
 
Firefox osにenchant.jsを食わせてみた
Firefox osにenchant.jsを食わせてみたFirefox osにenchant.jsを食わせてみた
Firefox osにenchant.jsを食わせてみた
 
Lakhvi's real place the prison
Lakhvi's real place  the prisonLakhvi's real place  the prison
Lakhvi's real place the prison
 
45
4545
45
 
2009 Dijital Pazarlama Stratejisi Ozgur Alaz
2009 Dijital Pazarlama Stratejisi Ozgur Alaz2009 Dijital Pazarlama Stratejisi Ozgur Alaz
2009 Dijital Pazarlama Stratejisi Ozgur Alaz
 
WGLG bangladesh best school for girls campaign NGCAF_Patnitala May 2014
WGLG bangladesh best school for girls campaign NGCAF_Patnitala May 2014WGLG bangladesh best school for girls campaign NGCAF_Patnitala May 2014
WGLG bangladesh best school for girls campaign NGCAF_Patnitala May 2014
 
RESTEC EVENTS presentation
RESTEC EVENTS presentationRESTEC EVENTS presentation
RESTEC EVENTS presentation
 
Music Magazine Analysis
Music Magazine AnalysisMusic Magazine Analysis
Music Magazine Analysis
 
Justmeans power point
Justmeans power pointJustmeans power point
Justmeans power point
 
Nirogi Mata Dr. Shriniwas Kashalikar
Nirogi Mata Dr. Shriniwas KashalikarNirogi Mata Dr. Shriniwas Kashalikar
Nirogi Mata Dr. Shriniwas Kashalikar
 
Presentatie synext
Presentatie synext Presentatie synext
Presentatie synext
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
Student Project: Health
Student Project: HealthStudent Project: Health
Student Project: Health
 
personal branding
personal brandingpersonal branding
personal branding
 
Ordenagailuaren Zatiak
Ordenagailuaren ZatiakOrdenagailuaren Zatiak
Ordenagailuaren Zatiak
 
Costruire la comunicazione di un master in social media marketing
Costruire la comunicazione di un master in social media marketingCostruire la comunicazione di un master in social media marketing
Costruire la comunicazione di un master in social media marketing
 

Ähnlich wie 2012 03-03-titanium plusquicktigame2d

C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜勝成 鈴江
 
enchant.js meetup Tokyo vol.2 Tutorial
enchant.js meetup Tokyo vol.2 Tutorialenchant.js meetup Tokyo vol.2 Tutorial
enchant.js meetup Tokyo vol.2 TutorialRyo Shimizu
 
2012 03-24-titanium plusquicktigame2d
2012 03-24-titanium plusquicktigame2d2012 03-24-titanium plusquicktigame2d
2012 03-24-titanium plusquicktigame2dHiroshi Oyamada
 
Genvidセミナー シンプルJava Scriptオーバーレイ編
Genvidセミナー シンプルJava Scriptオーバーレイ編Genvidセミナー シンプルJava Scriptオーバーレイ編
Genvidセミナー シンプルJava Scriptオーバーレイ編Takaaki Ichijo
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLAtsushi Tadokoro
 
Sprite kitでの横スクロールジャンプ アクションゲーム開発
Sprite kitでの横スクロールジャンプ アクションゲーム開発Sprite kitでの横スクロールジャンプ アクションゲーム開発
Sprite kitでの横スクロールジャンプ アクションゲーム開発studioshin
 
Creators'night#12今井
Creators'night#12今井Creators'night#12今井
Creators'night#12今井Daisuke Imai
 
Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Ryo Suzuki
 
Androidプログラミング初心者のためのゲームアプリ開発入門
Androidプログラミング初心者のためのゲームアプリ開発入門Androidプログラミング初心者のためのゲームアプリ開発入門
Androidプログラミング初心者のためのゲームアプリ開発入門Masahiko Mizuta
 
UnityとBlenderハンズオン第2章
UnityとBlenderハンズオン第2章UnityとBlenderハンズオン第2章
UnityとBlenderハンズオン第2章yaju88
 
Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)
Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)
Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)Google Developer Relations Team
 
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作るGoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作るMasahiro Wakame
 
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」Tomoaki Shimizu
 
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (1)
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (1)「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (1)
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (1)gree_tech
 
Ogre3d 基礎
Ogre3d 基礎Ogre3d 基礎
Ogre3d 基礎kw
 
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」Tomoaki Shimizu
 
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくるデジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくるAtsushi Tadokoro
 
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろうPerl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろうkeroyonn
 

Ähnlich wie 2012 03-03-titanium plusquicktigame2d (20)

C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
 
enchant.js meetup Tokyo vol.2 Tutorial
enchant.js meetup Tokyo vol.2 Tutorialenchant.js meetup Tokyo vol.2 Tutorial
enchant.js meetup Tokyo vol.2 Tutorial
 
2012 03-24-titanium plusquicktigame2d
2012 03-24-titanium plusquicktigame2d2012 03-24-titanium plusquicktigame2d
2012 03-24-titanium plusquicktigame2d
 
Genvidセミナー シンプルJava Scriptオーバーレイ編
Genvidセミナー シンプルJava Scriptオーバーレイ編Genvidセミナー シンプルJava Scriptオーバーレイ編
Genvidセミナー シンプルJava Scriptオーバーレイ編
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
 
Sprite kitでの横スクロールジャンプ アクションゲーム開発
Sprite kitでの横スクロールジャンプ アクションゲーム開発Sprite kitでの横スクロールジャンプ アクションゲーム開発
Sprite kitでの横スクロールジャンプ アクションゲーム開発
 
Creators'night#12今井
Creators'night#12今井Creators'night#12今井
Creators'night#12今井
 
Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発
 
Sencha study
Sencha studySencha study
Sencha study
 
Androidプログラミング初心者のためのゲームアプリ開発入門
Androidプログラミング初心者のためのゲームアプリ開発入門Androidプログラミング初心者のためのゲームアプリ開発入門
Androidプログラミング初心者のためのゲームアプリ開発入門
 
UnityとBlenderハンズオン第2章
UnityとBlenderハンズオン第2章UnityとBlenderハンズオン第2章
UnityとBlenderハンズオン第2章
 
Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)
Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)
Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)
 
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作るGoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
 
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
 
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (1)
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (1)「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (1)
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (1)
 
Ogre3d 基礎
Ogre3d 基礎Ogre3d 基礎
Ogre3d 基礎
 
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
 
コルーチンを使おう
コルーチンを使おうコルーチンを使おう
コルーチンを使おう
 
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくるデジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
 
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろうPerl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
Perl Hobby Programming - Games::BeLike::EightBIT ターミナルで8ビット風ゲームをつくろう
 

Mehr von Hiroshi Oyamada

2016 02-25-crawler-study-01
2016 02-25-crawler-study-012016 02-25-crawler-study-01
2016 02-25-crawler-study-01Hiroshi Oyamada
 
育児を支える技術〜クローラーとかスクレイピング
育児を支える技術〜クローラーとかスクレイピング育児を支える技術〜クローラーとかスクレイピング
育児を支える技術〜クローラーとかスクレイピングHiroshi Oyamada
 
日々の面倒をプログラミングで解決!【入門編】
日々の面倒をプログラミングで解決!【入門編】日々の面倒をプログラミングで解決!【入門編】
日々の面倒をプログラミングで解決!【入門編】Hiroshi Oyamada
 
2014 05-17-titanium hamamatsuvol3
2014 05-17-titanium hamamatsuvol32014 05-17-titanium hamamatsuvol3
2014 05-17-titanium hamamatsuvol3Hiroshi Oyamada
 
20140319 titanium meetupvol17
20140319 titanium meetupvol1720140319 titanium meetupvol17
20140319 titanium meetupvol17Hiroshi Oyamada
 
2014 02-19-titanium meetupvol16
2014 02-19-titanium meetupvol162014 02-19-titanium meetupvol16
2014 02-19-titanium meetupvol16Hiroshi Oyamada
 
20130910 titanium meetupvol11
20130910 titanium meetupvol1120130910 titanium meetupvol11
20130910 titanium meetupvol11Hiroshi Oyamada
 
勉強会主催者のための勉強会
勉強会主催者のための勉強会勉強会主催者のための勉強会
勉強会主催者のための勉強会Hiroshi Oyamada
 
20130613 titanium meetupvol9
20130613 titanium meetupvol920130613 titanium meetupvol9
20130613 titanium meetupvol9Hiroshi Oyamada
 
2013 06-11-craft beerfanlt
2013 06-11-craft beerfanlt2013 06-11-craft beerfanlt
2013 06-11-craft beerfanltHiroshi Oyamada
 
2013 06-05-web-career-talk-at-coedo
2013 06-05-web-career-talk-at-coedo2013 06-05-web-career-talk-at-coedo
2013 06-05-web-career-talk-at-coedoHiroshi Oyamada
 
20130412 titanium meetupvol7
20130412 titanium meetupvol720130412 titanium meetupvol7
20130412 titanium meetupvol7Hiroshi Oyamada
 
2013 02-28-bussiness-plan-about-titanium
2013 02-28-bussiness-plan-about-titanium2013 02-28-bussiness-plan-about-titanium
2013 02-28-bussiness-plan-about-titaniumHiroshi Oyamada
 
20130126 titanium新年会
20130126 titanium新年会20130126 titanium新年会
20130126 titanium新年会Hiroshi Oyamada
 
20130125 titanium meetupvol5
20130125 titanium meetupvol520130125 titanium meetupvol5
20130125 titanium meetupvol5Hiroshi Oyamada
 
2012 12-17-titanium meetupvol4
2012 12-17-titanium meetupvol42012 12-17-titanium meetupvol4
2012 12-17-titanium meetupvol4Hiroshi Oyamada
 

Mehr von Hiroshi Oyamada (20)

2016 02-25-crawler-study-01
2016 02-25-crawler-study-012016 02-25-crawler-study-01
2016 02-25-crawler-study-01
 
2016 02-09-co-edo lt
2016 02-09-co-edo lt2016 02-09-co-edo lt
2016 02-09-co-edo lt
 
2015 12-19-ruby rails
2015 12-19-ruby rails2015 12-19-ruby rails
2015 12-19-ruby rails
 
2015 07-04-ruby rails
2015 07-04-ruby rails2015 07-04-ruby rails
2015 07-04-ruby rails
 
育児を支える技術〜クローラーとかスクレイピング
育児を支える技術〜クローラーとかスクレイピング育児を支える技術〜クローラーとかスクレイピング
育児を支える技術〜クローラーとかスクレイピング
 
日々の面倒をプログラミングで解決!【入門編】
日々の面倒をプログラミングで解決!【入門編】日々の面倒をプログラミングで解決!【入門編】
日々の面倒をプログラミングで解決!【入門編】
 
2014 05-17-titanium hamamatsuvol3
2014 05-17-titanium hamamatsuvol32014 05-17-titanium hamamatsuvol3
2014 05-17-titanium hamamatsuvol3
 
20140319 titanium meetupvol17
20140319 titanium meetupvol1720140319 titanium meetupvol17
20140319 titanium meetupvol17
 
2014 02-19-titanium meetupvol16
2014 02-19-titanium meetupvol162014 02-19-titanium meetupvol16
2014 02-19-titanium meetupvol16
 
TitaniumMeetUpVol13
TitaniumMeetUpVol13TitaniumMeetUpVol13
TitaniumMeetUpVol13
 
20130910 titanium meetupvol11
20130910 titanium meetupvol1120130910 titanium meetupvol11
20130910 titanium meetupvol11
 
勉強会主催者のための勉強会
勉強会主催者のための勉強会勉強会主催者のための勉強会
勉強会主催者のための勉強会
 
20130613 titanium meetupvol9
20130613 titanium meetupvol920130613 titanium meetupvol9
20130613 titanium meetupvol9
 
2013 06-11-craft beerfanlt
2013 06-11-craft beerfanlt2013 06-11-craft beerfanlt
2013 06-11-craft beerfanlt
 
2013 06-05-web-career-talk-at-coedo
2013 06-05-web-career-talk-at-coedo2013 06-05-web-career-talk-at-coedo
2013 06-05-web-career-talk-at-coedo
 
20130412 titanium meetupvol7
20130412 titanium meetupvol720130412 titanium meetupvol7
20130412 titanium meetupvol7
 
2013 02-28-bussiness-plan-about-titanium
2013 02-28-bussiness-plan-about-titanium2013 02-28-bussiness-plan-about-titanium
2013 02-28-bussiness-plan-about-titanium
 
20130126 titanium新年会
20130126 titanium新年会20130126 titanium新年会
20130126 titanium新年会
 
20130125 titanium meetupvol5
20130125 titanium meetupvol520130125 titanium meetupvol5
20130125 titanium meetupvol5
 
2012 12-17-titanium meetupvol4
2012 12-17-titanium meetupvol42012 12-17-titanium meetupvol4
2012 12-17-titanium meetupvol4
 

2012 03-03-titanium plusquicktigame2d

  • 1. QuickTiGame2dとは? ✤ TitaniumMobile向けの2Dゲーム開発のためのフレームワーク ✤ 札幌に住んでる井口さんという方が開発中 2011年12月28日 2012年1月8日
  • 2. スマフォ向けゲーム開発ツール 開発ツール 開発言語 特徴 Titanium Mobile iPhone/Android向けのアプ JavaScript +QuickTiGame2d リがリリース出来る ブラウザ上で稼働するWeb enchant.js JavaScript アプリケーション ngCore JavaScript DeNAが開発してる Unity Technologies社が開 Unity JavaScript 発しており、GREEがこの会 社と提携してる
  • 3. QuickTiGame2dの主な機能 jcarbaugh John Kroll Daves Portfolio 「舞台」のような位置づけ。 「俳優」のような位置づけ。 「監督」のような位置づけで 例えばステージ1は誰でもクリ 画像を表示する機能はもちろん ゲームの進行管理を担う アーできる程度の敵を配置する のこと、画像の変形、移動とい ・弾道と敵が当たった時のアク だけにしておき、ステージ2は う処理はもちろんのこと、画像 ションを決定する 少し難易度をあげる・・・とい 同士が重なってるかどうか簡単 ・ゲームのスコアー管理をする うようなゲームにしようとした に判別出来たりするので、ゲー ・何面まで進んだのか管理する 場合にこの「舞台」を切り替え ム開発者が面倒な処理を考えて ることで簡単に実現可能 なくても済む
  • 4. 実際の画面ではこのように配置されます Window オブジェクト GameView Scene Sprite Score Titanium.UI.Label
  • 5. ソースコード解説:初期設定 var win1 = Titanium.UI.createWindow({ title:'Tab 1', backgroundColor:'#fff' }); var totalScore = 0; var scoreLabel = Titanium.UI.createLabel({ top : 10, left : 10, height : 20, width : 'auto', color : 'white', text : 'Score: ' + totalScore }); var quicktigame2d = require('com.googlecode.quicktigame2d'); var game = quicktigame2d.createGameView(); var scene = quicktigame2d.createScene(); game.screen = {width:320, height:480}; game.fps = 30; game.color(0, 0, 0); game.pushScene(scene); var tank = quicktigame2d.createSprite({image:'images/tank.png'}); tank.x = (320/2) - (tank.width/2); tank.y = 480 - tank.height; var back = quicktigame2d.createSprite({image:'images/back.png'}); back.x = (320/2) - (back.width/2); back.y = 480 - back.height; scene.add(back); scene.add(tank);
  • 6. 簡単そうで意外と難しいキャラクターの画面 配置(1) 画面の横幅の半分を取 画像の横幅の半分だけ 得してその値を画像のX ずらせばOK に指定した場合
  • 8. ソースコード解説:ゲーム難易度設定 /* 弾道の数、速度や敵の数、移動スピードといったパラメータを変更することでゲームの難易度が変わりそうだが 各スプライトに直接値を設定するとマジックナンバーになりそうなので以下オブジェクトを作成 */ var gameLevel ={ // MAXALIENS :敵の表示最大数の設定 // MAXBULLETS :弾の最大数 // ALIENSSPEED :敵の移動スピード設定 // BULLETSSPEED:弾の移動スピード設定 easy:{ MAXALIENS :5, MAXBULLETS :15, ALIENSSPEED:10, BULLETSSPEED:15 }, middle:{ MAXALIENS :10, MAXBULLETS :10, ALIENSSPEED:15, BULLETSSPEED:15 }, hard:{ MAXALIENS :10, MAXBULLETS :10, ALIENSSPEED:15, BULLETSSPEED:10 } }; var selectedLevel = 'easy';
  • 9. ソースコード解説:メイン処理 var aliens = []; var aliensSpeed = []; var bullets = []; var bulletsSpeed = []; game.addEventListener('onload', function(e) { for (var i = 0; i < gameLevel[selectedLevel].MAXALIENS; i++) { 敵機となる画像を aliens[i]= quicktigame2d.createSprite({image:'images/alien1.png'}); aliensSpeed[i] = gameLevel[selectedLevel].ALIENSSPEED; MAXALIENESで設定した数 aliens[i].x = Math.random() * game.screen.width; だけ画面に配置。バラバラに aliens[i].y = -100; scene.add(aliens[i]); 配置したいので乱数を活用し } for(var j=0;j<gameLevel[selectedLevel].MAXBULLETS;j++){ てる bullets[j]= quicktigame2d.createSprite({image:'images/bullet.png'}); bullets[j].x = initBulletsPostion(); ※弾道も基本的には同じ考え bullets[j].y = tank.y - (bullets[j].height); です。 bulletsSpeed[j] = gameLevel[selectedLevel].BULLETSSPEED; scene.add(bullets[j]); } game.start(); }); 「enterframe」内に書かれている処理が game.addEventListener('enterframe', function(e) { bulletCollidesWithAliens(); 定期的(1/30秒)ごとに呼び出される。 updateAliensPosition(); updateBulletPosition(); ※この場合には後述する3つのサブ処理が }); 実施される game.addEventListener('touchmove',function(e){ tank.x = e.x; }); win1.add(game); win1.add(scoreLabel); win1.open();
  • 10. ソースコード解説:サブ処理(弾道と敵機配 置) /* 敵の位置の再計算を行い、非表示にしたいものがあったら画面外に配置させることで結果的に非表示にする */ function updateAliensPosition(){ for (var i = 0; i < gameLevel[selectedLevel].MAXALIENS; i++) { aliens[i].y += aliensSpeed[i] * Math.random(); if(aliens[i].y > 480){ aliens[i].y = -100; } } } /* 弾の位置の再計算を行い、非表示にしたいものがあったら画面外に配置させることで結果的に非表示にする。 */ function updateBulletPosition(){ for (var i = 0; i < gameLevel[selectedLevel].MAXBULLETS; i++) { bullets[i].y -= bulletsSpeed[i]; // 弾が画面外に出た時にはタンクの砲台位置に弾を再設定 if(bullets[i].x < 0 ||bullets[i].x > 320 || bullets[i].y < 0 || bullets[i].y > 480){ bullets[i].x = initBulletsPostion(); bullets[i].y = tank.y - (bullets[i].height); } } }
  • 11. なぜ、敵機や弾道が動いて見えるのか? 実際の処理はこんな感じ スタート時 スタート時 の位置 1秒後の位置 1秒後
  • 12. ソースコード解説:サブ処理(弾道当たり判 定と弾道初期化) function bulletCollidesWithAliens(){ for (var i = 0; i < gameLevel[selectedLevel].MAXBULLETS; i++) { for(var j=0;j<gameLevel[selectedLevel].MAXALIENS;j++){ var flg = bullets[i].collidesWith(aliens[j]); if(flg){ totalScore +=100; scoreLabel.text = ('Score:' + totalScore); aliens[j].y = -100; //弾道をタンクの位置にセットしなおす bullets[i].x = initBulletsPostion(); bullets[i].y = tank.y - (bullets[i].height); } } } } function initBulletsPostion(){ // 弾道は配列で保持しているけれど、幅はすべて同じなので // 配列の先頭に格納している弾道の幅を取得した上で // 弾道を砲台の箇所に位置するように処理 return tank.x + (tank.width/2) -(bullets[0].width/2); }