展会信息港展会大全

Cocos2d-X开发中国象棋《三》开始场景的实现,cocos2d-x《三》
来源:互联网   发布日期:2015-09-28 15:23:28   浏览:1211次  

导读: Cocos2d-X开发中国象棋《三》开始场景的实现,cocos2d-x《三》 在前面两篇博客中介绍了中国象棋的功能和工程文件,在这篇博客中将介绍中国象棋的开始场景的实现 在写代码前先理清一下实...

Cocos2d-X开发中国象棋《三》开始场景的实现,cocos2d-x《三》

在前面两篇博客中介绍了中国象棋的功能和工程文件,在这篇博客中将介绍中国象棋的开始场景的实现

在写代码前先理清一下实现开始场景的思路:

1、打开游戏后进入开始场景,场景上显示一个红色的帅和黑色的将,并且两个棋子在同一条直线上(两个棋子的y坐标相同)

2、当玩家单击红色的帅后,红色的帅一边向右移动一边按照顺时针方向旋转,黑色的将一边向左移动一边按照逆时针方向旋转

3、当玩家单击黑色的将后,红色的帅一边向右移动一边按照顺时针方向旋转,黑色的将一边向左移动一边按照逆时针方向旋转

4、当两个棋子相撞后进入游戏场景(两个棋子的距离小于或者等于棋子的直径)

5、如果玩家单击的是红色的帅,玩家的棋子为红色

6、如果玩家单击的是黑色的将,玩家的棋子为黑色

SceneStart.h和SceneStart.cpp用于实现开始场景

实现代码:

SceneStart.h中的代码

#ifndef_SceneStart_H_

#define _SceneStart_H_

#include "cocos2d.h"

USING_NS_CC;

class SceneStart : public CCLayer

{

public:

static CCScene* scene();

bool init();

CREATE_FUNC(SceneStart);

bool ccTouchBegan(CCTouch* pTouch, CCEvent* pEvent);

void ccTouchEnded(CCTouch* pTouch, CCEvent* pEvent);

CCSprite* _red;

CCSprite* _black;

void update(float);

//标记是否选中了红色棋子

bool _selected;

};

#endif

SceneStart.cpp中的代码

#include "SceneStart.h"

#include "SceneGame.h"

CCScene* SceneStart::scene()

{

CCScene* scene = CCScene::create();

SceneStart* layer = SceneStart::create();

scene->addChild(layer);

return scene;

}

bool SceneStart::init()

{

CCLayer::init();

CCSize winSize = CCDirector::sharedDirector()->getWinSize();

CCSprite* bkr = CCSprite::create("bkg2.png");

addChild(bkr);

CCSprite* bkb = CCSprite::create("bkg1.png");

addChild(bkb);

bkr->setPosition(ccp(winSize.width / 2 - 100, winSize.height / 2));

bkb->setPosition(ccp(winSize.width / 2 + 100, winSize.height / 2));

_red = bkr;

_black = bkb;

//注册触摸事件

setTouchEnabled(true);

setTouchMode(kCCTouchesOneByOne);

return true;

}

bool SceneStart::ccTouchBegan(CCTouch* pTouch, CCEvent* pEvent)

{

return true;

}

void SceneStart::ccTouchEnded(CCTouch* pTouch, CCEvent* pEvent)

{

CCSize winSize = CCDirector::sharedDirector()->getWinSize();

//获得触摸点的位置(坐标)

CCPoint ptClick = pTouch->getLocation();

//用于判断是否点中了棋子

bool bClickStone = false;

//当点中红色的棋子的时候(触摸点的位置在红色的棋子所在的范围内)

if(_red->boundingBox().containsPoint(ptClick))

{

//点中了红色的棋子

this->_selected = true;

//点中了棋子

bClickStone = true;

}

//当点中黑色棋子的时候(触摸点的位置在黑色棋子所在的范围内)

else if(_black->boundingBox().containsPoint(ptClick))

{

//没点中红色棋子

this->_selected = false;

//点中了棋子

bClickStone = true;

}

//当点中了棋子的时候

if(bClickStone)

{

//移动棋子

CCMoveTo* moveTo1 = CCMoveTo::create(1, ccp(winSize.width / 2, winSize.height / 2));

CCMoveTo* moveTo2 = CCMoveTo::create(1, ccp(winSize.width / 2, winSize.height / 2));

//旋转棋子

CCRotateBy* rotate1 =CCRotateBy::create(1, 360);

CCRotateBy* rotate2 =CCRotateBy::create(1, -360);

//旋转和移动同时执行

CCSpawn* spawn1 = CCSpawn::create(moveTo1, rotate1, NULL);

CCSpawn* spawn2 = CCSpawn::create(moveTo2, rotate2, NULL);

//执行行动作

_red->runAction(spawn1);

_black->runAction(spawn2);

//启动定时器

scheduleUpdate();

}

}

void SceneStart::update(float)

{

//获取两个棋子的x坐标

float x1 = _red->getPositionX();

float x2 = _black->getPositionX();

//当红色的棋子和黑色的棋子碰撞后

//两个棋子的距离小于或等于棋子的直径

//getContentSize().width获得棋子的宽度(棋子的直径)

if(abs(x1 - x2) <= _red->getContentSize().width)

{

//进入游戏

CCDirector::sharedDirector()->replaceScene(SceneGame::scene(this->_selected));

}

}

执行结果:

赞助本站

人工智能实验室

相关热词: android开发 应用开发

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港