Cocos Studio ---------- 使用 C++ 开发游戏( 选门 )

选门游戏:

.h

 1 #ifndef __BOSS_TWO_SCENE_H__
 2 #define __BOSS_TWO_SCENE_H__
 3
 4 #include "cocos2d.h"
 5 #include "iostream"
 6
 7 // 对于错的图片名
 8 #define YesSprite "BossResources/BossTwo/yes.png"
 9 #define NoSprite "BossResources/BossTwo/no.png"
10
11 using namespace std;
12 USING_NS_CC;
13
14
15 class BossTwo : public CCLayer{
16
17 public:
18
19     static CCScene* createScene();
20     virtual bool init();
21     CREATE_FUNC(BossTwo);
22
23     void menuBackCallBack(CCObject* pSender);
24
25     // 初始化成员变量
26     void initMemebers();
27
28     // 添加门框和门
29     void addDoorAndFrame(int num);
30
31     // 获取随机数,(start -- end)之间的
32     int getRandom(int start, int end);
33
34     virtual void onEnter();
35     virtual void onExit();
36     virtual bool ccTouchBegan(CCTouch *touch, CCEvent *event);
37
38     // 移除门
39     void removeCallBack(CCNode *pSender);
40
41     // 添加对错图片
42     void addYesAndNoCallBack(CCNode *pSender);
43
44     // 添加对错图片
45     void addYesAndNo(CCPoint position, string str);
46
47
48 private:
49
50     CCSprite            *bg1;            // 背景
51     CCSize                size;            // 屏幕大小
52
53     vector<string>        vecDoor;        // 门数组
54     vector<string>        vecDoorFrame;    // 门框数组
55     vector<string>        vecSmoke;        // 烟雾
56     int                    nSuccess;            // 存储第几个门是对的
57
58
59 };
60
61 #endif //__BOSS_TWO_SCENE_H__

