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的拼图小游戏,于是自己心血来潮,自己先实现了一把,也算是尝尝鲜了.下面就把大体的思路介绍一下,希望大家都可以做出一款属于自己的拼图小游戏,必须是更炫酷,更好玩 ...
随机推荐
- laravel 集合接口
只记下几个常用的,其他的看这里:http://laravelacademy.org/post/6293.html 1)什么是集合? 就是laravel查询构建器查询返回的数据结果(get first ...
- laravel 强大的关联模型
内容比较多,不总结了,直接看学院君的译文吧,已经写得很详细了 传送门:http://laravelacademy.org/post/6191.html PS1: laravel的关联模型并不是遍历一次 ...
- 【RF库Collections测试】Convert To List
Name:Convert To ListSource:Collections <test library>Arguments:[ item ]Converts the given `ite ...
- Java fluent风格
写个简单的例子,相信看了下面的例子,就会了解什么是fluent风格. 一.我们先写一个通常的,即不使用fluent风格 1.实体类 package com.xbq.demo.stu; /** * @C ...
- pow()
pow() 如果接收两个参数,如 pow(x, y),则结果相当于 x**y,也就是 x 的 y 次方pow() 如果接收三个参数,如 pow(x, y, z),则结果相当于 (x**y) % z,也 ...
- <linux系统c语言生成.so文件,生成64位可执行文件,在64位系统中运行32位的可执行文件>
1.linux 系统c语言生成.o文件,---->gcc -m64 -c -fPIC test.c -o test.o2.linux 系统c语言生成.so文件,----->gcc -sha ...
- 十分钟理解Java中的动态代理
十分钟理解 Java 中的动态代理 一.概述 1. 什么是代理 我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品.关于微商代理,首先我们从他们那里买东西时通常不知道 ...
- 【thinkphp5】 分页样式修改
1 找到文件:/thinkphp/library/think/paginator/driver/Bootstrap.php <?php // +------------------------- ...
- java基础---->多线程之yield(三)
yield方法的作用是放弃当前的CPU资源,将它让给其它的任务去占用CPU执行时间.但放弃的时间不确定,有可能刚刚放弃,马上又获得CPU时间片.今天我们通过实例来学习一下yield()方法的使用.最是 ...
- spring的AOP个人理解和使用
1什么是AOP:AOP是面向切面编程,也就是说面向某个功能模块编程,典型的应用就是Spring的声明式事务, Spring的AOP事务解析: 在以前的事务管理是要融合在逻辑代码中的,在逻辑代码中决定事 ...