C++

【C++/CLI】System::String^をdouble/intに変換する

まず前提は以下の通り。 // これは .NETの型 System::String^ str = "10;" // こっちは .NET/C++(CLI)共通で使える型 double d = 0; 変換に使うメソッドはいくつかあるのでそれぞれの使い方です。 System::String^ str = "10"; double d = 0; int i = 0; // …

【C++】無効値を指定可能なstd::optionalの使い方

C++17から使えるようになった値型にもnullのような無効な値を指定できるnulloptの使い方です。 宣言 ヘッダー宣言 #include <optional> // 使うときはこれを宣言する 判定方法 std::optional を受け取ったときの判定方法 // (1) サンプル用のクラス class Sample { pub</optional>…

【C++】const参照とshared_ptrをダウンキャストする

const 参照と shared_ptr のダウンキャスト方法です。 先に方法を書いておきますが以下の通りです。 // const参照のダウンキャスト auto&/*const Type&*/ sub = static_cast<const Type&>(obj); // shared_ptrのダウンキャスト std::shared_ptr<Type> sub = std::dynamic_pointe</type></const>…

【C++/CLI】std::functionにマネージドメソッドをバインドする

std::function にメソッドを関連付ける時は std::bind を使用しますが C++/CLI でマネージドメソッドを std::bind 渡したい場合の実装方法の紹介です。 C++11 以降で関数ポインタの代わりに std::function でコールバック呼び出しされるような局面でマネージ…

【C++/CLI】Action<T1, T2>, Func<..>がエラーになる

C++/CLI で Action は使用できるのに Action<T1, T2> 以降が「E2154 ジェネリック クラス "System::Action" の引数が多すぎます」でエラーになる場合の対処方法です。 ソリューションエクスプローラー > 該当のプロジェクト > 参照 > System.Core を追加 どうやら定</t1,>…

OpenCVをCMakeとVsiaulStudiio2019でビルドする

ダウンロードした OpenCV の bin フォルダに DLL 入ってなくね?Lib はどこ…? え、自分でビルドするんだよ、え、マジで? まぁ、C++er なら普通のことですが… …という事でまぁこういった事はプロジェクト初期には割と毎回発生する、というか、Windows民は大…

VC++でどのWindowsSDKを選択するべきか

Windows 10 環境で VC++ の コンパイルに使用する Windows SDK バージョン にどれを指定したらしいのかのメモです。 結論から言うと基本的にターゲットの Windows のバージョンに合わせます。 対応表 Date Windows10 Ver. Windows SDK Ver. メモ 2015/07/29 …

Cocos2d-x v4.0をVisualStudio2019で扱うための環境構築手順

タイトルの通りCocos2d-x v4.0でテンプレートから除外されたVisualStudioのソリューションをCMakeコマンドで生成してVisualStudio上からコードを編集(+MS Buildでビルド)する方法を紹介したいと思います。 前置き Cocos2d-x v4.0の主な対応項目はApple/iO…

Cocos2d-x 4.0がリリースされたみたい

