前回のあらすじ 物理演算ライブラリ chipmunk を使って チキンが地面に落ちるところまで

Similar documents
メンバ変数とインスタンス

Javaプログラムの実行手順

PowerPoint プレゼンテーション

Microsoft Word - C言語研修 C++編 3.doc

アクション講座 第1回目

Microsoft PowerPoint - prog03.ppt

スライド 1

レコードとオブジェクト

アプリケーション

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Graphical User Interface 描画する

デジタル表現論・第4回

Processingをはじめよう

Microsoft PowerPoint - prog04.ppt

基礎計算機演習 実習課題No6

スライド 1

グラフの探索 JAVA での実装

HCI プログラミング 5 回目ウィンドウに画像を表示してみよう 今日の講義で学ぶ内容 画像の表示 画像のエフェクト 画像のビューポート指定 画像の表示 1 画像を表示してみましょう 画像の表示はクラス ImageView により管理されます ソースファイル名 :Sample5_1.java //

ToDo: 今回のタイトル

Visual Studio2008 C# で JAN13 バーコードイメージを作成 xbase 言語をご利用の現場でバーコードの出力が必要なことが多々あります xbase 言語製品によっては 標準でバーコード描画機能が付加されているものもあるようで す C# では バーコードフォントを利用したりバー

Prog2_12th

C#の基本2 ~プログラムの制御構造~

JavaプログラミングⅠ

Prog2_9th

DEMO1 まずはやってみよう アクティビティをダブルクリック 作成 - プロジェクト C# => Workflow CodeActivity をぽとぺ シーケンシャルと ステートマシン それぞれのコ ンソールアプリ あとライブラリがある びっくりマークは足りていないあかし プロパティをみると判別で

平成 29 年度卒業研究 初心者のためのゲームプログラミング用 教材の開発 函館工業高等専門学校生産システム工学科情報コース 5 年 25 番細見政央指導教員東海林智也

レコードとオブジェクト

JAVA入門

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

プログラミング基礎I(再)

GUIプログラムⅣ

ゲームプログラミング講習 第0章 導入

Prog2_10th

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

<4D F736F F F696E74202D AC C8899E D834F E >

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

Microsoft PowerPoint - lec06 [互換モード]

SmartBrowser_document_build30_update.pptx

とても使いやすい Boost の serialization

プログラミング入門1

MMC Unity講座

PowerPoint Presentation

pp2018-pp4base

補足資料 キーイベント処理サンプル package jp.co.keyevent; import android.app.activity; import android.os.bundle; import android.view.keyevent; import android.widget.t

IT プロジェクト

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

memo

課題

JavaプログラミングⅠ

玉転がしタブレット端末の特徴の一つとして, センサを使った動作や, 指による画面操作がある. それらを活用して, 図形を動かすアプリの例を示す. 1. プロジェクトを作る Tama アプリケーションを作る,Tama プロジェクトを作る. 図 1 プロジェクト作成 プロジェクトの構成を設定する. 図

レコード class Point attr_accessor("x", "y") インスタンス変数の宣言 point.rb

Prog2_10th

LINE

プログラミング入門1

第12回 モナドパーサ

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

DVIOUT-exer

Microsoft PowerPoint P演習 第10回 関数.ppt [互換モード]

(Microsoft Word \203v\203\215\203O\203\211\203~\203\223\203O)

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

JUnit 概要 2015/4/16 版今泉俊幸 2015 bbreak Systems 1

一方, 物体色 ( 色や光を反射して色刺激を起こすもの, つまり印刷物 ) の表現には, 減法混色 (CMY) が用いられる CMY の C はシアン (Cyn),M はマゼンタ (Mgent),Y はイエロー (Yellow) であり, これらは色の 3 原色と呼ばれるものである なお, 同じシア

JavaプログラミングⅠ

ボールとバーを出そう! presented by NaturalStyle Co.Ltd. 1

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   None

2 // TODO Auto-generated method stub float x = event.getx(); float y = event.gety(); String action = ""; switch(event.getaction()) { case MotionEvent.

Microsoft PowerPoint - lec4.ppt

PowerPoint Presentation

Taro-twokansu3.jtd

PowerPoint プレゼンテーション

Microsoft Word - Training10_プリプロセッサ.docx

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

LINE

プログラミング入門1

PowerPoint プレゼンテーション

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

Microsoft Word - A05_AndroidプログラミングJUMP_画面800×1280

Android Layout SDK プログラミング マニュアル

データ構造とアルゴリズム論

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

課題

C#の基本

手書認識 グラフ描画 Step2-2 手書認識 : 認識結果を PaintPanel で描画する < 属性付き文字列 AttributedString> 標準出力では分かりにくいうえに認識結果を使えないので 認識するごとに PaintPanel に文字を描画することにする ここで 数式はただの文字列

MasterDetailFlow SettingsActivity 2. Android Lint Checks 以前のバージョンよりコンパイルのチェックが厳しくなりました このような厳しいチェックを Android Lint Checks と言います Abdroid プログラミング Bible で

PowerPoint プレゼンテーション

slide5.pptx

pp2018-pp9base

8 / 0 1 i++ i 1 i-- i C !!! C 2

微分方程式 モデリングとシミュレーション

Microsoft PowerPoint ppt

Microsoft Word - NonGenList.doc

Prog1_6th

WPF アプリケーションの 多言語切替

Prog2_11th

プログラミング入門1

Microsoft Word - NonGenTree.doc

Microsoft PowerPoint - chap10_OOP.ppt

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

以下に java.awt.graphics クラスの主なメソッドを示す (Graphics クラスの ) メソッド drawline(int x1, int y1, int x2, int y2) drawrect(int x, int y, int width, int height) fillr

Transcription:

Cocos2d-x で作る物理演算ゲーム 引っ張って飛ばす編 = 2015 年 09 月 12 日 =

前回のあらすじ 物理演算ライブラリ chipmunk を使って チキンが地面に落ちるところまで

今回はチキンを 引っ張って飛ばします

これ チキンにタッチして 飛ぶ! 離す! スライド

AngryChicken を xcode で実行 まずは起動しよう

やる処理を日本語でまとめる 1 画面へのタッチイベントを取得する 2 チキンにタッチを判定する 3 スライドして引っ張るとチキンが飛ぶ!

1 画面へのタッチイベントを 取得する

HelloWorld::init メソッドに以下のコードを追加 // Touch イベントを管理している EventDispatcher インスタンスを取得 auto eventdispatcher = Director::getInstance()->getEventDispatcher(); // 登録するリスナー情報を生成 auto listener = EventListenerTouchOneByOne::create(); listener->ontouchbegan = CC_CALLBACK_2(HelloWorld::_onTouchBegan, this); listener->ontouchmoved = CC_CALLBACK_2(HelloWorld::_onTouchMoved, this); listener->ontouchended = CC_CALLBACK_2(HelloWorld::_onTouchEnded, this); listener->ontouchcancelled = CC_CALLBACK_2(HelloWorld::_onTouchCancelled, this); // リスナー情報を登録 eventdispatcher->addeventlistenerwithscenegraphpriority(listener, this); EventDispatcher というシングルトンクラスがイベントを管理している EventListenerTouchOneByOne クラスを生成し コールバック関数を登録し EventDispatcher に登録する

当然コールバックされるメソッドを HelloWorld.cpp に作りましょう // タッチ開始最初に 1 度だけ呼ばれる bool HelloWorld::_onTouchBegan(Touch* touch, Event* event) { // false を返すと以降のタッチイベントは呼ばれない return true; } // ドラッグする最中ずっと呼ばれる void HelloWorld::_onTouchMoved(Touch* touch, Event* event) { } // タッチを離すと呼ばれる void HelloWorld::_onTouchEnded(Touch* touch, Event* event) { } // タッチがキャンセルされると呼ばれる void HelloWorld::_onTouchCancelled(Touch* touch, Event* event) { // キャンセル時も一応線を削除 } キャンセルは システムメッセージなどが表 された際になど呼ばれるようだ ( バッテリー警告とかあの辺りと思われる )

