Skip to content

Commit 70afd56

Browse files
committed
Issue cocos2d#2416: Add TMXLayer RenderCmd
1 parent 2a3aa3d commit 70afd56

File tree

4 files changed

+107
-73
lines changed

4 files changed

+107
-73
lines changed

cocos2d/core/renderer/RendererCanvas.js

-70
Original file line numberDiff line numberDiff line change
@@ -143,76 +143,6 @@ cc.rendererCanvas = {
143143
if (cc._renderType === cc._RENDER_TYPE_CANVAS)
144144
cc.renderer = cc.rendererCanvas;
145145

146-
//--- TMXLayer's render command ---
147-
cc.TMXLayerRenderCmdCanvas = function (tmxLayer) {
148-
this._node = tmxLayer;
149-
this._childrenRenderCmds = [];
150-
};
151-
152-
cc.TMXLayerRenderCmdCanvas.prototype._copyRendererCmds = function (rendererCmds) {
153-
if (!rendererCmds)
154-
return;
155-
156-
var locCacheCmds = this._childrenRenderCmds;
157-
locCacheCmds.length = 0;
158-
for (var i = 0, len = rendererCmds.length; i < len; i++) {
159-
locCacheCmds[i] = rendererCmds[i];
160-
}
161-
};
162-
163-
cc.TMXLayerRenderCmdCanvas.prototype._renderingChildToCache = function (scaleX, scaleY) {
164-
var locNode = this._node;
165-
if (locNode._cacheDirty) {
166-
var locCacheCmds = this._childrenRenderCmds, locCacheContext = locNode._cacheContext, locCanvas = locNode._cacheCanvas;
167-
168-
locCacheContext.save();
169-
locCacheContext.clearRect(0, 0, locCanvas.width, -locCanvas.height);
170-
//reset the cache context
171-
var t = cc.affineTransformInvert(locNode._transformWorld);
172-
locCacheContext.transform(t.a, t.c, t.b, t.d, t.tx * scaleX, -t.ty * scaleY);
173-
174-
for (var i = 0, len = locCacheCmds.length; i < len; i++) {
175-
locCacheCmds[i].rendering(locCacheContext, scaleX, scaleY);
176-
if (locCacheCmds[i]._node)
177-
locCacheCmds[i]._node._cacheDirty = false;
178-
}
179-
locCacheContext.restore();
180-
locNode._cacheDirty = false;
181-
}
182-
};
183-
184-
cc.TMXLayerRenderCmdCanvas.prototype.rendering = function (ctx, scaleX, scaleY) {
185-
var node = this._node;
186-
var alpha = node._displayedOpacity / 255;
187-
if (alpha <= 0)
188-
return;
189-
190-
this._renderingChildToCache(scaleX, scaleY);
191-
var context = ctx || cc._renderContext;
192-
context.globalAlpha = alpha;
193-
var posX = 0 | ( -node._anchorPointInPoints.x), posY = 0 | ( -node._anchorPointInPoints.y);
194-
var locCacheCanvas = node._cacheCanvas, t = node._transformWorld;
195-
//direct draw image by canvas drawImage
196-
if (locCacheCanvas && locCacheCanvas.width !== 0 && locCacheCanvas.height !== 0) {
197-
context.save();
198-
//transform
199-
context.transform(t.a, t.c, t.b, t.d, t.tx * scaleX, -t.ty * scaleY);
200-
201-
var locCanvasHeight = locCacheCanvas.height * scaleY;
202-
203-
if (node.layerOrientation === cc.TMX_ORIENTATION_HEX) {
204-
var halfTileSize = node._mapTileSize.height * 0.5 * scaleY;
205-
context.drawImage(locCacheCanvas, 0, 0, locCacheCanvas.width, locCacheCanvas.height,
206-
posX, -(posY + locCanvasHeight) + halfTileSize, locCacheCanvas.width * scaleX, locCanvasHeight);
207-
} else {
208-
context.drawImage(locCacheCanvas, 0, 0, locCacheCanvas.width, locCacheCanvas.height,
209-
posX, -(posY + locCanvasHeight), locCacheCanvas.width * scaleX, locCanvasHeight);
210-
}
211-
context.restore();
212-
}
213-
cc.g_NumberOfDraws++;
214-
};
215-
216146
cc.CustomRenderCmdCanvas = function (node, func) {
217147
this._node = node;
218148
this._callback = func;

cocos2d/tilemap/CCTMXLayer.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,9 @@ cc.TMXLayer = cc.SpriteBatchNode.extend(/** @lends cc.TMXLayer# */{
119119

120120
_initRendererCmd: function(){
121121
if(cc._renderType === cc._RENDER_TYPE_CANVAS)
122-
this._rendererCmd = new cc.TMXLayerRenderCmdCanvas(this);
122+
this._rendererCmd = new cc.TMXLayer.CanvasRenderCmd(this);
123123
else
124-
this._rendererCmd = new cc.TMXLayerRenderCmdWebGL(this);
124+
this._rendererCmd = new cc.TMXLayer.WebGLRenderCmd(this);
125125
},
126126

127127
/**
+103
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
/****************************************************************************
2+
Copyright (c) 2013-2014 Chukong Technologies Inc.
3+
4+
http://www.cocos2d-x.org
5+
6+
Permission is hereby granted, free of charge, to any person obtaining a copy
7+
of this software and associated documentation files (the "Software"), to deal
8+
in the Software without restriction, including without limitation the rights
9+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
copies of the Software, and to permit persons to whom the Software is
11+
furnished to do so, subject to the following conditions:
12+
13+
The above copyright notice and this permission notice shall be included in
14+
all copies or substantial portions of the Software.
15+
16+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22+
THE SOFTWARE.
23+
****************************************************************************/
24+
25+
cc.TMXLayer.CanvasRenderCmd = function(renderableObject){
26+
cc.Node.CanvasRenderCmd.call(this, renderableObject);
27+
this._childrenRenderCmds = [];
28+
this._needDraw = true;
29+
};
30+
31+
cc.TMXLayer.CanvasRenderCmd.prototype = Object.create(cc.Node.CanvasRenderCmd.prototype);
32+
cc.TMXLayer.CanvasRenderCmd.prototype.constructor = cc.TMXLayer.CanvasRenderCmd;
33+
34+
cc.TMXLayer.CanvasRenderCmd.prototype._copyRendererCmds = function (rendererCmds) {
35+
if (!rendererCmds)
36+
return;
37+
38+
var locCacheCmds = this._childrenRenderCmds;
39+
locCacheCmds.length = 0;
40+
for (var i = 0, len = rendererCmds.length; i < len; i++) {
41+
locCacheCmds[i] = rendererCmds[i];
42+
}
43+
};
44+
45+
cc.TMXLayer.CanvasRenderCmd.prototype._renderingChildToCache = function (scaleX, scaleY) {
46+
var locNode = this._node;
47+
if (locNode._cacheDirty) {
48+
var locCacheCmds = this._childrenRenderCmds, locCacheContext = locNode._cacheContext, locCanvas = locNode._cacheCanvas;
49+
50+
locCacheContext.save();
51+
locCacheContext.clearRect(0, 0, locCanvas.width, -locCanvas.height);
52+
//reset the cache context
53+
var t = cc.affineTransformInvert(locNode._transformWorld);
54+
locCacheContext.transform(t.a, t.c, t.b, t.d, t.tx * scaleX, -t.ty * scaleY);
55+
56+
for (var i = 0, len = locCacheCmds.length; i < len; i++) {
57+
locCacheCmds[i].rendering(locCacheContext, scaleX, scaleY);
58+
if (locCacheCmds[i]._node)
59+
locCacheCmds[i]._node._cacheDirty = false;
60+
}
61+
locCacheContext.restore();
62+
locNode._cacheDirty = false;
63+
}
64+
};
65+
66+
cc.TMXLayer.CanvasRenderCmd.prototype.rendering = function (ctx, scaleX, scaleY) {
67+
var node = this._node;
68+
var alpha = node._displayedOpacity / 255;
69+
if (alpha <= 0)
70+
return;
71+
72+
this._renderingChildToCache(scaleX, scaleY);
73+
var context = ctx || cc._renderContext;
74+
context.globalAlpha = alpha;
75+
var posX = 0 | ( -node._anchorPointInPoints.x), posY = 0 | ( -node._anchorPointInPoints.y);
76+
var locCacheCanvas = node._cacheCanvas, t = node._transformWorld;
77+
//direct draw image by canvas drawImage
78+
if (locCacheCanvas && locCacheCanvas.width !== 0 && locCacheCanvas.height !== 0) {
79+
context.save();
80+
//transform
81+
context.transform(t.a, t.c, t.b, t.d, t.tx * scaleX, -t.ty * scaleY);
82+
83+
var locCanvasHeight = locCacheCanvas.height * scaleY;
84+
85+
if (node.layerOrientation === cc.TMX_ORIENTATION_HEX) {
86+
var halfTileSize = node._mapTileSize.height * 0.5 * scaleY;
87+
context.drawImage(locCacheCanvas, 0, 0, locCacheCanvas.width, locCacheCanvas.height,
88+
posX, -(posY + locCanvasHeight) + halfTileSize, locCacheCanvas.width * scaleX, locCanvasHeight);
89+
} else {
90+
context.drawImage(locCacheCanvas, 0, 0, locCacheCanvas.width, locCacheCanvas.height,
91+
posX, -(posY + locCanvasHeight), locCacheCanvas.width * scaleX, locCanvasHeight);
92+
}
93+
context.restore();
94+
}
95+
cc.g_NumberOfDraws++;
96+
};
97+
98+
cc.TMXLayer.WebGLRenderCmd = function(renderableObject){
99+
cc.Node.WebGLRenderCmd.call(this, renderableObject);
100+
this._needDraw = true;
101+
};
102+
103+
cc.TMXLayer.WebGLRenderCmd.prototype.rendering = cc.SpriteBatchNodeRenderCmdWebGL.prototype.rendering;

moduleConfig.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,8 @@
226226
"cocos2d/tilemap/CCTMXTiledMap.js",
227227
"cocos2d/tilemap/CCTMXXMLParser.js",
228228
"cocos2d/tilemap/CCTMXObjectGroup.js",
229-
"cocos2d/tilemap/CCTMXLayer.js"
229+
"cocos2d/tilemap/CCTMXLayer.js",
230+
"cocos2d/tilemap/CCTMXLayerRenderCmd.js"
230231
],
231232
"transitions" : [
232233
"core", "actions", "render-texture", "progress-timer",

0 commit comments

Comments
 (0)