【Cocos2d-X游戏实战开发】捕鱼达人之游戏场景的创建(六)
本系列学习教程使用的是cocos2d-x-2.1.4(最新版为cocos2d-x-2.1.5)
博主发现前两个系列的学习教程被严重抄袭,在这里呼吁大家请尊重开发者的劳动成果,
转载的时候请务必注明出处:http://blog.csdn.net/yangyu20121224/article/details/12067629
好的,从今天开始我们将进入游戏界面的开发了。话不多说,下面就让我们一起来创
建游戏中的场景。
一、类的创建
1、首先我们新建一个加载场景类,取名为“GameScene”,并继承自CCLayer类。
2、添加好了之后,可以在目录中看到“GameScene.h”和“GameScene.cpp”这两个文件。
二、项目编码
1、在刚刚新建的GameScene类中添加代码, GameScene.h头文件。
#ifndef __GAME_SCENE_H__
#define __GAME_SCENE_H__ #include "cocos2d.h" class GameLayer :public cocos2d::CCLayer
{
public:
//初始化方法
virtual bool init(); //创建场景
static cocos2d::CCScene* scene(); CREATE_FUNC(GameLayer); //初始化组件
bool setupViews();
};
#endif
2、GameScene.cpp文件,这段代码有很详细的注释。
#include "GameScene.h"
#include "StaticData.h" USING_NS_CC; //创建游戏场景
CCScene* GameLayer::scene(){
CCScene* scene = CCScene::create();
GameLayer* layer = GameLayer::create();
scene->addChild(layer);
return scene;
} //初始化方法
bool GameLayer::init(){
bool isRet = false; do
{
CC_BREAK_IF(!this->setupViews()); isRet = true;
} while (0); return true;
} // 初始化控件和布景
bool GameLayer::setupViews()
{
bool isRet = false;
do
{
CCLOG("games initialization..."); //获得窗口尺寸大小
CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //创建背景图片精灵
CCSprite* background = CCSprite::create(STATIC_DATA_STRING("game_background"));
//设置精灵位置
background->setPosition(CCPointMake(winSize.width * 0.5, winSize.height * 0.5));
//添加精灵至图层
this->addChild(background); //加入plist文件至缓存
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(STATIC_DATA_STRING("GameLayer_plist"));
//从缓存读取并创建精灵
CCSprite* game_box01 = CCSprite::createWithSpriteFrameName(STATIC_DATA_STRING("game_ui_box_01"));
//设置锚点
game_box01->setAnchorPoint(ccp(0.5,1));
//设置精灵位置
game_box01->setPosition(CCPointMake(winSize.width * 0.5, winSize.height));
//添加精灵至图层
this->addChild(game_box01); //从缓存读取并创建精灵
CCSprite* game_box02 = CCSprite::createWithSpriteFrameName(STATIC_DATA_STRING("game_ui_box_02"));
//设置锚点
game_box02->setAnchorPoint(ccp(0.5,0));
//设置精灵位置
game_box02->setPosition(CCPointMake(winSize.width * 0.5, 0));
//添加精灵至图层
this->addChild(game_box02,3); //创建背景图片精灵
CCSprite* ui_2p = CCSprite::create(STATIC_DATA_STRING("game_ui_2p"));
//设置精灵位置
ui_2p->setPosition(CCPointMake(winSize.width * 0.5, 41));
//添加精灵至图层
this->addChild(ui_2p,2); isRet=true;
} while (0);
return isRet;
}
3、别忘了在static_data.plist文件中添加图片的路径。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>default_gold</key>
<string>200</string>
<key>title</key>
<string>title.png</string>
<key>background</key>
<string>background.png</string>
<key>StartScene_Texture</key>
<string>StartScene.plist</string>
<key>start_normal</key>
<string>ui_button_box02_02.png</string>
<key>start_selected</key>
<string>ui_button_box02_01.png</string>
<key>scene_normal</key>
<string>ui_button_box01_02.png</string>
<key>scene_selected</key>
<string>ui_button_box01_01.png</string>
<key>Button_Texture</key>
<string>Button.plist</string>
<key>start</key>
<string>ui_2p_010.png</string>
<key>scene</key>
<string>button_other_014.png</string> <key>loading_title</key>
<string>loading_title.png</string>
<key>loading_1_1</key>
<string>loading_1_1.png</string>
<key>loading_1_2</key>
<string>loading_1_2.png</string>
<key>loading_2_1</key>
<string>loading_2_1.png</string>
<key>loading_2_2</key>
<string>loading_2_2.png</string> <key>game_background</key>
<string>game_background.png</string>
<key>cannon_plist</key>
<string>cannon.plist</string>
<key>cannon</key>
<string>cannon.png</string>
<key>cannon10_plist</key>
<string>cannon10.plist</string>
<key>cannon10</key>
<string>cannon10.png</string>
<key>increase_button</key>
<string>increase_button.png</string>
<key>reduce_button</key>
<string>reduce_button.png</string>
<key>GameLayer_plist</key>
<string>GameLayer.plist</string>
<key>game_ui_2p</key>
<string>game_ui_2p.png</string>
<key>game_ui_box_01</key>
<string>ui_box_01.png</string>
<key>game_ui_box_02</key>
<string>ui_box_02.png</string>
</dict>
</plist>
4、这里还有一个地方要说明,因为博主在加载资源页面跳转到游戏主页面之后出现点小问题,这个小问题也困扰了
博主好几天了,一直没有解决。所以为了不影响写博客的进度,这里我把StartScene.cpp文件中的start_callback()函
数里面的代码改为。
//点击“开始游戏”按钮的回调
void StartLayer::start_callback(CCObject* pSender){
CCLOG( "start game"); CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(1.0f, GameLayer::scene()));
}
改完之后就直接进入游戏主界面了。
5、游戏场景效果图。
对于Cocos2d-X开发来说,博主也算是一个新手,难免都会遇到一些让人头疼的问题。所以这也是为什么博主要跟
大家强调的,一定要以实战为主,只有在实战中才能真正的学习新的知识以及无法预知的困难。这里,我简单的跟大
家描述一下问题的情况,如果也遇到过类似情况的朋友,可以跟博主一起讨论学习:
点击“开始按钮”,进入加载资源页面之后,等到资源加载完毕,按照正常的逻辑应该是会进入到游戏主页面。但
是,进入游戏页面之后,只是短暂的两秒钟后又退回到了资源加载的页面。根据打印的Log日志来看,应该是有什么
对象为空,但是我又没发现这样的对象,所以出现这样的问题很是郁闷,希望广大的网友可以帮忙解决,谢谢了!
【Cocos2d-X游戏实战开发】捕鱼达人之游戏场景的创建(六)的更多相关文章
- Swift游戏实战-跑酷熊猫 09 移除场景之外的平台
上一节,我们写出了一个疯狂产生平台的东西.所谓上帝欲使其灭亡,必先使其疯狂.所以太疯狂都不是什么好事,所以我们要采取一些措施,例如移除场景之外的平台.btw如果哪天你觉得自己的老板行为乖张,难以理喻. ...
- 【Cocos2d-X游戏实战开发】捕鱼达人之开发前准备工作(一)
本系列学习教程使用的是cocos2d-x-2.1.4(最新版为cocos2d-x-2.1.5) 博主发现前两个系列的学习教程被严重抄袭,在这里呼吁大家请尊重开发者的劳动成果, 转载的时候请务必注明出处 ...
- 【Cocos2d-X游戏实战开发】捕鱼达人之单例对象的设计(二)
本系列学习教程使用的是cocos2d-x-2.1.4(最新版为cocos2d-x-2.1.5) 博主发现前两个系列的学习教程被严重抄袭,在这里呼吁大家请尊重开发者的劳动成果, 转载的时候请务必注 ...
- 原生Js贪吃蛇游戏实战开发笔记
前言 本课程是通过JavaScript结合WebAPI DOM实现的一版网页游戏---贪吃蛇的开发全过程,采用面向以象的思想设计开发.通过这个小游戏的开发, 不仅可以掌握JS的语法的应用,还可以学会D ...
- cocos2dx游戏开发——捕鱼达人mini版学习笔记(二)——MainMenu的搭建
一.创建文件~ MainMenuScene.h MainMenuScene.cpp MainMenuLayer.h MainMenuLayer.cpp 那个场景的搭建就不多说了,那个我的打 ...
- cocos2dx游戏开发——捕鱼达人mini版学习笔记(一)——FishAchor的搭建
一.创建文件· FishAchor.h还有FishAchor.cpp. 主要就是创建每种鱼的类,方便以后的取用~,很多是重复性的操作,然后我们是mini版,暂时也就加入大概6钟鱼就好= =,然后我们现 ...
- js原生捕鱼达人(一)
捕鱼达人的游戏大家都很熟悉吧,接下来的两三天,我会将整个游戏的原生js写法详细的写出来,整个游戏应用了面向对象的写法:创建构造函数,在构造函数上面添加对象的属性,然后在构造函数的原型上添加方法,当然这 ...
- Swift游戏实战-跑酷熊猫 14 熊猫打滚
这节内容我们来实现熊猫打滚.思路是这样的,当熊猫起跳时记录他的Y坐标,落到平台上的时候再记录它的Y坐标.两个坐标之间的差要是大于一定数值就判断它从高处落下要进行打滚缓冲.至此跑酷熊猫已经像一个游戏的样 ...
- Swift游戏实战-跑酷熊猫 13 二段跳的实现
这节内容我们来实现熊猫的二段跳. 要点: 二段跳的逻辑: 逻辑一,第一次点击屏幕,status就会变成jump. 逻辑二,第二次点击屏幕,status就会变成jump2. 逻辑三,当status变成j ...
随机推荐
- Ubuntu mysql安装,还有可视化界面
安装mysql sudo apt-get install mysql-server sudo apt-get install mysql-client sudo apt-get install lib ...
- poj 3104 Drying(二分搜索之最大化最小值)
Description It is very hard to wash and especially to dry clothes in winter. But Jane is a very smar ...
- (转)iOS Wow体验 - 第一章 - iOS人机界面设计规范纵览
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第一章译文精选,其余章节将陆续放出. 关于本套译文 ...
- POJ 3450 Corporate Identity (KMP+暴搞)
题意: 给定N个字符串,寻找最长的公共字串,如果长度相同,则输出字典序最小的那个. 找其中一个字符串,枚举它的所有的字串,然后,逐个kmp比较.......相当暴力,可二分优化. #include & ...
- Android仿IOS回弹效果 ScrollView回弹 总结
Android仿IOS回弹效果 ScrollView回弹 总结 应项目中的需求 须要仿IOS 下拉回弹的效果 , 我在网上搜了非常多 大多数都是拿scrollview 改吧改吧 试了一些 发现总 ...
- 线程异常:undefined reference to 'pthread_create' 处理
源代码: #include <stdio.h> #include <pthread.h> #include <sched.h> void *producter_f ...
- Linux环境下Eclipse + Tomcat + MySQL 配置J2EE开发环境的方法
1. 版本号信息 (1)CentOS 6.4发行版64位,uname -a 显演示样例如以下: Linux localhost.localdomain 3.11.6 #1 SMP Sat Nov 2 ...
- 使用Xcode和Instruments调试解决iOS内存泄露【转】
转载自:http://blog.csdn.net/totogo2010/article/details/8233565 虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露 ...
- Java 访问控制符
Java提供了3个访问控制符:private.protected和public,分别代表了3个访问控制级别,另外还有一个不加任何访问控制符的访问控制级别,提供了4个访问控制级别.Java的访问控制级别 ...
- vim搜索后跳到下(上)一个
搜索高亮后, 跳到下一个:小写n 上一个:大写N