cocos2dx常用功能-Cocos2dx开发常用控件详解(共11部分)

Cocos2dx游戏开发 第三阶段:常用功能1

1---Cocos2dx常用功能-Cocos2dx开发常用控件详解
    //是否显示左下角的帧频数据
    director->setDisplayStats( true );
    // set FPS. the default value is 1.0/60 if you don't call this
    //显示每一帧的时间间隔
    director->setAnimationInterval(1.0 / 10);
2.Cocos2d-x 之Sprite    视频很重点
    Sprite *s = Sprite :: create ( "img.jpg" );
    s->
setAnchorPoint ( Point ( 0 , 0 ));
    s->
setPosition ( Point ( 100 , 200 ));
    addChild(s);
3.Cocos2d-x之Director、Scene、Layer
    Scene *scene = Scene :: create ();
   
Layer *layer = Layer :: create ();
    scene->
addChild (layer);
   
   
Sprite *s = Sprite :: create ( "HelloWorld.png" );
    s->
setAnchorPoint ( Point ( 0 , 0 ));
    layer->addChild(s);
4.Cocos2d-x之Log
跨平台日志输出API
  log( "Hello Cocos2dx %d" , 200 );
5.Cocos2d-x之MessageBox
    MessageBox ( " 消息内容 " , " 消息标题 " );
attach  /ə'tætʃ/ 附加;附属      detach /dɪ'tætʃ/ vt. 分离;派遣
6.Cocos2d-x之LabelTTF:
    Size size = Director :: getInstance ()-> getVisibleSize ();
   
LabelTTF *label = LabelTTF :: create ();
    label->
setString ( "Hello jikexueyuan" );
    label->
setFontSize ( 36 );
    label->
setPosition (size. width / 2 , size. height / 2 );
    addChild(label);
  
7.Cocos2d-x之TextFieldTTF
    Size visibleSize = Director :: getInstance ()-> getVisibleSize ();
   
   
TextFieldTTF *tf = TextFieldTTF :: textFieldWithPlaceHolder ( " 在这里输入 " , " 宋体 " , 20 );
   
    tf->
setPosition (visibleSize. width / 2 , visibleSize. height / 2 );
   
   
addChild (tf);
   
   
   
auto listener = EventListenerTouchOneByOne :: create ();
    listener->
onTouchBegan = [tf]( Touch *t, Event *event){
       
       
if (tf-> getBoundingBox (). containsPoint (t-> getLocation ())) {
            tf->
attachWithIME ();
        }
else {
            tf->
detachWithIME ();
        }
       
       
return false ;
    };
   
    Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, tf);

8.Cocos2d-x之创建自定义类
Ball.h中
#include <iostream>
#include
"cocos2d.h"

using namespace cocos2d;


class Ball: public Sprite {
   
public :
   
virtual bool init();
   
    CREATE_FUNC(Ball);
   
//    static Ball* create(){
//       
//        Ball * b = new Ball();
//        b->init();
//        b->autorelease();
//       
//        return b;
//    }
};

Ball.cpp中
#include "Ball.h"
bool Ball::init(){    
    initWithFile( "ball.png" );    
    return true ;
}


HelloWorldScene.cpp 中:
auto b = Ball::create() ;
   b->setPosition(200,200);
    addChild(b);

9.Cocos2d-x之内存管理机制
    Object *obj = new Object();
    obj->autorelease();
    log("count:%d",obj->getReferenceCount());
    永远不要使用delete  obj

