<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>株式会社アプリ工房 &#187; ScoreCenter</title>
	<atom:link href="https://www.app-studio.jp/tag/scorecenter/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.app-studio.jp</link>
	<description>Webサービス開発/Mobile(iOS,Android)開発ならお任せください</description>
	<lastBuildDate>Mon, 05 Jan 2026 09:54:33 +0000</lastBuildDate>
	<language>ja</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>cocos2d-xにScoreCenterを入れてみる</title>
		<link>https://www.app-studio.jp/2013/11/19/70/</link>
		<comments>https://www.app-studio.jp/2013/11/19/70/#comments</comments>
		<pubDate>Tue, 19 Nov 2013 11:38:25 +0000</pubDate>
		<dc:creator><![CDATA[katsuji.otsuka]]></dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[開発]]></category>
		<category><![CDATA[cocos2d-x]]></category>
		<category><![CDATA[ScoreCenter]]></category>

		<guid isPermaLink="false">http://www.app-studio.jp/?p=70</guid>
		<description><![CDATA[cocos2d-xにScoreCenterを入れた時のメモ。 使い方的にはc++のクラスからjniで呼び出す形で実装した。 javaのメソッドに関しては面倒だったんで全部staticにした。 手順など 基本的にはSDKに ...]]></description>
				<content:encoded><![CDATA[<p>cocos2d-xに<a title="ScoreCenter" href="http://scorecenter.jp/" target="_blank">ScoreCenter</a>を入れた時のメモ。</p>
<p>使い方的にはc++のクラスからjniで呼び出す形で実装した。<br />
javaのメソッドに関しては面倒だったんで全部staticにした。</p>
<h5>手順など</h5>
<p>基本的にはSDKにDocumentが添付されているので、それに従っていけばOKでした。</p>
<p>1. proj.android/AndroidManifest.xmlを設定<br />
2. proj.android/libs/にSDKのjarファイルを置く<br />
3. c++側のコードを書く。(以下サンプル)</p>
<pre class="brush: cpp; title: ScoreCenter.h; notranslate">
#include &quot;cocos2d.h&quot;

USING_NS_CC;

class ScoreCenter : public CCObject {
public:
	static bool isAvailable();
	static void login();
	static void postScore(const char* key, const char* score);
	static void showRanking(const char* key);
};

</pre>
<pre class="brush: cpp; title: ScoreCenter.cpp; notranslate">
#include &quot;cocos2d.h&quot;

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
USING_NS_CC;

#include &quot;ScoreCenter.h&quot;
#include &lt;jni.h&gt;
#include &quot;jni/JniHelper.h&quot;

#define CLASS_NAME &quot;hoge/huga/SC&quot;

bool ScoreCenter::isAvailable() {
    JniMethodInfo t;
    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME,
										&quot;isAvailable&quot;, &quot;()Z&quot;)) {
        jboolean result = t.env-&gt;CallStaticBooleanMethod(t.classID, t.methodID);
        if (result == JNI_TRUE) {
            return true;
            
        } else {
            return false;
        }
    }
    return false;
}

void ScoreCenter::login() {
    if (!isAvailable()) {
        return;
    }
    
    JniMethodInfo t;
    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME,
										&quot;login&quot;, &quot;()V&quot;)) {
        t.env-&gt;CallStaticVoidMethod(t.classID, t.methodID);
        t.env-&gt;DeleteLocalRef(t.classID);
    }
}

void ScoreCenter::postScore(const char* key, const char* score) {
    if (!isAvailable()) {
        return;
    }

    JniMethodInfo t;
    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME,
                                       &quot;postScore&quot;, &quot;(Ljava/lang/String;Ljava/lang/String;)V&quot;)) {
        jstring jkey   = t.env-&gt;NewStringUTF(key);
        jstring jscore = t.env-&gt;NewStringUTF(score);
        t.env-&gt;CallStaticVoidMethod(t.classID, t.methodID, jkey, jscore);
        t.env-&gt;DeleteLocalRef(jkey);
        t.env-&gt;DeleteLocalRef(jscore);
        t.env-&gt;DeleteLocalRef(t.classID);
    }
}

void ScoreCenter::showRanking(const char* key) {
    if (!isAvailable()) {
        return;
    }

    JniMethodInfo t;
    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME,
                                       &quot;showRanking&quot;, &quot;(Ljava/lang/String;)V&quot;)) {
        jstring jkey = t.env-&gt;NewStringUTF(key);
        t.env-&gt;CallStaticVoidMethod(t.classID, t.methodID, jkey);
        t.env-&gt;DeleteLocalRef(jkey);
        t.env-&gt;DeleteLocalRef(t.classID);
    }
}

#endif
</pre>
<p>4. java側のコードを書く。(以下サンプル)</p>
<pre class="brush: java; title: hoge/huga/SC.java; notranslate">
package hoge.huga;

import android.app.Activity;
import java.lang.String;
import android.content.Context;
import org.cocos2dx.lib.Cocos2dxActivity;
import **********ScoreCenter; (※ここはDocument読んで対応してください)

public class SC {
    private static ScoreCenter instance = null;

    public static boolean isAvailable() {
        return (android.os.Build.VERSION.SDK_INT &gt;= 7); 
    }   

    private static void init() {
        if (SC.instance == null) {
            final Context context = Cocos2dxActivity.getContext();
            Activity activity = (Activity)context;
            activity.runOnUiThread(new Runnable() {
                public void run() {
                    SC.instance = ScoreCenter.getInstance();
                    SC.instance.initialize(context.getApplicationContext());
                    SC.instance.hello();
                }   
            }); 
        }   
    }   
    
    public static void login() {
        SC.init();
    }   
    
    public static void postScore(String key, String score) {
        SC.instance.postScore(key, score);
    }   

    public static void showRanking(final String key) {
        Activity activity = (Activity)Cocos2dxActivity.getContext();
        activity.runOnUiThread(new Runnable() {
            public void run() {
                SC.instance.show(key);
            }   
        }); 
    }   
}
</pre>
<p>こんなかんじ。</p>
<p>ちょっとハマった点として、ScoreCenterのinitialize()呼んだ時か、hello()を呼び出した時にログイン可否チェックが入ってログイン画面が表示されるのかなと思ってたんですが、<br />
show()を呼び出した後にログインして貰わないといけないらしい。<br />
まぁ、ログインする前にpostScoreしても送信NGとなって、ローカルに保存されていて、後からログインした時に送られるようなので問題ないと言えば問題ないですが、出来ればログインチェックのメソッドがあるといいな。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.app-studio.jp/2013/11/19/70/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- ZenCache is NOT caching this page, because `$_SERVER['REQUEST_URI']` indicates this is a `/feed`; and the configuration of this site says not to cache XML-based feeds. -->