初学试试看cocos2dx的TestCPP框架(10)---TouchesTest

来源:互联网 发布:快牙zapya软件 编辑:程序博客网 时间:2024/04/29 17:06

一、PongScene继承自TestScene,这个类里面有3个方法,但是当前代码来看,MainMenuCallback这个虚继续类有点多余,因为他仅调用一下父类的MainmenuCallback。

在构造里面,添加一个PontLayer层到场景中,这里注意一下。

    PongLayer *pongLayer = new PongLayer();//PongLayer::create();    addChild(pongLayer);    pongLayer->release();

在cocos2dx里面,继承自object的类,new出来的数据,可以用release释放,这个层已经加进了场景里面,可以释放掉了。

runThisTest函数里面,仅是调用CCDirector::sharedDirector()->releaseScene(this);替换一下场景。

二、PongLayer继承自CCLayer,这个类有3个私有成员,Ball * m_ball; CCArray * m_paddles; CCPoint m_ballStringVelocity;分别记录着球,板的位置,开始的速度。

构造函数里面先利用CCTextureCache::sharedTextureCache()->addImage(s_Ball);读取到CCTexture2D里面,然后创建,设置位置,球的话设置一下速度setVolecity。

最后调用一下回调函数,schedule(schedule_selector(PongLayer::doStep));

doStep里面,每一帧调用小球调用move移动小球一点,然后用CCARRAY_FOREACH循环调用collideWithPaddle测试是否碰撞,假如球运动到屏幕上面或者下面,调用

resetAndScoreBallForPlayer(xxx)重新开始。然后调用draw重画界面。

resetAndScoreBallForPlayer里面重新设置了球的初速度,位置。速度的-的。

三、Paddle继承了CCTargetedTouchDelegate,因为Paddle要响应触摸,所以在OnEnter里面注册一下

void Paddle::onEnter(){    CCDirector* pDirector = CCDirector::sharedDirector();    pDirector->getTouchDispatcher()->addTargetedDelegate(this, 0, true);    CCSprite::onEnter();}

退出的时候再取消掉。

void Paddle::onExit(){    CCDirector* pDirector = CCDirector::sharedDirector();    pDirector->getTouchDispatcher()->removeDelegate(this);    CCSprite::onExit();}    

这个类通过initWithTexture来构造,CCSprite::initWithTexture来构造,这个需要手动释放,如果是调用create之类的,会自动调用autorelease来释放内存。同时设置了当前状态为没有拖动状态,kPaddleStateUngrabbed。

同时重载了这三个函数来处理响应触摸动作。

    virtual bool ccTouchBegan(CCTouch* touch, CCEvent* event);    virtual void ccTouchMoved(CCTouch* touch, CCEvent* event);    virtual void ccTouchEnded(CCTouch* touch, CCEvent* event);

他们利用CCLayer继续自CCNode的converTouchToNodeSpaceAR(touch)获取当前接触的点,然后用CCRect的containsPoint来判断是否点击在

这个Paddle上面。鼠标点击拖动的时候会调用Moved。

四、Ball类记录着速度m_velocity。这个实质是一个点,数据越大,移动就越快,他设置位置的方式是

this->setPosition( ccpAdd(getPosition(), ccpMult(m_velocity, delta)) );

如果碰到2边的话, m_velocity.x *= -1;一下就转换为相反的方向。

碰撞检查里面的collideWithPaddle仅是一些逻辑,花点时间就能看懂了。




原创粉丝点击