Siv3Dで座標を表示したい欲
まず座標を用意。
```Vec2```でも```Point```でも,intが2つでも、floatが2つでも、x座標とy座標を表す数を2つ用意。
多分それはスクリーンの座標系(スクリーン座標)なので通常の数学の座標に直ししてあげます。
変換は、
- $x$座標
- $x$座標は向きは変わらないので変更なし。
- $y$座標
- $y$座標はスクリーンの高さからスクリーン座標の$y$座標を引く(スクリーンの高さで値を反転)
します。
関数を作ってしまおう
Scene::Height()は現在のスクリーンの高さを取得する関数です。
- "スクリーン座標から数学座標に"
Vec2 ConvertScrP2MathP(Vec2 _spoint) { Vec2 resultPoint; resultPoint.x = _spoint.x; resultPoint.y = Scene::Height() - _spoint.y; return resultPoint; }
引数、戻り値のVec2は自分で考えてる座標の型に合わせて変更してください。
それでは、スクリーン上の座標```Vec2 P = {100,200}; ```を文字で表示することを考えます。
まず変換。
```Vec2 pMathCoord = ConvertScrP2MathP(P);```で変換するとpMathCoordに数学座標に変換された値がぶち込まれます。
そしたらstringで、表示する文字列を作ってあげます。
表示は、“(x座標, y座標)“の形で表示したいです。ついでに小数だとちょっとめんどいので整数で表示します。
```std::string messStr = ”( ” + std::to_string((int)pMathCoord.x) + “, ” + std::to_string((int)pMathCoord.y) + “)”;```
```std::to_string(数値);```は数値をstd::string型に変換してくれるありがたい関数。
次に、Siv3Dで使われているUnicode文字列に変換します。(文字列処理ってめんどくさいのよ。マイナンバーカードのニュースでなんかやってるけどプログラム作ったこと無いくせによく言うよね)
```String message = Unicode::Widen(messStr);```
んで、やっと最後にfontに渡して表示
```font(message).drawAt(表示位置の指定, Palette::Black);```
まとめ
- "座標を文字列表示したいよ"
Vec2 pMathCoord = ConvertScrP2MathP(P); std::string messStr = "( " + std::to_string((int)pMathCoord.x) + ", " + std::to_string((int)pMathCoord.y) + ")"; String message = Unicode::Widen(messStr); font(message).drawAt(表示位置の指定, Palette::Black);
表示位置の調整はがんばってみて!
点の位置からちょっと下か上にずらすといいよ。
font.fontSize()で、フォントのピクセルサイズが取得できるから使うといいよ!