当然 HelloWorld.h にもメソッド定義を書きましょうね private: // Touch イベント用 bool _ontouchbegan(cocos2d::touch* touch, cocos2d::event* event); void _ontouchmoved(cocos2d::touch* touch, cocos2d::event* event); void _ontouchended(cocos2d::touch* touch, cocos2d::event* event); void _ontouchcancelled(cocos2d::touch* touch, cocos2d::event* event); * ちなみに 私は private なフィールドやメソッドには アンダーバー を規則でつけます

ここまでで画面をタッチすると 各メソッドが呼ばれます

2 チキンにタッチを判定する

もう少しひも解くとこうなる タッチしたポイント座標 (x,y) がチキン画像の縦横幅内だったらイロイロ処理をする つまり上記条件を満たさない場合は引っ張り処理はしないということ

チキンノードを取得できるように helloworld::init のチキン読み込み部分の settag を赤文字に変更 // キャラクター auto* character = Sprite::create("chicken.png"); character->setposition(point(winsize.width / 5, winsize.height / 2)); auto* charapb = PhysicsBody::createCircle(40); charapb->setmass(1.0f); // 重さを指定 ( ここが無いと後で飛ばせなくなる ) character->setphysicsbody(charapb); character->settag(char_objtag); this->addchild(character); helloworld.cpp の冒頭に以下のマクロ定義 // tag list #define CHAR_OBJTAG 100

HelloWorld::_onTouchBegan に以下の処理を追加 // チキンの矩形情報を求める auto* charsprite = (Sprite*)this->getChildByTag(CHAR_OBJTAG); Point point = charsprite->getposition(); int width = charsprite->getcontentsize().width; int height = charsprite->getcontentsize().height; Rect charspriterect = Rect(point.x - (width / 2), point.y - (height / 2), width, height); // タッチの位置を取得 auto tpos = touch->getlocation(); // タッチ位置がチキン矩形内か判定 if ( charspriterect.containspoint(tpos) == true ) {// チキンがタッチされた! // ここに処理をいろいろと書くのだよ return true; } // ここまで処理が来たということはチキンがタッチされなかったということ // false を返すと以降のタッチイベントは呼ばれない return false; 上記でメソッドで true を返すということは moved, ended がよばれることとなる つまり moved,ended,cancelled にはチキンがタップされたときにしか呼ばれないという状態になるのだ

3 スライドして引っ張ると チキンが飛ぶ!

少しだけ掘り下げて表現 タッチした箇所 ( 始点 ) 離した箇所 ( 終点 ) その 2 つを結ぶ線がいわゆるチキンが飛ぶ方向なのである タッチ スライド 離す 引っ張った逆に飛んでく

HelloWorld::_onTouchEnded へ以下を追加 // チキン画像の座標を取得する auto* charsprite = (Sprite*)this->getChildByTag(CHAR_OBJTAG); auto charpos = charsprite->getposition(); // タッチ終了の座標を取得する auto endpos = touch->getlocation(); //2 つの座標からベクトルを求める (x4 は係数 ) auto force = Vect(charPos.x - endpos.x, charpos.y - endpos.y) * 4; // チキンに力を加える charsprite->getphysicsbody()->applyimpulse(force); * ベクトルがわからない方は下を読んどきましょう http://www.geocities.co.jp/technopolis/1505/vx_index.htm

実行してみよう! チキンにタッチして 飛ぶ! 離す! スライド * 線は出ません

次回は物理演算 Chipmunk スクロールして 編

ここまでのソースプログラムはここ 引っ張り線描画とリファクタリング済み http://monolizm.com/sab/src/angrychicken.zip

ご清聴ありがとうございました