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相关知识, ...
随机推荐
- [转]如何借助 TLS/SSL 确保套接字连接的安全(使用 C#/VB/C++ 和 XAML 的 Windows 应用商店应用)
本文转自:http://msdn.microsoft.com/zh-cn/library/windows/apps/jj150597.aspx 本主题将展示在使用 StreamSocket 功能时,如 ...
- Scala-基础-变量与常量
import junit.framework.TestCase import org.junit.Test //变量 //var 代表变量 //val 代表常量 //关键字 class,extends ...
- 前端-Node.js思维导图笔记
看不清的朋友右键保存或者新窗口打开哦!喜欢我可以关注我,还有更多前端思维导图笔记
- Android开发中常用的ListView列表的优化方式ViewHolder
在Android开发中难免会遇到大量的数据加载到ListView中进行显示, 然后其中最重要的数据传递桥梁Adapter适配器是常用的,随着市场的需 求变化ListView'条目中的内容是越来越多这就 ...
- [Android]异常6-TextView setText延迟显示
背景:Thread和Handler显示数据到界面 解决办法有: 解决一>界面使用了ListView.GridView等,把高度和宽度调整为固定值或者match_parent 解决二>某处U ...
- 13、scala模式匹配
1.模式匹配的基础语法 2.对类型进行模式匹配 3.对Array和List的元素进行模式匹配 4.case class与模式匹配 5.Option与模式匹配 1.模式匹配的基础语法 Scala提供了m ...
- 170925_1 Python socket 创建TCP的服务器端和客户端
[Python版本]3.6 [遇到的问题] 客户端和服务器端都遇到:TypeError: a bytes-like object is required, not 'str' [解决方案] 参考:ht ...
- .mm c++ oc 混编
When you create a static library you don't link in the dependent libraries. As a result, when you re ...
- PHP 数据库连接 (Mysql Mysqli PDO)
1.PHP与Mysql扩展(本扩展自 PHP 5.5.0 起已废弃,并在将来会被移除),PHP原生的方式去连接数据库,是面向过程的 <?php $mysql_conf = array( 'hos ...
- 【转】IDEA 中tomcat图片储存和访问虚拟路径
1.idea 修改Tomcat的虚拟路径(第一种方法)修改配置文件有很多种,但是一直不成功;后来想还是idea的配置原因,这里tomcat虚拟路径只说一种; 修改Tomcat安装路径下server.x ...