背景
シェア機能は以前から実装していたのだけれど、固定のイメージだけだった。
用意しても数個という感じだったのだけれど、やっぱりゲームのリアルな感じをシェアできた方が、よいに決まっている。
ユーザにもシェアしてるぞーという感じを体験させてあげられるので、できるようにするために調べてこの記事を書こうと思う。
ちなみに寄稿しようと思ったきっかけはこの記事なのでよければ。
【レビュ学】人気アプリ「俺の校長3D」を分析し面白さを盗む!
cocos2d-xでスクリーンショットをとる
ScreenShot.cpp
// スクリーンショットを取得し、ツイートする
void screenShot() {
// スクリーンショットのテクスチャを取得する
Size size = Director::getInstance()->getWinSize();
RenderTexture* texture = RenderTexture::create((int)size.width, (int)size.height);
texture->setPosition(Point(size.width/2, size.height/2));
texture->begin();
Director::getInstance()->getRunningScene()->visit();
texture->end();
// 取得したテクスチャを保存する
texture->saveToFile("screenshot.png", Image::Format::PNG, true, [&](RenderTexture* rt, const std::string& path) {
// 保存完了のコールバック処理
// ツイートをする
NativeCodeLauncher::postTwitter("ツイート内容", "http://blog.tadamatuapps.com/",path.c_str());
});
}
ツイートの実装は別記事に委ねるが、これでcocos2d-xでゲーム中などのスクリーンショットをとって、ツイートができるようになった。
参考:
iOSアプリにソーシャル機能を組み込む【実践編】
LINE,Twitterに投稿する機能をつける(Android)
ちなみに、スクリーンショットのタイミングと、ツイートのタイミングをずらす場合は、次のように実装すればよい。
// 取得したテクスチャを保存する
texture->saveToFile("screenshot.png", Image::Format::PNG);
// パスを取得し、ツイートをする
std::string path = FileUtils::getInstance()->getWritablePath().append("screenshot.png");
NativeCodeLauncher::postTwitter("ツイート内容", "http://blog.tadamatuapps.com/", path.c_str());
パシャという音もあればよいかもしれませんね。
お試しあれ。