mirror of https://github.com/axmolengine/axmol.git
Fix Scheduler API inconsistency
This commit is contained in:
parent
558ac3cfa0
commit
9eeda122e9
|
@ -2124,30 +2124,39 @@ bool js_CCScheduler_schedule(JSContext *cx, uint32_t argc, jsval *vp)
|
||||||
js_proxy_t *proxy = jsb_get_js_proxy(obj);
|
js_proxy_t *proxy = jsb_get_js_proxy(obj);
|
||||||
cocos2d::Scheduler *sched = (cocos2d::Scheduler *)(proxy ? proxy->ptr : NULL);
|
cocos2d::Scheduler *sched = (cocos2d::Scheduler *)(proxy ? proxy->ptr : NULL);
|
||||||
|
|
||||||
JS::RootedObject tmpObj(cx, args.get(1).toObjectOrNull());
|
|
||||||
|
|
||||||
std::function<void (float)> callback;
|
std::function<void (float)> callback;
|
||||||
|
JS::RootedObject targetObj(cx);
|
||||||
do {
|
do {
|
||||||
if(JS_TypeOfValue(cx, args.get(0)) == JSTYPE_FUNCTION)
|
JS::RootedValue callbackVal(cx);
|
||||||
|
if (JS_TypeOfValue(cx, args.get(0)) == JSTYPE_FUNCTION)
|
||||||
{
|
{
|
||||||
std::shared_ptr<JSFunctionWrapper> func(new JSFunctionWrapper(cx, tmpObj, args.get(0)));
|
callbackVal.set(args.get(0));
|
||||||
auto lambda = [=](float larg0) -> void {
|
targetObj.set(args.get(1).toObjectOrNull());
|
||||||
JSB_AUTOCOMPARTMENT_WITH_GLOBAL_OBJCET
|
}
|
||||||
jsval largv[1];
|
else if (JS_TypeOfValue(cx, args.get(1)) == JSTYPE_FUNCTION)
|
||||||
largv[0] = DOUBLE_TO_JSVAL(larg0);
|
{
|
||||||
JS::RootedValue rval(cx);
|
targetObj.set(args.get(0).toObjectOrNull());
|
||||||
bool invokeOk = func->invoke(1, &largv[0], &rval);
|
callbackVal.set(args.get(1));
|
||||||
if (!invokeOk && JS_IsExceptionPending(cx)) {
|
|
||||||
JS_ReportPendingException(cx);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
callback = lambda;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ok = false;
|
ok = false;
|
||||||
callback = nullptr;
|
callback = nullptr;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<JSFunctionWrapper> func(new JSFunctionWrapper(cx, targetObj, callbackVal));
|
||||||
|
auto lambda = [=](float larg0) -> void {
|
||||||
|
JSB_AUTOCOMPARTMENT_WITH_GLOBAL_OBJCET
|
||||||
|
jsval largv[1];
|
||||||
|
largv[0] = DOUBLE_TO_JSVAL(larg0);
|
||||||
|
JS::RootedValue rval(cx);
|
||||||
|
bool invokeOk = func->invoke(1, &largv[0], &rval);
|
||||||
|
if (!invokeOk && JS_IsExceptionPending(cx)) {
|
||||||
|
JS_ReportPendingException(cx);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
callback = lambda;
|
||||||
} while(0);
|
} while(0);
|
||||||
|
|
||||||
double interval = 0;
|
double interval = 0;
|
||||||
|
@ -2171,21 +2180,25 @@ bool js_CCScheduler_schedule(JSContext *cx, uint32_t argc, jsval *vp)
|
||||||
ok &= JS::ToNumber(cx, JS::RootedValue(cx, args.get(4)), &delay );
|
ok &= JS::ToNumber(cx, JS::RootedValue(cx, args.get(4)), &delay );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// paused
|
||||||
|
//
|
||||||
bool paused = false;
|
bool paused = false;
|
||||||
|
|
||||||
if( argc >= 6 ) {
|
if( argc >= 6 ) {
|
||||||
paused = JS::ToBoolean(JS::RootedValue(cx, args.get(5)));
|
paused = JS::ToBoolean(JS::RootedValue(cx, args.get(5)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// key
|
||||||
|
//
|
||||||
std::string key;
|
std::string key;
|
||||||
|
if ( argc >= 7 ) {
|
||||||
if( argc >= 7 ) {
|
jsval_to_std_string(cx, args.get(6), &key);
|
||||||
ok &= jsval_to_std_string(cx, args.get(6), &key);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JSB_PRECONDITION2(ok, cx, false, "Error processing arguments");
|
JSB_PRECONDITION2(ok, cx, false, "Error processing arguments");
|
||||||
|
|
||||||
sched->schedule(callback, tmpObj, interval, repeat, delay, paused, key);
|
sched->schedule(callback, targetObj, interval, repeat, delay, paused, key);
|
||||||
|
|
||||||
args.rval().setUndefined();
|
args.rval().setUndefined();
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -2655,7 +2655,39 @@ _p.setBoundingHeight = _p.setHeight;
|
||||||
//
|
//
|
||||||
_p = cc.Scheduler.prototype;
|
_p = cc.Scheduler.prototype;
|
||||||
_p.unscheduleUpdateForTarget = _p.unscheduleUpdate;
|
_p.unscheduleUpdateForTarget = _p.unscheduleUpdate;
|
||||||
_p.unscheduleAllCallbacksForTarget = _p.unscheduleAllForTarget;
|
_p.unscheduleAllCallbacksForTarget = function (target) {
|
||||||
|
this.unschedule(target.__instanceId + "", target);
|
||||||
|
};
|
||||||
|
_p._schedule = _p.schedule;
|
||||||
|
_p.schedule = function (callback, target, interval, repeat, delay, paused, key) {
|
||||||
|
var isSelector = false;
|
||||||
|
if(typeof callback !== "function"){
|
||||||
|
var selector = callback;
|
||||||
|
isSelector = true;
|
||||||
|
}
|
||||||
|
if(isSelector === false){
|
||||||
|
//callback, target, interval, repeat, delay, paused, key
|
||||||
|
//callback, target, interval, paused, key
|
||||||
|
if(arguments.length === 4 || arguments.length === 5) {
|
||||||
|
key = delay;
|
||||||
|
paused = repeat;
|
||||||
|
delay = 0;
|
||||||
|
repeat = cc.REPEAT_FOREVER;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
//selector, target, interval, repeat, delay, paused
|
||||||
|
//selector, target, interval, paused
|
||||||
|
if(arguments.length === 4){
|
||||||
|
paused = repeat;
|
||||||
|
repeat = cc.REPEAT_FOREVER;
|
||||||
|
delay = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (key === undefined) {
|
||||||
|
key = target.__instanceId + "";
|
||||||
|
}
|
||||||
|
this._schedule(callback, target, interval, repeat, delay, paused, key);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
cc._NodeGrid = cc.NodeGrid;
|
cc._NodeGrid = cc.NodeGrid;
|
||||||
|
|
|
@ -271,8 +271,8 @@ cc.Class.extend = function (prop) {
|
||||||
|
|
||||||
// The dummy class constructor
|
// The dummy class constructor
|
||||||
function Class() {
|
function Class() {
|
||||||
// All construction is actually done in the init method
|
|
||||||
if (!initializing) {
|
if (!initializing) {
|
||||||
|
this.__instanceId = ClassManager.getNewInstanceId();
|
||||||
if (!this.ctor) {
|
if (!this.ctor) {
|
||||||
if (this.__nativeObj)
|
if (this.__nativeObj)
|
||||||
cc.log("No ctor function found! Please check whether `classes_need_extend` section in `ini` file like which in `tools/tojs/cocos2dx.ini`");
|
cc.log("No ctor function found! Please check whether `classes_need_extend` section in `ini` file like which in `tools/tojs/cocos2dx.ini`");
|
||||||
|
|
|
@ -499,7 +499,7 @@ var ScheduleUsingSchedulerTest = SchedulerTestLayer.extend({
|
||||||
var repeat = cc.REPEAT_FOREVER; // how many repeats. cc.REPEAT_FOREVER means forever
|
var repeat = cc.REPEAT_FOREVER; // how many repeats. cc.REPEAT_FOREVER means forever
|
||||||
var delay = 2; // start after 2 seconds;
|
var delay = 2; // start after 2 seconds;
|
||||||
paused = false; // not paused. queue it now.
|
paused = false; // not paused. queue it now.
|
||||||
scheduler.scheduleCallbackForTarget(this, this.onSchedUpdate, interval, repeat, delay, paused);
|
scheduler.schedule(this.onSchedUpdate, this, interval, repeat, delay, paused);
|
||||||
//----end9----
|
//----end9----
|
||||||
},
|
},
|
||||||
title:function () {
|
title:function () {
|
||||||
|
@ -522,6 +522,7 @@ var ScheduleUsingSchedulerTest = SchedulerTestLayer.extend({
|
||||||
this._accum += dt;
|
this._accum += dt;
|
||||||
if( this._accum > 3 ) {
|
if( this._accum > 3 ) {
|
||||||
var scheduler = director.getScheduler();
|
var scheduler = director.getScheduler();
|
||||||
|
scheduler.unscheduleUpdate(this);
|
||||||
scheduler.unscheduleAllCallbacksForTarget(this);
|
scheduler.unscheduleAllCallbacksForTarget(this);
|
||||||
}
|
}
|
||||||
cc.log("onSchedUpdate accum: " + this._accum);
|
cc.log("onSchedUpdate accum: " + this._accum);
|
||||||
|
|
2
web
2
web
|
@ -1 +1 @@
|
||||||
Subproject commit 133441be8873e63685da04cb7c8f19ad082b9992
|
Subproject commit bcf78ece2a2743d0f1bfb37ffced23a0caba14a5
|
Loading…
Reference in New Issue