cococos 2 d-x jsb/html 5にタッチエージェントを設定する方法
2691 ワード
公式の説明とは異なり、js bindingの多くのapiとch 5版は異なる.違うものに出会ったら、ソースコードを見て探すように努力しなければなりません.
主に以下のファイルです.
はい、くだらないことは言わないで、次はテーマを話します.
ch 5バージョンではタッチエージェントをjsbバージョンのapiとは異なるように設定し,ここではターゲットエージェントを例に挙げる.
ch 5バージョンの設定方法
これで大丈夫だ,何も言うことはない
jsbバージョンの設定方法
上の文をjsbバージョンに置くとすぐに間違いを報告して、これはfunctionではないことを教えてあげます.そこで私たちは怒ってソースを見ました.
addTargetedDelegateを検索してcocos 2 d_specifics.cppで見つけた
どこで呼び出されたか見てみましょう
次にjs_が登録されている場所を見てみましょうcocos2dx_JSTouchDelegate_registerTargettedDelegate
はい、見つかりました.
だから私たちが使う方法はccです.registerTargettedDelegate()です.パラメータについては、上記のjs_を参照してください.cocos2dx_JSTouchDelegate_registerTargettedDelegateメソッド
最後の結論はjsbで
統合版
ch 5とjsbで同様に有効であるために,現在のプラットフォームをコードで判断する.
さて、本稿では、標準エージェントとログアウトエージェントも同様の処理方法で、自分で見ることができます.
主に以下のファイルです.
cocos2d_specifics.cpp cocos2d_specifics.hpp ScriptingCore.cpp ScriptingCore.h
はい、くだらないことは言わないで、次はテーマを話します.
ch 5バージョンではタッチエージェントをjsbバージョンのapiとは異なるように設定し,ここではターゲットエージェントを例に挙げる.
ch 5バージョンの設定方法
cc.Director.getInstance().getTouchDispatcher().addTargetedDelegate(node, priority, true);
これで大丈夫だ,何も言うことはない
jsbバージョンの設定方法
上の文をjsbバージョンに置くとすぐに間違いを報告して、これはfunctionではないことを教えてあげます.そこで私たちは怒ってソースを見ました.
addTargetedDelegateを検索してcocos 2 d_specifics.cppで見つけた
void JSTouchDelegate::registerTargettedDelegate(int priority, bool swallowsTouches) { CCDirector* pDirector = CCDirector::sharedDirector(); pDirector->getTouchDispatcher()->addTargetedDelegate(this, priority, swallowsTouches); }
どこで呼び出されたか見てみましょう
JSBool js_cocos2dx_JSTouchDelegate_registerTargettedDelegate(JSContextcx, uint32_t argc, jsval vp) { if (argc >= 1) { jsval argv = JS_ARGV(cx, vp); JSObject jsobj = NULL; JSTouchDelegate *touch = new JSTouchDelegate(); touch->autorelease(); touch->registerTargettedDelegate((argc >= 1 ? JSVAL_TO_INT(argv[0]) : 0), (argc >= 2 ? JSVAL_TO_BOOLEAN(argv[1]) : true)); jsobj = (argc == 3 ? JSVAL_TO_OBJECT(argv[2]) : JSVAL_TO_OBJECT(JSVAL_VOID)); touch->setJSObject(jsobj); JSTouchDelegate::setDelegateForJSObject(jsobj, touch); return JS_TRUE; } JS_ReportError(cx, “wrong number of arguments: %d, was expecting >=1”, argc); return JS_FALSE; }
次にjs_が登録されている場所を見てみましょうcocos2dx_JSTouchDelegate_registerTargettedDelegate
はい、見つかりました.
JS_DefineFunction(cx, ns, "registerTargettedDelegate", js_cocos2dx_JSTouchDelegate_registerTargettedDelegate, 1, JSPROP_READONLY | JSPROP_PERMANENT);
だから私たちが使う方法はccです.registerTargettedDelegate()です.パラメータについては、上記のjs_を参照してください.cocos2dx_JSTouchDelegate_registerTargettedDelegateメソッド
最後の結論はjsbで
cc.Director.getInstance().getTouchDispatcher().addTargetedDelegate(node, priority, true);
統合版
ch 5とjsbで同様に有効であるために,現在のプラットフォームをコードで判断する.
var addTargetedDelegate = function (node, priority){
if ("opengl" in sys.capabilities && "browser" != sys.platform){
cc.registerTargettedDelegate(priority, true, node);
}
else {
cc.Director.getInstance().getTouchDispatcher().addTargetedDelegate(node, priority, true);
}
};
さて、本稿では、標準エージェントとログアウトエージェントも同様の処理方法で、自分で見ることができます.