質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

255閲覧

cocos2dxで、ラベルの一文字ずつに衝突判定を適用する方法

yaoriku_ava

総合スコア25

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/09/29 00:01

Cocos2dxで、画面にラベルを表示し、キャラの踏んだ文字を光らせたいのですが、ラベルの一文字一文字に対してキャラとの衝突判定を適用する方法はありますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

回答ありがとうございます!
そのようなやり方もあるのですね。
自分は物理エンジンの衝突判定を使って実装できました!

投稿2018/10/02 10:05

yaoriku_ava

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

面白そうなので実験してみました。

cocos newでプロジェクト作成直後のHelloWorld::init()にイベントハンドラ追加します。

C++

1 auto label = Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", 24); 2 if (label == nullptr) 3 { 4 problemLoading("'fonts/Marker Felt.ttf'"); 5 } 6 else 7 { 8 // position the label on the center of the screen 9 label->setPosition(Vec2(origin.x + visibleSize.width/2, 10 origin.y + visibleSize.height - label->getContentSize().height)); 11 12 // add the label as a child to this layer 13 this->addChild(label, 1); 14 } 15 16 // ↑ここまではテンプレート HellowWorld のコード 17 18 auto listener = EventListenerTouchOneByOne::create(); 19 listener->onTouchBegan = [this, label](Touch* touch, Event* event) { 20 auto loc = label->convertToNodeSpace(touch->getLocation()); 21 for (int i = 0; i < label->getStringLength(); i++) { 22 auto letter = label->getLetter(i); 23 if (letter != nullptr) { 24 auto x = letter->getPosition().x; 25 auto w = letter->getContentSize().width; 26 if ((loc.x >= x) && (loc.x < x + w)) { 27 letter->setVisible(false); 28 } 29 } 30 } 31 return true; 32 }; 33 34 getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this); 35

"Hello World" ラベルの各文字とX座標を比較して、合っている文字があればその文字を消しています。
Label::getLetter() で各文字のSpriteを取得できます。
(空白だとnullptrになります)

投稿2018/10/01 06:57

daisuke7

総合スコア1563

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問