Cocos2d-X开发中国象棋《三》開始场景的实现
在前面两节(第一节。第二节)中介绍了中国象棋的功能和project文件。在这篇博客中将介绍中国象棋的開始场景的实现
在写代码前先理清一下实现開始场景的思路:
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));
}
}
运行结果:
Cocos2d-X开发中国象棋《三》開始场景的实现的更多相关文章
- Cocos2d-X开发中国象棋《二》project文件概述
我在上一篇博客中介绍了象棋的功能.在接下来的博客中将向大家介绍使用Cocos2d-X怎样一步一步开发中国象棋 开发工具: Cocos2d-X2.2.3 VS2012 项目的文件夹: Classes:存 ...
- cocos2dx游戏开发学习笔记2-从helloworld開始
一.新建project 具体安装和新建project的方法在cocos2dx文件夹下的README.md文件里已经有具体说明,这里仅仅做简介. 1.上官网下载cocos2dx-3.0的源代码.http ...
- Cocos2d-X开发中国象棋《八》走棋
在上一节中实现了新局,至此中国象棋的准备工作差点儿相同都完毕了,在接下来的博客中将介绍玩家的走棋和一些游戏属性的设置,今天先介绍走棋和走棋规则 老规则,先看走棋的效果图,然后依据效果图一步一步分析游戏 ...
- Python开发中国象棋实战(附源码)
Pygame 做的中国象棋,一直以来喜欢下象棋,写了 python 就拿来做一个试试,水平有限,电脑走法水平低,需要在下次版本中更新电脑走法,希望源码能帮助大家更好的学习 python.总共分 ...
- Cocos2d-X开发中国象棋《九》走棋规则
在上一节中实现了走棋,这篇博客将介绍中国象棋中的走棋规则 在写博客前先可能一下象棋的走棋规则: 1)将 将的坐标关系:横坐标相等,纵坐标相减绝对值等于1,或者纵坐标相等,横坐标相减绝对值等于1 将的特 ...
- Cocos2d-X开发中国象棋《四》设计游戏场景
设计完開始界面后就要设计游戏界面了 为了理清设计思路先看一张游戏界面效果图 游戏界面设计思路: 1.在窗体上放一张桌子 2.在桌子上放一个棋盘 3.在棋盘右边加入新局button,暂不实现详细的功能 ...
- XMPP开发之从零開始
对于server的搭建和设置.我在这里就不再多说了.有好多前辈已经帮大家攻克了.能够參考下这篇博客 XMPPserver配置 我依照这个博客配置好了,server后,然后在网上參照代码写了一个小的de ...
- 从零開始开发Android版2048 (四) 分数、重置、结束
这一篇的内容主要是在上一篇的基础上,增加分数计算(包含当前分数和最高分数).游戏结束的推断以及游戏界面的重置这三个部分的功能. 一.分数的计算和保存 首先,2048这个游戏的分数包含 ...
- iOS runtime探究(三): 从runtime開始理解OC的属性property
你要知道的runtime都在这里 转载请注明出处 http://blog.csdn.net/u014205968/article/details/67639303 本文主要解说runtime相关知识, ...
随机推荐
- 大数据~说说ZooKeeper
一些概念 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase和Kafka重要组件.它是一个为分布式应用提供一致性 ...
- SQL基本操作——DROP撤销索引、表以及数据库
DROP撤销索引.表以及数据库 --DROP INDEX 命令删除表格中的索引 DROP INDEX table_name.index_name --DROP TABLE 语句删除表(表的结构.属性以 ...
- SPA设计架构
1.SPA是采用单页应用(Single Page Application)的方式来开发 2.SPA的框架有如Augular.js.Vue.js等.
- python 分割文件、组合文件
import glob big_file = open('index.sql', 'rb') bak_file = 'index_bak' i = 1 while True: chunk = big_ ...
- Linux Shell ssh登录脚本
Linux 登陆服务器敲命令太多,某时候确实不便,所以就用shell写了一个 我的blog地址: http://www.cnblogs.com/caoguo 一.说明 支持秘密和密钥两种格式 用户名 ...
- HDU_Reward_拓扑排序
Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- gitlab 第1次提交代码到1个新仓库
1.如果是本地刚刚搭建好git环境,第一次和gitlab服务器产生连接 参照这个文 https://www.cnblogs.com/kaerxifa/p/10929098.html 2.已经和gitl ...
- 9 Java 堆排序
堆是具有以下性质的完全二叉树,每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆:或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆.如下图: 同时,我们对堆中的结点按层进行编号,将这种逻 ...
- IE浏览器new Date()带参返回NaN解决方法
var start = '2016-01-01 12:12:12'; var date = new Date(start); 得到的时间为NaN: 解决方法: 1.自定义方法 自定义一个NewDate ...
- Day10 图形用户界面和游戏开发
基于tkinter模块的GUI GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,在此也无需进行赘述.Python默认的GUI开发模块是tkinter(在Python 3 ...