cocos2dx 3.x 拼图小游戏
.h
#define IMAGE_MAX 2 //图片的个数..
//图片结构体 属性
struct IMAGE_DATA
{
cocos2d::Sprite *m_pImage;
bool m_bOpen;
int m_iId;
};
bool onTouchBegan(cocos2d::Touch *pTouch, cocos2d::Event *pEvent);
void onTouchMoved(cocos2d::Touch *pTouch, cocos2d::Event *pEvent);
void onTouchEnded(cocos2d::Touch *pTouch, cocos2d::Event *pEvent);
//返回精灵的碰撞矩形
cocos2d::Rect GetBackRect( cocos2d::Sprite *spr );
//添加图片
void AddImage(std::string name, cocos2d::Vec2 pos, int id);
//添加背景
void AddBack(std::string name, cocos2d::Vec2 pos, int id);
//图片数组
std::vector< IMAGE_DATA > m_vSpr;
//背景数组
std::vector< IMAGE_DATA > m_vBack;
//通关判断
bool m_bWin;
//图片显示最上层
int m_iOrder;
//定时器
void update(float dt);
.cpp
//注册触摸
EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan,this);
listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved,this);
listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded,this);
listener->setSwallowTouches(true);
Size size = Director::getInstance()->getWinSize();
m_bWin = false;
m_iOrder = ;
//图片素材
std::string image_name[] = {"HelloWorld.png", "white.png"};
//图片随机出现位置
srand((unsigned ));//随机种子
std::vector< Vec2 > image_pos;
; i < IMAGE_MAX; i++)
{
);
);
image_pos.push_back(Vec2( x + size.width / , y + size.height / ));
log("x == %f, y == %f, x1 === %f, y1 === %f", image_pos[i].x, image_pos[i].y, x, y);
}
//需要拼接的背景以及位置
std::string back_name[] = {"red.png", "blue.png"};
Vec2 back_pos[] = {Vec2(size.width * .75f, size.height * .25f), Vec2(size.width * .75f, size.height * .75f)};
; i < IMAGE_MAX; i++)
{
//添加
AddImage(image_name[i], image_pos[i], i + );
AddBack(back_name[i], back_pos[i], i + );
}
//注册精灵监听
; i < m_vSpr.size(); i++)
{
)
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, m_vSpr[i].m_pImage);
else
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener->clone(), m_vSpr[i].m_pImage);
}
//开启定时器
scheduleUpdate();
void HelloWorld::AddImage(std::string name, Vec2 pos, int id){
//新建图片
IMAGE_DATA image;
image.m_pImage = Sprite::create(name.c_str());
image.m_pImage->setPosition(pos);
addChild(image.m_pImage);
image.m_bOpen = true;
image.m_iId = id;
m_vSpr.push_back(image);
}
void HelloWorld::AddBack(std::string name, Vec2 pos, int id){
//新建背景图片
IMAGE_DATA image;
image.m_pImage = Sprite::create(name.c_str());
image.m_pImage->setPosition(pos);
addChild(image.m_pImage, -);
image.m_iId = id;
m_vBack.push_back(image);
}
bool HelloWorld::onTouchBegan(cocos2d::Touch *pTouch, cocos2d::Event *pEvent){
//获取当前点击的精灵
Sprite* target = static_cast<Sprite*>(pEvent->getCurrentTarget());
if (target->getBoundingBox().containsPoint(pTouch->getLocation()))
{
; i< m_vSpr.size(); i++)
{
//点击的精灵触摸关闭 返回false
if(target == m_vSpr[i].m_pImage && !m_vSpr[i].m_bOpen)
return false;
}
m_iOrder++;
//当前点击的精灵放到最上层
target->setLocalZOrder(m_iOrder);
return true;
}
return false;
}
void HelloWorld::onTouchMoved(cocos2d::Touch *pTouch, cocos2d::Event *pEvent){
Sprite* target = static_cast<Sprite*>(pEvent->getCurrentTarget());
; i < m_vSpr.size(); i++)
{
//点击的精灵触摸关闭 退出
if(target == m_vSpr[i].m_pImage && !m_vSpr[i].m_bOpen)
return;
; j < m_vBack.size(); j++)
{
//判断图片是否碰撞到背景 ID是否相等 触摸是否关闭
if (GetBackRect( m_vBack[j].m_pImage ).containsPoint(m_vSpr[i].m_pImage->getPosition()) && m_vBack[j].m_iId == m_vSpr[i].m_iId && m_vSpr[i].m_bOpen)
{
//碰撞到 把图片移动到背景上 触摸关闭
m_vSpr[i].m_pImage->setPosition(m_vBack[j].m_pImage->getPosition());
m_vSpr[i].m_bOpen = false;
return;
}
}
}
//触摸的图片移动
target->setPosition(target->getPosition() + pTouch->getDelta());
}
void HelloWorld::update(float dt){
if (!m_bWin)
{
//全部触摸关闭..代表通关
m_bWin = true;
; i < m_vSpr.size(); i++)
{
if(m_vSpr[i].m_bOpen == true){
m_bWin = false;
}
}
}
if (m_bWin)
{
//过关
log("cheng gong");
unscheduleUpdate();
}
}
Rect HelloWorld::GetBackRect( Sprite *spr ){
//返回精灵的碰撞矩形 Vec2 origin = spr->getPosition();
Size size = spr->getContentSize();
return Rect( origin.x - size.width * .1f, origin.y - size.height * .1f, size.width * .1f, size.height * .1f );
}
cocos2dx 3.x 拼图小游戏的更多相关文章
- JavaScript版拼图小游戏
慕课网上准备开个新的jQuery教程,花了3天空闲时间写了一个Javascript版的拼图小游戏,作为新教程配套的分析案例 拼图游戏网上有不少的实现案例了,但是此源码是我自己的实现,所以不做太多的比较 ...
- 使用NGUI实现拖拽功能(拼图小游戏)
上一次用UGUI实现了拼图小游戏,这次,我们来用NGUI来实现 实现原理 NGUI中提供了拖拽的基类UIDragDropItem,所以我们要做的就是在要拖拽的图片上加一个继承于该类的脚本,并实现其中的 ...
- jQuery实现拼图小游戏
小熊维尼拼图 2017-07-23 ...
- jQuery拼图小游戏
jQuery拼图小游戏 最后样式 核心代码部分 <script type="text/javascript" > $(function () { $("td& ...
- 在HTML页面中有jQuery实现实现拼图小游戏
1.用jQuery实现拼图小游戏 2.首先获得td的点击事件.再进行交换位置 3.下面这种仅供参考 4.下面这些是HTMl标签 当这个世界变得越来越复杂的时候,内心最需保持一份简单一份纯真:
- 仿苹果电脑任务栏菜单&&拼图小游戏&&模拟表单控件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- swift 拼图小游戏
依据这位朋友的拼图小游戏改编 http://tangchaolizi.blog.51cto.com/3126463/1571616 改编主要地方是: 原本着我仁兄的代码时支持拖动小图块来移动的,我參照 ...
- 教你用Python自制拼图小游戏,一起来制作吧
摘要: 本文主要为大家详细介绍了python实现拼图小游戏,文中还有示例代码介绍,感兴趣的小伙伴们可以参考一下. 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyt ...
- 打造专属自己的html5拼图小游戏
最近公司刚好有个活动是要做一版 html5的拼图小游戏,于是自己心血来潮,自己先实现了一把,也算是尝尝鲜了.下面就把大体的思路介绍一下,希望大家都可以做出一款属于自己的拼图小游戏,必须是更炫酷,更好玩 ...
随机推荐
- 第七篇:Logistic回归分类算法原理分析与代码实现
前言 本文将介绍机器学习分类算法中的Logistic回归分类算法并给出伪代码,Python代码实现. (说明:从本文开始,将接触到最优化算法相关的学习.旨在将这些最优化的算法用于训练出一个非线性的函数 ...
- 《C++ Primer Plus》第9章 内存模型和名称空间 学习笔记
C++鼓励程序员在开发程序时使用多个文件.一种有效的组织策略是,使用头文件来定义用户类型,为操纵用户类型的函数提供函数原型,并将函数定义放在一个独立的源代码文件中.头文件和源代码文件一起定义和实现了用 ...
- 《转》python学习(8)元组
转自 http://www.cnblogs.com/BeginMan/p/3156235.html 一.元组特性 1.类似列表,但不可变类型,正因如此,它可以做一个字典的key2.当处理一组对象时,这 ...
- 关于Windows下的批处理如何模拟Sleep
好好的批处理,居然没有正式的Sleep可供调用.有时候,确实感到很无趣. 1. 方法1: ping 1.1.1.1来模拟 好不容易从stackoverflow上找到一个答案(称之为答案,是因为它被人标 ...
- LeetCode——Integer to Roman
Description: Given an integer, convert it to a roman numeral. Input is guaranteed to be within the r ...
- thinkphp --- 写入日志
在开发过程中,对于一些参数,不好直接输入或者打印调试,特别是在微信开发过程中,这个时候,通过日志来查看信息就显得格外重要. 下面是在TP3.2.3框架中,写入日志的方法: public functio ...
- Java 泛型 <? super T> 中 super 怎么 理解?与 < ? extends T>有何不同?
Java 泛型 <? super T> 中 super 怎么 理解?与 extends 有何不同? 简介 前两篇文章介绍了泛型的基本用法.类型擦除以及泛型数组.在泛型的使用中,还有个重要的 ...
- Golang学习-第二篇 搭建一个简单的Go Web服务器
序言 由于本人一直从事Web服务器端的程序开发,所以在学习Golang也想从Web这里开始学起,如果对Golang还不太清楚怎么搭建环境的朋友们可以参考我的上一篇文章 Golang的简单介绍及Wind ...
- sql 中如何将返回的记录某一条置顶
将table1中id 为2的记录置顶select * from table1order by case when id='2' then 0 else 1 end 例子:将已发布的置顶,status ...
- java 常见几种发送http请求案例
import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java ...