質問: MoveTo::create(moveTime, touchPoint); moveTo->setTag(100); pPlayer->runAction(moveTo); マップがタッチされると上記のコードが呼ばれるようにしています。 タッチの位置と現在位置の距離を求め、moveToの引数が時間のため、 移動速度が一定になるように、移動時間を計算し移動を行っています。 これで、移動の処理を行えたのですが、 画面のスクロールを実装したところ、 元々画面外だった箇所へ移動の際の挙動がおかしくなってしまいます。 出力して確認してみたところ、 元々画面外だった箇所のタッチ位置がおかしくなってしまっているようでした。 解決法がわからないので どなたかご教授よろしくお願いします。
回答: タッチ座標は、AppDelegate.cppで設定しているデザイン解像度(DesignResolutionSize)の範囲です。 デザイン解像度は、以下のコードで確認できます。 ``` auto winSize = Director::getInstance()->getWinSize(); CCLOG("winSize.width=%.3f, winSize.height=%.3f", winSize.width, winSize.height); ``` タッチ座標をキャラクターが動く範囲の座標に変換してやる必要があります。 Fllowアクションでスクロールを実装しているのであれば、以下のコードで変換できると思います。 ``` auto touchPoint = pTouch->getLocation(); CCLOG("タッチ座標(返還前): x=%f, y=%f", touchPoint.x, touchPoint.y); auto globalTouchPoint = this->convertToNodeSpace(pTouch->getLocation()); CCLOG("タッチ座標(変換後): x=%f, y=%f", globalTouchPoint .x, globalTouchPoint .y); ``` もし、違う方法でスクロールを実装しているのであれば、 自前でスクロール量を管理しておき、タッチ座標にスクロール量を足したものを使用するという事になります。