10.Cocos2d-x之Menu
闭包是C++11的特性
    auto menu = Menu::create(MenuItemImage::create( "normal.png" , "selected.png" , [](Object* obj){
        log("menu item touched);//松开手后执行
    }), NULL );
    addChild(menu);

11.Cocos2d-x之TableView
有一个列表项它曾经呈现出来了,在往上面拖动的时候 处于不呈现的状态(拖出去界面)这个列表项会被回收
放到TableView的一个队列里面,如果有新的列表项需要呈现出来,会先从回收的队列里面去查找有没有已经回收过的,有回收过得会直接使用,没有回收过得需要重新创建

HelloWorldScene.h:
#include "cocos2d.h"
#include <cocos-ext.h>

USING_NS_CC_EXT;
USING_NS_CC;

class HelloWorld : public cocos2d::Layer,TableViewDataSource,TableViewDelegate
{
public :
   
// there's no 'id' in cpp, so we recommend returning the class instance pointer
   
static cocos2d::Scene* createScene();

   
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
   
virtual bool init(); 
   
   
// a selector callback
   
void menuCloseCallback(Object* pSender);
   
   
// implement the "static create()" method manually
    CREATE_FUNC(HelloWorld);
   
   
public :
   
/**
     * cell height for a given table.
     *
     *
@param table table to hold the instances of Class
     *
@return cell size
     */

   
virtual Size cellSizeForTable(TableView *table);
   
/**
     * a cell instance at a given index
     *
     *
@param idx index to search for a cell
     *
@return cell found at idx
     */

   
virtual TableViewCell* tableCellAtIndex(TableView *table, ssize_t idx);
   
/**
     * Returns number of cells in a given table view.
     *
     *
@return number of cells
     */

   
virtual ssize_t numberOfCellsInTableView(TableView *table);
   
public :
   
   
/**
     * Delegate to respond touch event
     *
     *
@param table table contains the given cell
     *
@param cell  cell that is touched
     * @js NA
     * @lua NA
     */

   
virtual void tableCellTouched(TableView* table, TableViewCell* cell);
   
   
/**
     * @js NA
     * @lua NA
     */

   
virtual void scrollViewDidScroll(ScrollView* view){};
   
/**
     * @js NA
     * @lua NA
     */

   
virtual void scrollViewDidZoom(ScrollView* view){};
};

#endif // __HELLOWORLD_SCENE_H__



HelloWorldScene.cpp:
#include "HelloWorldScene.h"

USING_NS_CC;

Scene* HelloWorld::createScene()
{
   
// 'scene' is an autorelease object
   
auto scene = Scene::create();
   
   
// 'layer' is an autorelease object
   
auto layer = HelloWorld::create();

   
// add layer as a child to scene
    scene->addChild(layer);

   
// return the scene
   
return scene;
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
   
//
   
// 1. super init first
   
if ( !Layer::init() )
    {
       
return false ;
    }
   
    TableView * tv = TableView::create(
this , Size( 300 , 300 ));
    tv->setAnchorPoint(Point(
0 , 0 ));
    tv->setPosition(
100 , 0 );
    tv->setDelegate(
this );
    addChild(tv);
   
   
   
return true ;
}


Size HelloWorld::cellSizeForTable(cocos2d::extension::TableView *table){
   
return Size( 300 , 50 );
}

TableViewCell* HelloWorld::tableCellAtIndex(cocos2d::extension::TableView *table, ssize_t idx){
   
    TableViewCell *cell = table->dequeueCell();
    LabelTTF *label;
   
   
if (cell== NULL ) {
        cell = TableViewCell::create();
        label = LabelTTF::create();
        label->setTag(
2 );
        label->setFontSize(
30 );
        label->setAnchorPoint(Point(
0 , 0 ));
        cell->addChild(label);
    }
else {
        label = (LabelTTF*)cell->getChildByTag(
2 );
    }
   
    label->setString(StringUtils::format(
"Label %ld" ,idx));
   
   
return cell;
}


ssize_t HelloWorld::numberOfCellsInTableView(cocos2d::extension::TableView *table){
   
return 100 ;
}


void HelloWorld::tableCellTouched(cocos2d::extension::TableView *table, cocos2d::extension::TableViewCell *cell){
   
    LabelTTF *label = (LabelTTF*)cell->getChildByTag(
2 );
    log(
"%s" ,label->getString().c_str());
   
}


void HelloWorld::menuCloseCallback(Object* pSender)
{
    Director::getInstance()->end();

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    exit( 0 );
#endif
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值