C++

C++でC#ライクなプロパティを実現する

C#ではプロパティ構文というものがあります。これは、オブジェクトのメンバーへのアクセスを行うための、アクセッサー(setter/getter)をあたかも変数へのアクセスと同様に行える仕組みです。 // C#のプロパティ public class CSharpProp { // 一番簡単なプ…

メンバーに構造体配列(のポインタ)を持つ構造体のマーシャリング

C#の相互運用(C#からネイティブDLLの呼び出しの場合)で構造体の中に構造体配列のポインタを持つ関数のマーシャリングのやり方です。 ネイティブDLL側の宣言 ネイティブのDLL側の宣言は以下のようになっているとします。 // Sample.h // 外部に公開する関数…

dllexport と__stdcallを同時に宣言すると関数名が変わる

C++

VsiaulStudioのC++のプロジェクトで、DLLを作成し、関数を外部公開するため、 extern "C" と dllexport を指定したところ予期しない名前がついていて関数呼び出しが失敗してしまいました。 以下のように、外部公開される名前の先頭にアンダースコア、末尾に…

XとYのグリッド構造を全て列挙する foreach 操作を C++ で実装する

C++

画像処理や、ゲーム作成をしていると、結構な頻度でXとYで表される2次元のグリッドを扱う事があると思います。その時に、全グリッドを対象にした処理を書く際に以下のようなループ処理を結構な頻度で書く事になると思います。 // 頻繁に出てくるループ処理 f…

Cocos2d-x でsetScaleとsetContentSizeの挙動の違い

すぐ忘れるのでメモ代わりにまとています。 Cocos2d-xで、Spriteに対してサイズ変更するときに、setContentSize(), setScale()各々を実行した時の挙動の違いは以下の通りで。 まず、100x100pxの大きさの画像を読み込む。 Sprite* sp = Sprite::create("100x1…

CocosStudioで作ったLayerの子要素を自作のLayerに載せ替える

CocosStudioで作成で作成したLayerの子要素を自作したLayerに乗せ換える話です。 CocosStudioで「Layer」を作成し、csb形式でpublish後にCocos2d-x側から、そのレイヤーを呼び出します。そうすると、取得できる型がcocos2d::Node*型で取得できます。CocosStu…

Cocos2d-xでスプライトがタッチされたかどうかを判定する

Cocos2d-x でスプライトがタッチされたかどうかを判定する場合、タッチされた座標がスプライトの中か外かを判定して行います。便利なメソッドなどが存在しないため、定型的なコードを書く必要があります。 以下の環境で確認しています。 Cocos2d-x 3.16 Win3…

Cocos2d-x でレイヤーに対してリアルタイムにブラーをかける

ゲームでメニューを出す際に、背景がぼやけて少し暗くなった後に、前面にダイアログが表示される演出があります。そのような画面をぼやかす事をブラーを言います。 今回はこの「ブラー」をCocos2d-xのレイヤーに対してかけてみたいと思います。 成果物 作成…

C#で構造体のunion(共用体)を扱う

C/C++にあるunionをC#で使用する方法は、ネットにいくつか解説しているサイトがあります。しかし、構造体がunionになったものは例があまりないため紹介したいと思います。 基本的に、StructLayout = "LayoutKind.Explicit"(明示的にレイアウトを指定する)…

タッチ・スワイプした後にエフェクトを発生させる

今回は、「画面にタッチした場所の表示」と「スワイプした軌跡」にエフェクトを表示する汎用レイヤーを作成します。 成果物 前回作成した「X-Y座標系と円座標系、2点間の角度を求める」の上に軌跡エフェクトのレイヤーをかぶせています。ちょっと原色されて…

サインカーブを使って雪を降らせるデモ

前回までの、X-Y座標系と円座標系の学習の一環として、サインカーブを使って雪を降らせるデモを実装してみました。 『JavaScriptゲームプログラミング 知っておきたい数学と物理の基本』から、第2章 基礎編-2 三角関数、2-2 サインカーブを使ったサンプルの…

X-Y座標系と円座標系、2点間の角度を求める

前回作成した「X-Y座標系と円座標系」の確認のためにちょっとしたサンプルを作成しようと思います。 takachan.hatenablog.com 作成するもの Cocos2d-xを使って中心に自機に見立てた四角を置き、多面をクリックすると、自機とタップ位置の角度を求めて玉を発…

X-Y座標系と円座標系

最近Kindleで購入した書籍『JavaScriptゲームプログラミング 知っておきたい数学と物理の基本』から、2-1-1 X-Y座標系と円座標系をやってみました。 JavaScriptゲームプログラミング 知っておきたい数学と物理の基本 (Future Coders(NextPublishing))作者:…

重力加速度を使ったミニゲームをCocos2d-xで実装する

以下の本から、「重力加速度を使ったミニゲーム」の項目をCocos2d-xで実装してみたいと思います。 ゲームを作りながら楽しく学べるHTML5+CSS+JavaScriptプログラミング (NextPublishing)作者: 田中賢一郎出版社/メーカー: インプレスR&D発売日: 2014/05/22メ…

重力加速度をCocos2d-xで実装する

以下の本から、「重力加速度」の項目をCocos2d-xで実装してみたいと思います。 ゲームを作りながら楽しく学べるHTML5+CSS+JavaScriptプログラミング (NextPublishing)作者: 田中賢一郎出版社/メーカー: インプレスR&D発売日: 2014/05/22メディア: オンデマン…

C++/CLIでstd::stringとSystem::string^を相互に変換する

タイトルの通りで、C++/CLIでC++の文字列とC#の文字列を相互に変換する方法です。

C#から見たC++の例外処理仕様の違い

普段C#を使っていて、C++を使った時に例外を使用した時に感じた違いを書いていきたいと思います。 まずは、言語使用上、違う部分から行きたいと思います。(ちなみに動作をVS2017のVC++で確認してるので規格と違うことがあるかもしれません。 その1:C++の例…

Windows上にCocos2d-x 3.16 Android開発環境を作成する

Cocos2d-x 3.16 が2017年10月11日(水)にリリースされました。今までAndroid開発環境作るのが死ぬほどめんどくさかったのですが、少し改善されたらしいので導入手順をまとめてみました。 補足: AndroidStudioを使用する場合、Cocos2d-x のバージョンは「3.17…

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

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

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

C++

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 実装した結果 微妙に画像がつぶれている…