.cpp

  1 #include "BossTwo.h"
  2
  3
  4 //CCNode进入场景时调用
  5 void BossTwo::onEnter()
  6 {
  7     CCDirector* pDirector = CCDirector::sharedDirector();
  8     pDirector->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
  9     CCLayer::onEnter();
 10 }
 11
 12 //CCNode退出场景时调用
 13 void BossTwo::onExit()
 14 {
 15     CCDirector* pDirector = CCDirector::sharedDirector();
 16     pDirector->getTouchDispatcher()->removeDelegate(this);
 17     CCLayer::onExit();
 18 }
 19
 20
 21 CCScene* BossTwo::createScene(){
 22
 23     CCScene *scene = CCScene::create();
 24     CCLayer *layer = BossTwo::create();
 25     scene->addChild( layer );
 26     return scene;
 27
 28 }
 29
 30 bool BossTwo::init(){
 31
 32     if (!CCLayer::init()){
 33         return false;
 34     }
 35
 36     srand(time(NULL));
 37
 38     size = CCDirector::sharedDirector()->getVisibleSize();
 39
 40     bg1 = CCSprite::create( "BossResources/BossTwo/bg1.png" );
 41     bg1->setPosition( CCPoint( size.width / 2, size.height / 2 ) );
 42     this->addChild(bg1);
 43
 44     addDoorAndFrame(3);
 45
 46     CCSprite *spriteNo = CCSprite::create("BossResources/BossTwo/error.png");
 47     CCSprite *spriteYes = CCSprite::create("BossResources/BossTwo/right.png");
 48
 49     spriteNo->setPosition(CCPoint(size.width * 0.4, size.height * 0.9));
 50     spriteYes->setPosition(CCPoint(size.width * 0.6, size.height * 0.9));
 51
 52     this->addChild(spriteYes, 10);
 53     this->addChild(spriteNo, 11);
 54
 55     return true;
 56
 57 }
 58
 59 void BossTwo::initMemebers(){
 60
 61     // 初始化门框
 62     vecDoorFrame.push_back("BossResources/BossTwo/errordoorframe1.png");
 63     vecDoorFrame.push_back("BossResources/BossTwo/errordoorframe2.png");
 64     vecDoorFrame.push_back("BossResources/BossTwo/rightdoorfame.png");
 65
 66     // 初始化门
 67     vecDoor.push_back("BossResources/BossTwo/errordoor.png");
 68     vecDoor.push_back("BossResources/BossTwo/door.png");
 69     vecDoor.push_back("BossResources/BossTwo/door.png");
 70
 71     // 初始化烟雾
 72     vecSmoke.push_back("BossResources/BossTwo/dayanwu.png");
 73     vecSmoke.push_back("BossResources/BossTwo/xiaoyanwu.png");
 74     vecSmoke.push_back("");
 75
 76 }
 77
 78 void BossTwo::addDoorAndFrame(int num){
 79
 80
 81     initMemebers();                                // 每次调用的时候都初始化一下数据
 82
 83     int nums = num;                                // 中间变量
 84
 85     for (int i = 0; i < num; i++)                // 添加num个门
 86     {
 87
 88         int randoms = CCRANDOM_0_1() * nums;    // 获取随机数
 89
 90         // 创建一个门框
 91         CCSprite *sprite = CCSprite::create(vecDoorFrame.at(randoms).c_str());
 92         CCSprite *sprite2 = CCSprite::create(vecDoor.at(randoms).c_str());
 93
 94         CCSprite *sprite3;
 95         if (vecSmoke.at(randoms) == ""){
 96             sprite3 = CCSprite::create();
 97         }
 98         else{
 99             sprite3 = CCSprite::create(vecSmoke.at(randoms).c_str());
100         }
101
102         sprite->setTag(100 + i);                            // 设置门框的tag为100 + i
103
104         sprite2->setTag(200 + i);                            // 设置门的tag是200 + i
105
106         sprite3->setTag(300 + i);                            // 设置烟雾的tag是300 + i
107
108         sprite->setPosition(CCPoint(size.width / (num + 1) * (i + 1), size.height / 2.5));
109
110         sprite2->setPosition(sprite->getPosition());        // 门的位置是在门框上的
111
112         sprite3->setAnchorPoint(CCPoint(0.5, 0.0));            // 烟雾的锚点是下中部分
113
114         sprite3->setPosition(CCPoint(                        // 烟雾的位置:门的上面
115             sprite2->getPositionX(),
116             sprite2->getPositionY() + sprite2->getContentSize().height / 2));
117
118         // 将门框添加到场景中
119         this->addChild(sprite);
120         this->addChild(sprite2);
121         this->addChild(sprite3);
122
123         CCLOG("---------- ===========", vecDoorFrame.at(randoms).c_str());
124         if (vecDoorFrame.at(randoms) == "BossResources/BossTwo/rightdoorfame.png"){
125             nSuccess = sprite->getTag();                    // 存储对的门的tag
126             CCLOG("---- tag = %d ----", sprite->getTag());
127         }
128
129         // 删除门框数组中的值
130         vecDoorFrame.erase(vecDoorFrame.begin() + randoms);
131         vecDoor.erase(vecDoor.begin() + randoms);
132         vecSmoke.erase(vecSmoke.begin() + randoms);
133
134         nums--;                                                // 随机数的取值减1
135
136     }
137
138 }
139
140 // 获取随机数,这里没有用到
141 int BossTwo::getRandom(int start, int end){
142     float i = CCRANDOM_0_1() * (end - start + 1) + start;
143     return (int)i;
144 }
145
146 // 返回按钮
147 void BossTwo::menuBackCallBack(CCObject* pSender){
148
149 }
150
151
152
153 bool BossTwo::ccTouchBegan(CCTouch *touch, CCEvent *event)
154 {
155     // 判断点击的是哪一个门框
156     for (int i = 100; i <= 102; i++)
157     {
158         CCSprite *sprite = dynamic_cast<CCSprite *>(this->getChildByTag(i));
159
160         if (sprite->boundingBox().containsPoint(touch->getLocation()))
161         {
162             CCLOG("---- onTouchBegan ----  tag = %d", sprite->getTag());
163
164             // 获取点击的门框的门
165             CCSprite *spriteDoor = dynamic_cast<CCSprite *>(this->getChildByTag(i + 100));
166             CCMoveBy *moveByDoor = CCMoveBy::create(0.5f, CCPoint(spriteDoor->getContentSize().width, 0));
167             spriteDoor->runAction(
168                 CCSequence::create(
169                 moveByDoor,
170                 CCDelayTime::create(0.3f),
171                 CCCallFuncN::create(spriteDoor, callfuncN_selector(BossTwo::removeCallBack)),
172                 NULL));
173
174             // 判断点击的是否是正确的门
175             if (nSuccess == sprite->getTag()){
176                 CCLOG("---- you are right ----");
177                 addYesAndNo(sprite->getPosition(), YesSprite);
178             }
179             else
180             {
181                 CCLOG("---- you are error ----");
182                 addYesAndNo(sprite->getPosition(), NoSprite);
183             }
184         }
185
186     }
187
188     CCLog("BossTwo ccTouchBegan ");
189     return false;
190 }
191
192 void BossTwo::addYesAndNo(CCPoint position, string str){
193
194     CCSprite *sprite = CCSprite::create(str.c_str());
195     sprite->setPosition(position);
196     this->addChild(sprite , 100);
197
198 }
199
200 void BossTwo::removeCallBack(CCNode *pSender){
201     CCSprite *spriteDoor = dynamic_cast<CCSprite *>(pSender);
202     CCLOG("---- psender tag = %d ----", spriteDoor->getTag());
203     spriteDoor->removeFromParent();
204
205 }
206
207 void BossTwo::addYesAndNoCallBack(CCNode *pSender){
208     CCSprite *sprite = dynamic_cast<CCSprite *>(pSender);
209     CCLOG("---- psender tag = %d ----", sprite->getTag());
210     // 判断点击的是否是正确的门
211     if (nSuccess == sprite->getTag()){
212         CCLOG("---- you are right ----");
213         addYesAndNo(sprite->getPosition(), YesSprite);
214     }
215     else
216     {
217         CCLOG("---- you are error ----");
218         addYesAndNo(sprite->getPosition(), NoSprite);
219     }
220 }

