Cocos2d-x tutorial (29)-3. x version mask layer achieves fishing talents scroll digital dial, cocos2d-x-3.x
Welcome to Cocos2d-x chat group: 193411763
Reprinted please indicate the original source: http://blog.csdn.net/u012945598/article/details/38340845
Source code: http://download.csdn.net/detail/u012945598/7704725
Previously in the eighth tutorial explains the mask layer to achieve fishing Daren scroll digital dial (article link: http://blog.csdn.net/u012945598/article/details/17049419), then many friends asked 3. in Version x, the mask is invalid, so the method cannot be used. In fact, the method can still be used, but the code needs to be slightly modified. I will re-paste the IMPLEMENTATION OF THE ScrollLabel class here. You can replace the copy directly.
ScrollLabel. h file
# Include <iostream>
# Include "cocos2d. h"
# Include <stdlib. h>
USING_NS_CC;
Class ScrollLabel: publicNode {
Public:
Virtual bool init ();
CREATE_FUNC (ScrollLabel );
Std: vector <Label *> labels;/* array used to save the label */
Node * visibleNode;/* Create a Node and add the label to the Node to facilitate moving */
Void setNumber (int var, bool up);/* sets the method to which the number is scrolled. The var parameter is the number to be scrolled */
/* ----- Modify content -------*/
/* Reload the visit method in CCNode. The draw method is not used here */
Virtual void visit (Renderer * renderer, constkmMat4 & parentTransform, bool parentTransformUpdated );
Void onAfterVisitScissor ();
Void onBeforeVisitScissor ();
Public:
CustomCommand _ beforevisit1_scissor;
CustomCommand _ aftervisit1_scissor;
};
ScrollLabel. cpp File
# Include "ScrollLabel. h"
Bool ScrollLabel: init (){
VisibleNode = Node: create ();
This-> addChild (visibleNode );
/* Create ten tags, numbers 0-9 */
For (int I = 0; I <10; I ++ ){
Char str [2];
Str [0] = '0' + I;
Str [1] = '\ 0 ';
Label * single = Label: create ();
Single-> setSystemFontSize (20.0 );
Single-> setColor (Color3B (, 0); // you can specify the font color of a tag.
Single-> setTag (I );
Single-> setString (str );
Single-> setAnchorPoint (Point (0, 0); // set the anchorpoint to 0, 0 to facilitate coordinate setting
Single-> setPosition (Point (0, 20 * I ));
VisibleNode-> addChild (single );
Labels. push_back (single); // store tags in the array
}
Return true;
}
Void ScrollLabel: setNumber (int var, bool up = true ){
This-> stopAllActions ();
/* Obtain the coordinates of the label to be moved */
Label * label = labels [var];
Point moveToPosition = Point (visibleNode-> getPositionX (),-(label-> getPositionY ()));
/* Create an action and move it to the location of the label */
MoveTo * moveAction = MoveTo: create (5, moveToPosition );
VisibleNode-> runAction (moveAction );
}
Void ScrollLabel: visit (Renderer * renderer, constkmMat4 & parentTransform, bool parentTransformUpdated ){
_ Beforevisit1_scissor. init (_ globalZOrder );
_ Beforevisit1_scissor. func = CC_CALLBACK_0 (ScrollLabel: onBeforeVisitScissor, this );
Renderer-> addCommand (& _ beforevisit?scissor );
Node: visit (renderer, parentTransform, parentTransformUpdated );
_ Aftervisit1_scissor. init (_ globalZOrder );
_ Aftervisit1_scissor. func = CC_CALLBACK_0 (ScrollLabel: onAfterVisitScissor, this );
Renderer-> addCommand (& _ aftervisit?scissor );
}
Void ScrollLabel: onBeforeVisitScissor ()
{
Point pos = Point (0, 0 );
Pos = visibleNode-> getParent ()-> convertToWorldSpace (pos );
Rect clippingRect = Rect (pos. x, pos. y, 20, 20 );
GlEnable (GL_SCISSOR_TEST );
Auto glview = Director: getInstance ()-> getOpenGLView ();
Glview-> setScissorInPoints (clippingRect. origin. x, clippingRect. origin. y, clippingRect. size. width, clippingRect. size. height );
}
Void ScrollLabel: onAfterVisitScissor ()
{
GlDisable (GL_SCISSOR_TEST );
}
The usage is the same as before:
ScrollLabel * m_scroll = ScrollLabel: create ();
M_scroll-> setPosition (Point (568,320 ));
This-> addChild (m_scroll );
M_scroll-> setNumber (5, true );
The last one is attached: