Commit Graph

125 Commits

Author SHA1 Message Date
James Chen ecad5ea3ce Fixed `ExtensionTest/CocoStudioComponentsTest` crash after applying PR #6011. 2014-03-28 14:55:15 +08:00
James Chen e87f6991cf User object has to be released before others, since userObject may have a weak reference of this node.
It may invoke `node->stopAllAction();` while `_actionManager` is null if the next line is after `CC_SAFE_RELEASE_NULL(_actionManager)`.
2014-03-28 14:09:51 +08:00
Darragh Coy 8ee90389b4 Review feedback: Wrap the debug verification in additional macros which are disabled by default.
Require the user to enable 'CC_NODE_DEBUG_VERIFY_EVENT_LISTENERS' in ccConfig.h in order to enable the debug checks in debug builds.
2014-03-27 12:29:28 -07:00
Darragh Coy 0ee1095e37 Fix crashes in event dispatch other related safety checks/fixes
1: Add a fix to prevent events from being sent to scene nodes which are destroyed. Previously when a node was being destroyed it would try to unregister any event listeners it would have. This process would fail however in the case where event dispatching was already underway because we can't modify the listeners list while we are iterating through it. This is a pretty common occurrence since we often tear down & switch scenes in response to button clicks etc. Fix the problem by nulling out the slot for the listener we are removing in this case, so that it's node no longer receives any events after it is destroyed. The event dispatching code will cleanup this unused/nulled slot once the event processing loop has terminated.

2: When removing an event listener in cocos2d::EventDispatcher, ensure immediately it gets removed from the node priority map and dirty nodes set in order to ensure we don't inadvertently access any dangling pointers to nodes.

3: Add debug checks to ensure nodes have no associated event listeners after they are destroyed. This check will catch the problem fixed by (1) if it is still present.

4: Add some extra debug sanity checks in the event dispatcher to ensure nodes are not added to the lists twice and that they are being properly removed from the lists under certain conditions.

5: In cocos2d::Node's destructor NULL out members after releasing them in case they somehow happen to be accessed during the destructor. Move the release of the event dispatcher to the very end, since we need to check against it in debug.
2014-03-26 13:12:44 -07:00
James Chen 45b98e7dc0 issue #4541: s_globalOrderOfArrival is an static variable of Node class. 2014-03-25 15:07:11 +08:00
heliclei c26b103b23 remove node name related features from v3.0 2014-03-13 10:45:02 +08:00
heliclei 2a3cb0847e refactor api name 2014-03-12 18:10:45 +08:00
heliclei a907580d0a use lambda callback 2014-03-12 14:15:45 +08:00
heliclei 80417f0f35 correct naming convetion 2014-03-11 15:27:28 +08:00
heliclei 8db680b9ee add EnumChildNodesByName, walk node tree with callback 2014-03-11 13:58:43 +08:00
James Chen 63292b5ba6 Merge pull request #5544 from heliclei/node-string-tag
CCNode:Add String tag, to support runtime manipulation
2014-03-10 18:26:51 +08:00
James Chen eca0bce1be Merge pull request #5633 from huangml/patch-1
closed #4319: Node::removeAllChildrenWithCleanup() does not remove PhysicsBody.
2014-03-10 10:55:54 +08:00
James Chen 7aec578b35 closed #3290: The order of onEnter works correctly on JSB and LuaBindings. 2014-03-08 22:07:55 +08:00
黄梦龙 8b737d8aab Update CCNode.cpp
removeAllChildrenWithCleanup() not remove PhysicsBody
2014-03-08 17:42:35 +08:00
Huabing.Xu 9fc6177570 fix bug for outdated transform status 2014-03-07 10:03:34 +08:00
heliclei 55080d713b refactor string tag to name 2014-03-05 17:03:25 +08:00
heliclei cbec0f9a15 CCNode:Add String tag, to support runtime manipulation 2014-03-05 00:15:01 +08:00
Ricardo Quesada 8bdfce9bbe Merge branch 'develop' into visit_draw_improved 2014-03-03 17:31:29 -08:00
Ricardo Quesada 81f5254e15 Removes setNormalizedPosition
This funciton is useful, but the code is buggy.
In should check the parents' position instead of Director::Size()
Let's do it correctly, and then re-add this function
2014-03-03 16:08:30 -08:00
Ricardo Quesada c386f88e32 Merge branch 'develop' into visit_draw_improved
Conflicts:
	CHANGELOG
	cocos/gui/UILayout.h