2020-09-02 昨日ポエムを書いてる最中にV4.0リリースアナウンスがありました。 まぁ昨日引退したばっかりで気分の切り替えが済んでないので少し内容を見てみました。 Topics iOS/Mac向けにMetal対応が完了 GLFWを3.3にアプデ 非推奨の関数を削除(const char*…

Cocos2d-xをやめてUnityに移行した話@2019冬

2021-02-02 ご注意: 内容は全て個人の感想です。また、好意的な内容ではありません。人によっては不快になる可能性があります。承知の上読んでください。 この記事は、今まで趣味でC++の勉強 & ゲーム制作で Cocos2d-x を使ってアプリ開発していましたが長ら…

C#のDateTimeとC++のtime_tを相互変換する

C++/CLIやC#とネイティブを相互運用を使用しているときにC#のDateTime型とC++のtime_tを相互に変換する方法です。 コードのかりやすさ優先でまとめています。 C#のDateTime → C++のtime_tへの変換 .NETのDateTimeをtime_tに変換します。 tm型を経由してmktim…

PicojsonのJSON書き出しをもっと便利にする

C++でPicojsonというJSONを読み書きするライブラリがあります。 JSONを読みだすときはそんなに苦じゃないのですが、このライブラリを使ってJSONの作成を始めると冗長な表現をする関係でタイプ数が増えて結構面倒なんですよね… // いちいちこんな感じでコード…

Cocos2d-xでOpenSSLを使った256bit AES暗号化・復号化(3.17.1対応版)

以前にCocos2d-xに組み込まれたOpenSSLを使ってハッシュ計算をしましたが今回は、AES暗号化・復号化をしたいと思います。 前回の記事はこちら。 takachan.hatenablog.com 確認環境 確認環境は以下の通り。 VisualStudio2017 Cosoc2d-x 3.17.1 OpenSSL 1.1 AE…

Cocos2d-xでStaticクラスのメソッドやフリー関数をコールバックに指定するマクロ

タイトルにはCocos2d-xと書いてありますが、C++でstaticなメソッドとかフリー関数をstd::bind関数でバインドする方法です。 Cocos2d-xにあるCC_CALLBACK${N}を改造してCC_CALLBACK_S${N}を以下のように定義すると簡単にバインドできるようになります。 // 任…

Cocos2d-xで画像を任意の色で点滅させる(3.x系)

Cocos2d-xで画像を点滅させるには、Blinkを使います。このBlinkの動作は、画像を「表示」⇔「非表示」動きをやってくれます。ただ、自分の好きな色で点滅などは出来ません。画像(Sprite)に弾がヒットした時に一瞬白く点滅する等の2Dゲームに割とよくある表…

Cocos2d-xで2点間の距離・角度を取得する(3.x系)

タイトルの通りですが、何故かCocos2d-xの2.x系で説明されている古めの記事しかなったので新しい(と言っても相当前ですが)3.x系での書き方の紹介です。 2.xと3.xではメソッド名や関数の位置が全然違うので少し書き方が違います。ただ、古いメソッドなどが…

Cocos2d-xでバーチャルパッド(スティック操作)を実装する

今回は、Cocos2d-x(ver. 3.17.1)でバーチャルパッド(スティックキー)を実装したいと思います。 PSやXboxなどでおなじみの360°方向の入力ができるスティックキーです。 実際に実装するとこんな感じになります。 よくコントローラが画面の下部に表示されてい…

Cocos2d-x 3.17.1で円と矩形(長方形・角度あり)の衝突判定

タイトルにCocos2d-x(2D用のゲームエンジン)でと書きましたが考え方自体は普遍的な円と矩形(長方形)の当たり判定の処理についてです。と、言っても条件式式が結構難しい(当方には説明が難しい)ため解説は以下のサイトが分かりやすくまとまっていますの…

Cocos2d-xでルール画像を使ってシーントランシジョンする(シェーダー使用)

Unityだと以下のように紹介されている、ルール画像を用いたシーンの遷移エフェクトをCocos2d-xで実装してみたいと思います。 tsubakit1.hateblo.jp まずこんな感じのグレースケールのマスク画像を使用します。 画面遷移はこんな感じになります。 「マスク画…

Cocos2d-x 3.17.1のcmakeでスタティックライブラリを作成してビルドを高速化する

はじめに FirebaseをAndroidに追加するときに思ったのですが、Cocos2d-xのAndroid環境は本当に地獄ですね… 少しGradleやCMakeist.txtを編集するとフルビルドになってCocos2d-x丸ごとリコンパイルになって時間がすごくかかります。 少し前に、3.17でcmakeが推…

Cocos2d-x 3.17.1でlib-genコマンドが削除されたけどWin32プロジェクトのビルドを高速化する

あらかじめCocos2d-xのコアの部分をコンパイルしてDLLを作成し、ビルド時間を高速化する話は以前、こちらで書いたのですが、なんと3.17.1からlib-genコマンドが削除されてしまいました。従って、最新版のCocos2d-xだとlib-genコマンドによる事前ビルドが不可…

Cocos2d-x 3.17.1でハッシュ計算を行う(MD5・SHA-256)

ゲームでデータが改ざんされていないかどうかを確かめるためにデータのハッシュ値を取って照合する手法があり、ハッシュ計算が必要になった時に使用するライブラリですが、最近のCocos2d-xにはすでにハッシュ計算用のライブラリが入っています。従って以前の…

Cocos2d-xのWin32プロジェクトでFirebaseの匿名認証してみる

タイトルの通りですが、Win32上でも匿名認証が普通にできるので方法を紹介したいと思います。 前回書いた以下の記事でWin32のプロジェクトが設定済みの状態を想定します。 takachan.hatenablog.com そして、以下のページにある「デスクトップ版の Firebase …

Cocos2d-xのWin32プロジェクトにFirebaseを設定する

Android向けにアプリ開発していますが、プログラムを書くときはWin32プロジェクトで作成しているのでモバイルプラットフォーム向けのライブラリとか機能は特別な分岐コードを書かないといけないのですが、FirebaseはAndroid, iOSは対応していますがWindowsと…

Cocos2d-xでLabelやTextの色を部分的に変更する

Cocos2d-xでラベルの色を途中で変更する場合以下のサイトが出てきます。 masahirosaito.hatenablog.com Cocos2d-xのバージョンが3.17.1の今でも大抵このサイトの通りで問題ないですが、文字列中の任意の単語の色を一括で変更したいといった場合、元の文字列…

C#とC++で任意の型をスターリンソートする

ネットで少しだけ話題になったネタ系ソートアルゴリズムのスターリンソート(というかフィルター?)をC#とC++で実装してみようと思います。 スターリンソートとは? C#の実装 オリジナルの実装 少し改造してみる C++で実装 オリジナルの実装 少し改造してみ…

Cocos2d-xのListViewをGridView風の表示として扱うためのライブラリ

Cocos2d-xの「ListView {cocos2d::ui}」でグリッド風の表示(GridView)を扱うためのライブラリを作成しました。 ある程度動作が確認できたので公開したいと思います。 動いているところ 実際に動作させると以下のようになります。 1行の中に複数のアイテム…

C++でstd::mapにキーが存在するか調べる(C++20含む

C++の連想配列クラスのstd::mapの、テーブル内にキーが存在するかどうか確認するための方法の紹介です。 ものすごーく古くからあるクラスなので若干クセがあります。 C++20ならcontainsメソッドを使う C++20であればmapにcontainsというメソッドが追加されて…

Cocos2d-xでテクスチャの簡易ヒットテスト(ver3.17.1対応版)

Cocos2d-xでテクスチャの簡易ヒットテスト(ver3.17.1で確認済み) 今回は、四角いSpriteのテクスチャー内において、色がついている場所がタッチされたかそうでないかを判断する方法を紹介したいと思います。 絵にすると以下のような感じになります。テクスチ…

C++で時間計測 & ストップウォッチを実装する

C++11から「std::chrono」という時間を表す型がいくつか追加になっています。 従来の時間取得方法からずいぶん使いやすい形で機能が提供されています。 ある区間の時間を図るには以下のように記述します。 #include <iostream> #include <chrono> void Foo() { // 開始・終了時</chrono></iostream>…