PG日誌

受託系 PG が C# の事を書いています

c/c++

Cocos2d-xで文字送りを実装する

RPGやノベルで表示されるテキストが1文字ずつ表示されていく、「文字送り」機能を作成したいと思います。 画面の構成は、周りの枠をScale9Spriteで表示して、テキストはラベルで表示します。図にするとこんな感じです。 おおよその仕様ですが以下の通りです…

std::stringの日本語の長さを取得する

C++でstd::stringに日本語が設定されているときに、size(), length()メソッドで文字列長を取得しようとすると日本語の長さが取得できません。中身がマルチバイト可変長 + 特殊ルールという構造になっているようで、1文字が1バイト~6バイトとなっているため…

コインエフェクトを作成する

Cocos2d-x 3.14.1でコインエフェクトを作成したいとおもいます。 エフェクトは宝箱を開けたときや、敵を倒したときに「複数枚のコインがジャラジャラと出る」ようなエフェクトにしたいと思います。自分で描いたコインの画像を使います。 で、作成したものが…

C#/C++相互運用時の戻り値構造体にwchar_t[]が含まれると例外が出る問題

前回記事で、戻り値の構造体にNon-Bittable型(非Blittable型)が含まれる場合例外が発生する件でchar型の固定長配列は自分でマーシャルしないと例外が出るという話の続きです。前回と同じ条件(戻り値が非ポインタ型の構造体)でwchar_t型の固定長配列が含まれ…

相互運用時に戻り値にNon-Bittable型が含まれる場合例外が発生する件

タイトルの通りですが、C#からC/C++のDLL関数を呼び出すとき(相互運用時)にC++側の関数の"戻り値"が構造体でかつ、非ポインタ型で、その構造体のフィールドメンバーにNon-Bittable型(非Blittable型)が含まれている場合、以下の例外が発生して処理が落ちます…

Cocos2d-xで画像を切り出してアニメーションする。

Cocos2d-xで配布されている素材のキャラクターチップを切り出して歩行アニメーションをつけようと思います。 素材配布サイトさんに以下のような形式で歩行グラフィックが配置されているのを見たことがあるとあると思いますがこの画像、毎回全部分割して画像…

Cocos2d-xで乱数を取得する

Cocos2d-xにはライブラリ標準で乱数を取得できるrandom関数があります。自分でsrand + rand とか、mt19937を自分でしなくて大丈夫です。便利に使えるようにUtility作る必要ありません。使い方ですが、 // Cocos2d-x内の宣言 // ccRandom.h inline int random…

Cocs2d-xでアニメションを停止・再開する

Cocos2d-xでノードに設定したアニメーションを停止・再開する方法です。 Nodeクラスのpasue/resmeメソッドを使用します。使い方は以下の通りです。 auto sp = Sprite::create("sample.png"); // アクションを作成 auto jumpAction1 = JumpBy::create(0.25f, …

Cocos2d-xでFF5風のダメージを再現する

Cocos2d-x(3.x系)で、FF5風のダメージ表示のエフェクトを再現してみました。 制作環境は以下の通りです。 Cocos2d-x 3.14.1 Windows10上でWin32プロジェクトにて確認 参考にした動画 www.youtube.com 実装した結果 微妙に画像がつぶれているので見づらい場合…

Sprite, LabelのアンチエイリアスをOFFにする

Cocos2d-x3 3.x系でアンチエイリアスをON/OFFにする方法です。 ラベルのテキストのアンチエイリアス指定方法が途中で変わっていたので、priteとLabel両方の指定方法まとめてみました。 Spriteの場合 こちらは、結構昔から変わっていません。 auto sp = Sprit…

C#とC++のbool型の扱い、条件分岐での使い方

自分へのメモ。 if文の括弧内の評価とbool値の関係を、C++を触るたびに検索してるので記録しておく。 どの言語でも共通のif文の定義 if文は評価結果が真の時に実行される if( $COND ) { // $CONDの評価結果が[真]の時に実行される } else { // $CONDの評価結…

Cocos2d-xでロマンシングサ・ガ3風のダメージ表示を再現する

Cocos2d-x(3.x系)で、ロマンシングサ・ガ3風のダメージ表示のエフェクトを再現してみました。 制作環境は以下の通りです。 Cocos2d-x 3.14.1 Windows10上でWin32プロジェクトにて確認 参考にした動画 www.youtube.com 実装した結果 微妙に画像がつぶれている…

C++で乱数を取得する時に短時間にsrandを何度も呼ばない

すいません、当たり前の話です。以下コーディングミスで10分ほど悩んだので備忘録です。 C++で乱数を取得するときにrand関数を使いますが、毎回乱数が生成されないためにsrand関数でシードを更新しましょう。という話があったのでこんなコードを書いてみまし…

C#とC++でラムダ式を利用、運搬性を確認する

C++11からC++でもラムダ式が使用できるようになったので、今更ですが使い勝手と、運搬性ををC#を比べてみました。ラムダ式を使用する方法と、変数に入れて持ち運ぶ方法の2とおりの使い方を確認しています。 C#でラムダを使用・運搬する 最初はC#です。かなり…

Cocos2d-xでHPゲージを実装する

Cocos2d-x 3.1xで、Spriteを使ってHPゲージを実装したときのメモです。

C#とC++間でchar*もしくはLPSZをやり取りする

C#からC++のDLLを呼び出すためにDllImportしたときにchar*が引数にある場合のやり取りの仕方です。 C++側はシグネチャを持つコードがあった場合 // C++側宣言 uint32_t __stdcall Function(char* szMessage); // もしくは uint32_t __stdcall Function(LPSTR…

Cocos2d-xのwin32プロジェクトのビルドを高速化する

タイトルの通りですが、win32プロジェクトで、あらかじめDLLをgen-libsコマンドで作成し、コンパイルの時間を高速化します。iOSだとスタティックライブラリを使用して高速化するあたりの話と同じです。ちなみに、元ネタは以下のフォーラムです。 が、このfor…

cocos2d-xのUSING_NS_CCについて

cocos2d-xのUSING_NS_CCはCCPlatformMacros.hに以下のように定義されています。 #ifdef __cplusplus #define NS_CC_BEGIN namespace cocos2d { #define NS_CC_END } #define USING_NS_CC using namespace cocos2d #define NS_CC ::cocos2d #else #define NS_…