效果图:

时间: 2024-11-06 07:33:59

Cocos Studio ---------- 使用 C++ 开发游戏( 选门 )的相关文章

Cocos2d-x使用Cocos Studio制作界面并应用---之游戏开发《赵云要格斗》(11上)

         这里是Evankaka的博客,欢迎大家前来讨论与交流------         转载请注明出处http://blog.csdn.net/evankaka/article/details/42883881 本文主要讲了怎么用Cocos Studio制做登陆界面,并导出成Json文件,直接在coco2d-x中来调用.这样做的好处就是界面和代码是分离的,你如果想改界面的话,就可以直接在外面用Cocos Studio来修改,只要不修改按钮之类的名称,你的功能代码完全不用修改,只要将导

让Cocos Studio 2.3.2制作UI界面中控件支持运行3d动作特效的间接途径

引子 下了课有点小空,回想起前天的Studio中UI控件的3D动作问题,还是有点放心不下,毕竟3D高级动作特效是一件游戏开发的"法宝".在仔细地研究了Waves3D等3D高级动作特效之后,我找到了一种如本文标题所示的间接途径.有兴趣的朋友可以参考一下. 实现过程记录 先上图,下图给出的是我的教学游戏中游戏中启动场景在Cocos Studio 2.3.2中的截图,同学们可以注意我在图中标记的部分. 显然,在上图中,我在原先的Cocos2d-x 2.x(结合早期的CocoStudio 2.

Cocos2d-x 3.8.1+Cocos Studio 2.3.2捉虫记之控制场景文件中的骨骼动画

Cocos2d-x 3.8.1+Cocos Studio 2.3.2捉虫记之控制场景文件中的骨骼动画 引子 这段时间一直努力在把早期版本的拇指接龙游戏(Cocos2d-x 2.2.3+CocoStudio 1.4.0.1)升级到当前相对稳定的高大上环境--Cocos2d-x 3.8.1+Cocos Studio 2.3.2.行程中遇到不少麻烦,时间不知不觉像流水一样悄然逝去(这正是我时不时酸酸地想起"程序猿"三字的主要原因).想之再三,还是努力记录下来,一来为自己可能逝去的记忆,二来为

我所理解cocos2d-x 3.6 lua --使用Cocos Studio

Cocos是触控科技推出的游戏开发一站式解决方案,包含了从新建立项.游戏制作.到打包上线的全套流程. 开发者可以通过cocos快速生成代码.编辑资源和动画,最终输出适合于多个平台的游戏产品. Cocos的主要产品有Cocos Studio.Cocos2d-x(Cocos Framework).Cocos Code IDE. Cocos Studio:是Cocos2d-x引擎配套的跨平台游戏开发工具,帮助开发者快速构建游戏场景.编辑UI.编辑动画等游戏资源,支持第三方的资源导入.支持多种类型游戏的

Cocos Studio is EOL&#39;d

Cocos Studio is EOL'd Cocos Studio has been EOL'd as of April 2016. There will be no more releases of Cocos Studio. The last version of Cocos Studio is v3.10 and can be downloaded for Mac和 windows. 这个版本的可可工作室需要版本 v3.10Cocos2d-x. 这个版本的可可工作室在Windows 7和

Cocos Studio的动画系统介绍

Cocos Studio介绍Cocos Studio是一套基于Cocos2D-x的免费游戏开发工具集,它能帮助开发者快速创建游戏资源,将大部分繁琐的游戏开发工作使用编辑器来快速制作,进一步帮助游戏开发者减短开发周期.提高开发效率.Cocos Studio本身不光只是针对[size=1em]骨骼动画的编辑而设计的,它还提供了UI.场景和数据等信息的编辑工作.就当前的Cocos Studio而言,主要分两种,一种是Win版本的Cocos Studio,另一个则是刚刚发布不久的Mac版 Cocos S

仿《雷霆战机》飞行射击手游开发--游戏简介

游戏介绍 本游戏是一款使用cocos2d-x开发的纵版飞行射击单机游戏,开发语言是C++.玩家可以控制一架飞机与敌机进行对战,飞机可以发射子弹.导弹甚至激光,除此之外,玩家还能对自己的飞机进行强化改造,提升基础属性.当玩家完成指定的任务后,还能获取各种类型的道具奖励.游戏操作简单,上手容易,画面逼真炫酷,并有多种道具可供使用. 本游戏支持三种游戏模式:闯关模式.无尽模式.急速模式. 闯关模式 这是一种最常见的玩法,即游戏给玩家多个关卡,每个关卡面对的敌人不同,任务也不同,随着任务的完成,剧情也会

安卓开发游戏用Cocos2d什么版本?

这两天上课,讲了两天半的游戏开发,做一个植物大战僵尸的小demo,最终实现到一步步点击进入游戏后,豌豆射手可以打死僵尸,僵尸可以啃坚果. 使用的是Cocos2d-android,老师在讲课的时候主要就是说这样写可以实现这样的效果,哒哒哒做出来.我听着十分焦灼..难受,因为这些类的今生前世,什么关系,都是干什么的啊不是很清楚.于是下来自己查相关的资料,在网上搜知识点,发现引用了一本书<cocos2d-x权威指南>,讲的比较详细,于是下来看,直接看第三章核心类,看到代码发现是C++的,感觉不对头.

【C语言探索之旅】第三部分第三课:SDL开发游戏之显示图像

内容简介 1.第三部分第三课: SDL开发游戏之显示图像 2.第三部分第四课预告: SDL开发游戏之事件处理 第三部分第三课:SDL开发游戏之显示图像 上一课中,我们学习了如何加载SDL库(SDL_Init),释放SDL库(SDL_Quit),如何打开一个窗口(Window),如何使用表面(Surface). 这些都是SDL库最最基本的操作.暂时,我们只会给窗口自带的表面上点颜色,好像挺乏味的. 这一课我们来学习如何插入图片.上一课我们说过,SDL中绘制图样需要在Surface上进行.Surfa