2014-03-03 11:27:42 -08:00
minggo 594342ea3e Merge pull request #5505 from dumganhar/event-dispatcher-refactor
[EventDispatcher] Adds 'pauseEventListenersForTarget', 'resumeEventListenersForTarget' and 'removeEventListenersForTarget'.
2014-03-03 17:56:57 +08:00
minggo be0ac5dc1c Merge pull request #5493 from boyu0/bug4150_physics_position_rotation
closed #4150: fix physics position and rotation bug.
2014-03-03 14:57:33 +08:00
James Chen 757425c54b issue #4165: Scheduler::scheduleCallback -> Scheduler::schedule, Scheduler::scheduleSelector -> Scheduler::schedule. APIs are clear for c++ developers now. 2014-03-03 11:00:30 +08:00
boyu0 c99b0a0b6a closed #4150: Fix missing "!" 2014-03-03 01:48:56 +08:00
James Chen f3949e078b [EventDispatcher] Adds 'pauseEventListenersForTarget', 'resumeEventListenersForTarget' and 'removeEventListenersForTarget'. 2014-03-02 17:41:18 +08:00
Ricardo Quesada cdc19eea1c Nodes: setAdditionalTransform() receives a pointer
and not a const reference.
If the pointer is `NULL`, then it won't use the additionalTransform
2014-03-01 08:26:54 -08:00
James Chen e6d2c4ec73 Refactors Scheduler class.
* Timer is an abstract class now.
* Adds three new timers ( `TimerTargetSelector`, `TimerTargetCallback`, `TimerScriptHandler`) which are inherited from Timer.
* Adds new API 'scheduleCallback` / `unscheduleCallbackForKey', and callback's target could be any classes since we're using `void*` to identify target.
* `Scheduler::scheduleCallback` use `std::function`, therefore, it supports passing `lambda`, `member_function` and `global_function`.
* The old selector API is still kept since it's very useful when schedule callback is a member function, it doesn't need a `key` to identify the callback function. (+1 squashed commit)
* Adds relevant test cases.
2014-03-01 14:09:09 +08:00
Ricardo Quesada 3588041409 removed empty spaces 2014-02-28 16:39:04 -08:00
Ricardo Quesada d78304599d Cache working OK.
Performance increased in 20% for static objects.
2014-02-28 16:10:48 -08:00
Ricardo Quesada 13b60c8759 Applies Wu Hao's patch for 2.5D 2014-02-28 13:48:00 -08:00
Ricardo Quesada 6920bec6ef transform object returns the MV
code cleaner.
the kmGL code is altogether
2014-02-28 11:20:53 -08:00
boyu0 a934d29c57 issue #4150: Correct body position with the node has a parent. Add set/getPosition/Rotation method. 2014-02-28 15:31:25 +08:00
Ricardo Quesada eb66ddd931 visit and draw improved.
`visit()` and `draw()` are improved.
they both receive:
 - `Renderer`
 - `kmMat4` for transformation
 - `bool` whether or not the transform changed from the previous frame

Although `draw` and `visit` are not using the 3 new parameters,
they will start using it in the coming days (or weeks, or months).

Those parameters are needed for:
 - `Renderer` shouldn't be a singleton. There should be one renderer per Director. There could be more than one renderer
 - we should get rid of `kmGLXXX` functions since nodoby knows what is happening. the `kmMat4` is for that.
 - whenever possible, we should try to optimize the multiplications. the `dirty` flag is for that.

We need those changes, so, it is better to change the API now, and not right after v3.0-final is released.
2014-02-27 21:43:54 -08:00
boyu0 8c536589df Merge branch 'develop' of https://github.com/cocos2d/cocos2d-x into iss4118_physical_performance_improve 2014-02-27 20:04:04 +08:00
minggo 8d47d5f16a return immediately when no changing 2014-02-27 15:12:57 +08:00
boyu0 b63641c7a5 issue #4118: delete physicsSetPosition/Rotation method and add physics position/rotation tag. 2014-02-27 14:36:09 +08:00
boyu0 f400c1ac68 issue #4118: edit contact test and fix node setPhysicsBody bug 2014-02-27 13:35:37 +08:00
boyu0 4df1e104f3 issue #4118: improve performance. 2014-02-26 19:56:52 +08:00
James Chen 5e315273f9 Merge pull request #5467 from boyu0/bug4144_node_setphysicsbody
closed #4144: fix bug: Can not use Node::setPhysicsBody to reset a physics body.
2014-02-26 11:43:19 +08:00
boyu0 912dad7a71 closed #4144: fix bug: Node::setPhysicsBody doesn't work at the second time. 2014-02-26 10:53:41 +08:00
boyu0 a4cc0edb4a issue #4118: refactor physics update 2014-02-24 16:17:42 +08:00
Ricardo Quesada fe1160cd8c changes in API to support 3D 2014-02-22 19:16:42 -08:00
James Chen 0d8846d876 closed #4097: Adds a macro to disable inserting script binding relevant codes. 2014-02-20 16:40:46 +08:00
James Chen 5e6130c92c issue #4058: Get rid of Object ,rename it to Ref. 2014-02-20 10:53:49 +08:00
Ricardo Quesada 7a8707cb08 Merge branch 'develop' into local_z_Order_fixes
Conflicts:
	cocos/2d/CCNode.cpp
	cocos/2d/CCNode.h
2014-01-21 10:10:50 -08:00
Ricardo Quesada f1444a26a1 Improves documentation with local z order 2014-01-21 09:26:58 -08:00
James Chen 0f9c3fa59c closed #3789: EventDispatcher supports sorting listeners by global Z and local Z order. And adds relevant test case. 2014-01-21 10:23:05 +08:00
James Chen 9f793f8a9b Warning fixes: 1) getZOrder —> getLocalZOrder. 2) long —> int 2014-01-20 15:03:30 +08:00
Ricardo Quesada 5fcbf42356 GlobalZOrder is used for render priority...
...and not vertexZ

Node::setGlobalZOrder() is used to change that.

Node::setZOrder() -> Node::setLocalZOrder();
2014-01-18 11:38:06 -08:00
Ricardo Quesada f2c3d2f3ae Camera and Node fixes
OrbitCamera: added getters (public). Setters moved from `protected` to `public
	: Improved API. Instead of using "out" parameters for getters, it returns a `kmVec3`
 	: Setters receives `kmVec3` as well. Old API is still supported

Node: `setAdditionalTransform` doesn't get `dirty` on the next frame.
	Instead, once the additional transform is set, in order to remove it the user needs to pass
	the identity matrix
2014-01-13 12:52:07 -08:00