LoginSignup
4
4

More than 5 years have passed since last update.

知ってるとちょっと便利なSiv3Dの基本的な機能

Last updated at Posted at 2018-02-15

Siv3Dであれこれしてると、私はよく使っているのに身内のプログラマが知らなかった、みたいなのがすごく単純な機能でもしょっちゅう出てくるのでざっとメモ的に書いておきます。

RectとRectF

Siv3DのリファレンスだとほとんどRectなので気づかない可能性があるんですが(もしかしたら全部Rectかも?)、RectFという小数が使えるdouble型のRectもちゃんとあります。

似たようなものとしてPoint型とVec2型があります。これも小数か整数かの違いしかないです。

Point型にもSize型とか色々亜種があったりするんですが、Visual Studioでカーソルを合わせると出てくるヒントみたいなやつ(インテリセンス)で
using s3d::Size = s3d::Point;
みたいに表示されるやつは全部同じものです。

C++のなんかめっちゃ難しい機能みたいに捉えられてるテンプレートに興味がある人は、このあたりのOpenSiv3Dのヘッダファイルを読んでみると勉強になるんじゃないでしょうか?私はこれでテンプレートをかなり理解できましたのでおすすめの教材(?)です。

Vec2.asPoint()

先述の通りVec2型とPoint型はほぼintかdoubleかの違いしかないんですが、Vec2にはキャスト用の関数があるので必要な場面では使っていきましょう。

Rect型(RectF型)の便利なメンバ

※変数名は気にしないで

Rect rect(100, 100, 10, 10);

Point hoge = rect.tl;//左上の座標 rect.posでも同じ数値
//Siv3Dだとプロパティなのでtlだが、
//OpenSiv3Dだと普通の関数なのでrect.tl()になることに注意

Point fuga = rect.tr;//右上

bl//左下

br//右下


Line piyo = rect.top;//長方形の上辺
/*私はrect.top.intersect()みたいな形で
衝突判定を取るときに良く使う気がする*/

Line aaaa = rect.right;//右の辺

left//左

bottom//下

Point c = rect.center;//長方形の中心の座標

それから
* rect.stretched
* rect.scaled

この2つは色々引数があるのと、説明するより実際に使ってみた方が分かりやすいので動かしてみてください。文字通り、長方形を大きくしたりするやつです。

Vec2.normalized()

ベクトルのSin、Cosの値が取れます

Vec2 v(10, 5);

Vec2 n = v.normalized();

//使用例がぱっと思いつかなかったので三角関数の公式でも……
double d = (n.x * n.x) + (n.y * n.y);//d = 1

私は最初から極座標的に管理してしまうのでぱっと思いつかないのですが、実装方法や順番によってはVec2::rotateと組み合わせたりしてこれを使い、そのまま移動速度を掛け算して元の座標に加算するといい感じに移動してくれる状況があるかもしれないですね


おまけ

以下はOpenSiv3Dから実装された機能です。

Array.shuffle

Array<int> hoge;
//hogeをシャッフルした新しい配列を作る
auto piyo = hoge.shuffled();

//hoge自体をシャッフルする
hoge.shuffle();

これは便利。例えばトランプ描画機能と組み合わせて使う(ダイマ)などが考えられますね。

なんかまだ書き忘れてるような気がするのでそのうち追記するかもしれません。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4