Cocos2dx游戏教程(六):“见缝插针”,菜单Menu与C++11新特性

CocosCreator 起手游戏项目解构 项目文档: http://docs.cocos.com/creator/manual/zh/getting-started/quick-start.html 最近心血来潮,想写个微信小游戏,查阅相关资料后准备从cocos框架入手。下面要分析的游戏项目的所有资源都由从cocos官方提供。当然官方文档已经足够详尽了,我这里只是进行更进一步的解构并适当扩展游戏内容。   ... 阅读详情

上一节我们已经实现了第二个场景界面,最后按下按钮发现没有反应是不是,这一节将会给大家介绍下Cocos2dx另一个重要的对象,菜单Menu。

一、Menu介绍

提到Menu,不得不提到MenuItem,MenuItem继承自Node,所以它的子类菜单项都可以使用Node的相关操作。
MenuItem是所有菜单项的父类,建议不要直接使用该类,因为它并不包含具体显示的功能。
作为其它菜单项的父类,主要提供了一下三个功能:
(1)提供了基本按钮的状态:正常、选中、禁用。
(2)为按钮实现了基本的回调函数机制。点击按钮后,就会调用执行相应的回调函数,上文两个新增的函数就是回调函数哦。

//开始游戏
void onStartBtnPressed(Ref* pSender);
//选择关卡
void onSelectBtnPressed(Ref* pSender);

菜单项的子类可以分成三类,总共六个:
(1)文字菜单项:MenuItemLabel、MenuItemAtlasFont、MenuItemFont;
(2)图片菜单项:MenuItemSprite、MenuItemImage;
(3)切换菜单项:MenuItemToggle。
而关于各个菜单项的区别大家可以参考cocos2dx的源代码,源代码是最好的老师~

我们在上篇教程中有如下的代码,实现方式如下

auto selectBtn = MenuItemImage::create("menu/select.png", "menu/select.png");
selectBtn->initWithCallback(CC_CALLBACK_1(GameMenuScene::onSelectBtnPressed, this));
selectBtn->setPosition(visibleSize.width / 2 + 20, visibleSize.height - 660);

auto menu = Menu::create(startBtn, selectBtn, NULL);
menu->setPosition(Point::ZERO);
this->addChild(menu);

注意如下两行

selectBtn->initWithCallback(CC_CALLBACK_1(GameMenuScene::onSelectBtnPressed, this)); //回调方法
auto menu = Menu::create(startBtn, selectBtn, NULL);//注意最后一定要加个空项,告诉他没了可以开始创建了。

我没在回调方法里面添加输出信息看一下

//开始游戏
void GameMenuScene::onStartBtnPressed(Ref* pSender) {
	//需要跳转到游戏界面
	CCLOG("Start Game");
}

//选择关卡
void GameMenuScene::onSelectBtnPressed(Ref* pSender) {
	//需要跳转到选择关卡界面
	CCLOG("Go to select layer");
}

运行结果如下,我们们点击开始游戏和选择关卡,在控制台是不是可以看到输出信息了
在这里插入图片描述
那么具体的机制是什么?
CC_CALLBACK_1指的是什么?

二、C++11新特性之 std::function、std::bind、std::placeholders

上面提到了CC_CALLBACK_1,我们不得不提和它几个相关的定义,如:
CC_CALLBACK_0,
CC_CALLBACK_1,
CC_CALLBACK_2,
CC_CALLBACK_3
这些具体是什么,相信大家都已经看过定义了吧,Cocos2d-x 3.x版本用如下的宏来定义回调方法类的。

// new callbacks based on C++11
#define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_ARGS__)
#define CC_CALLBACK_1(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, ##__VA_ARGS__)
#define CC_CALLBACK_2(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, ##__VA_ARGS__)
#define CC_CALLBACK_3(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, ##__VA_ARGS__)

原来是C++11引入了boost库的function和bind,bind也被3.x版本用来作为回调的绑定。
__selector__是绑定回调的方法
__target__是调用方法的对象
##__VA_ARGS__是可变的参数列表
std::placeholders::_1是占位符
std::placeholders::_2是占位符
std::placeholders::_3还是占位符

下面我们结合下C++11的新特性给大家介绍下CC_CALLBACK_X吧

1.std::function

提到std::function我们不得不提一下C++的函数指针
C++ 函数指针和函数类型
函数指针指向的是函数而非对象。和其他指针类型一样,函数指针指向某种特定类型。
函数类型由它的返回值和参数类型决定,与函数名无关。

int add(int a, int b)

上述函数类型是:int (int a, int b);
上述函数指针fp:int (*fp)(int a, int b);

我们来比较一下这两个定义

int (*p)(int a, int b); //p是一个指向函数的指针变量,所指函数的返回值类型为整型
int *p(int a, int b); //p是函数名,此函数的返回值类型为整型指针

我们通常定义一个函数指针

int(*fp)(int,int);
//可以直接省略fp
int(*)(int,int);

或者

typedef int(*FP)(int,int); 
Fp fp;

函数指针定应用

#include <iostream>
using namespace std;
 
int max(int x, int y); //求最大数
int min(int x, int y); //求最小数
int add(int x, int y); //求和
void process(int i, int j, int (*p)(int a, int b)); //应用函数指针
 
int main()
{
    int x, y;
    cin>>x>>y;
 
    cout<<"Max is: ";
    process(x, y, max);
 
    cout<<"Min is: ";
    process(x, y, min);
 
    cout<<"Add is: ";
    process(x, y, add);
 
    getch();
    return 0;
}
 
int max(int x, int y)
{
    return x > y ? x : y;
}
 
int min(int x, int y)
{
    return x > y ? y : x;
}
 
int add(int x, int y)
{
    return x + y;
}
 
void process(int i, int j, int (*p)(int a, int b))
{
    cout<<p(i, j)<<endl;
}

我们来看一下如何使用std::function

// 普通函数
int add1(int a, int b){return a + b;} 
// lambda表达式
auto add2 = [](int a, int b){ return a + b;}
// 函数对象类
class add3{
    int operator()(int a, int b){
        return a + b;
    }
};

上述三种可调用对象虽然类型不同,但是共享了一种调用形式:

int(int, int)

std::function就可以将上述类型保存起来,如下:

std::function<int(int ,int)>  a = add1; 
std::function<int(int ,int)>  b = add2; 
std::function<int(int ,int)>  c = add3(); 

我们看下这样的定义是不是比原来更简单了呢

2.std::bind
有了std::function,我们不得不提一下std::bind
std::bind 主要用于绑定生成目标函数,一般用于生成的回调函数,cocos2d 3.x的回调函数都是通过std::bind和std::function实现的
在Cocos2d-x中,我们可以看到,使用std::bind生成一个可调用对象,这个对象可以直接赋值给std::function对象;在类中有一个std::function的变量,这个std::function由std::bind来赋值,而std::bind绑定的可调用对象可以是Lambda表达式或者类成员函数等可调用对象,这个是Cocos2d-x中的一般用法。
如我们定义一个方法:

int add(int a, int b) {
	return a + b;
}

上面的方法使用std::bind怎么实现呢

auto f1 = std::bind(add, 2, 3);
auto result = f1();

auto f2 = std::bind(add, std::placeholders::_1, 3);
result = f2(2);

auto f3 = std::bind(add, std::placeholders::_1, std::placeholders::_2);
result = f3(2, 3);

这里面有三种使用方式,std::placeholders具体指的又是什么呢

3.std::placeholders
std::placeholders,占位符
我们来看一下上面的宏定义,以CC_CALLBACK_0为例

#define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_ARGS__)

很多人是不是看到CC_CALLBACK_0会认为回调的方法是0个参数呢?
其实不是这样的
CC_CALLBACK_0中的0是代表要回调的方法绑定第0个参数之后的参数。
如同上面的定义,如果有CC_CALLBACK来写应该如何处理呢

//默认指定了第一个参数是2,第二个参数是3。
auto f1 = CC_CALLBACK_0(add, this, 2, 3);
auto result = f1();

//默认指定了第二个参数是3,调用的时候只需要指定第一个参数就可以了。
auto f2 = CC_CALLBACK_1(add, this,3);
result = f2(2);

//都为指定参数,调用时都要传入。
auto f3 = CC_CALLBACK_2(add, this);
result = f3(2, 3);

到这大家对新特性有一定的了解么?编译的时候不要忘了加-std=c++11哦~~

利用js写的见缝插针小游戏 利用js写的见缝插针小游戏 今天给大家带来的就是一款叫做《见缝插针》的游戏。有空你就往里插,直到你无处可插!看你能过多少关! 游戏截图 失败时 代码如下 js代码 index.js 测试游戏源码的js文件 gameurl = ' '; imgUrl = " "; openid = ''; var reg = new RegExp("[?&]" + 'openid' + "=([^?... 阅读详情

相关推荐

使用cocoscreator开发的见缝插针小游戏

使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插针小游戏使用cocoscreator开发的见缝插

cocos creator 3.0见缝插针(口红机)

cocos creator3.0 见缝插针效果展示实现思路关键代码试玩地址(加载慢,自己服务器带宽低)下载地址开源不易,仅学习使用 效果展示 ## gif 帧率较低 实际体验效果更好 实现思路 1、中间一个节点 里面有两个node 分别放背景橘子node,存放刀的node 然后只旋转这个中间节点让刀和背景一块旋转就行了 2、碰撞检测给每一把刀放上碰撞检测 3、下边放一把假的刀 用来做动画执行,刀子到达位置 将假的刀放回原来的位置,将复制新的刀到中间存刀的节点 4、判断下一关 将中间节点存刀的node判

张无忌的博客 1368

见缝插针游戏设计详解

Continue launch pin toward to a rotating circle and Insert the pin on the circle’s out ring until the collision happens between pinheads

Cocos2dx游戏教程(十二):“见缝插针”,游戏结算界面和音效

前面游戏主场景已经可以试玩了吧,但是是不是感觉很单调呢,如何进入下一关呢?要不要配置些音乐呢,在我的BGM中是不是有些无敌的感觉呢 首先我们来看一下需要添加的文件 我们可以看到,在这一节新增了GameFailedLayer,GameSuccessLayer,GameMusic,GameLevel四个类。 我们都知道如何创建一个层,我们首先来看一下胜利失败的界面吧 下面带领大家看看下如何实现界...

小白的专栏 922

IAR调试CC1310的错误:Fatal error:Failed to connect to the XDS emlulator (Error -241 @ 0x0:)

从simplelink_cc13x0_sdk_2_10_00_36导入collector工程后,rebuild后进行debug,出现了如图错误:Fatal error:Failed to connect to the XDS emlulator (connect ICEPick)...(Error -241 @ 0x0)A router subpath could not be accessed....

qq_40417648的博客 6228

单细胞测序流程(十)KEGG通路富集分析与可视化圈图实战解析

本文详细解析了单细胞测序数据分析中KEGG通路富集分析与可视化圈图的完整实战流程。从差异表达基因列表出发,通过R语言进行KEGG富集分析,并利用Perl脚本进行基因ID转换,最终使用GOplot包绘制高级可视化圈图,帮助研究者将基因列表转化为有意义的生物学故事。

i7j8k9l的博客 405

Cocos2dx游戏教程(三):“见缝插针”,Cocos2dx核心类介绍

前面给大家介绍了图片精灵的加载和相关核心类的描述,聪明的小伙伴们应该都已经了解了相关的使用方式吧,这次呢就详细的介绍下几个核心类的作用,使用方式和框架结构,巩固一下。 序、框架结构图 我们看一下将要实现的游戏的示意图,能看出哪些是场景,哪些是精灵么,还有文字和菜单按钮哦(后面介绍) 如下图所示,上章的Director,Node,Scene,Layer,Sprite结构图如下。 Node类是绝大部...

小白的专栏 633

abb机器人指令手册_ABB机器人配置圆形输送链跟踪

更多内容请点击上方ABB机器人实战技巧关注也可点击公众号下方往期经典浏览更多内容转载请先后台留言,大家一起支持原创,推动机器人使用和发展本公众号对各类ABB机器人应用,仿真,毕业设计提供技术支持,详细后台留言本公众号诚挚希望与各机器人培训机构,机器人使用单元合作,提供技术支持,详细后台留言1. 通常的机器人输送链跟踪,均为直线输送链跟踪,例如下图2. 有些情况,输送链为圆形,例如...

weixin_39849894的博客 2041

Cocos2dx游戏教程(十):“见缝插针”,动作篇Action

一个成功的游戏如果只是一堆静态图片,那么和一幅画有什么区别呢?所以动静结合才是王道~~ 动作体系对于一款游戏的成功与否是有着非常重要的影响的。在这一节中将会带大家简单的认识动作体系。 常见的动作 我们在上节中发现场景的切换方式还可以采用runAction的方式使用 //跳转场景 this->runAction(Sequence::create( DelayTime::create(2.5f...

小白的专栏 744

每天一个优秀提示词学习收藏 - 文本创作篇(二)

宝子们,今天不藏私啦!我把这段时间四处搜罗、潜心钻研出来的文本创作 Prompt 提示词大礼包双手奉上,这可都是能让你的 AI 创作水平原地起飞的干货!走过路过不要错过,赶紧码住,开启你的 AI 创作进阶之旅吧!

2393

Comsol 超声空化气泡仿真

当液体中受到高能量的超声波作用时,液体中的压力会发生剧烈变化,形成局部的低压区域。当液体中的压力降低到饱和蒸汽压以下时,就会发生空化现象,即液体中形成微小气泡。这种空化常用于一些工业应用,如清洗、乳化、混合等。这种空化常用于一些医学和生物学应用,如碎石术、肿瘤治疗、细胞破碎等。超声空化的应用非常广泛。在医学领域,超声空化广泛应用于诊断和治疗,如超声造影、超声刀、超声碎石术等。在工业领域,超声空化可用于清洗、乳化、混合等工艺。此外,超声空化还在食品加工、化学合成、环境保护等领域有着重要应用。

声学黑洞仿真工作室 2553

Cocos2dx游戏教程(八):“见缝插针”,UserDefault数据存储与读取

前面已经介绍了前两个场景使用,中间涉及到了几个核心类,菜单,label标签等,同样我们也实现了两个场景的切换和关卡数字的显示。那么我们怎么记录游戏相关的信息呢? 下面我们将走进cocos2dx的数据存储,UserDefault。 一、UserDefault介绍 cocos2dx提供了一个数据存储类UserDefault,可以作为一个轻量级的数据库来使用。它支持五种基本数据bool、int、floa...

小白的专栏 669

使用electron静默打印

使用electron静默打印 1.使用electron打印的理由 很多情况下程序中使用的打印都是用户无感知的。并且想要灵活的控制打印内容,往往需要借助打印机给我们提供的api再进行开发,这种开发方式非常繁琐,并且开发难度较大。 electron提供的打印api可以非常灵活的控制打印设置的显示,并且可以通过html来书写打印内容。 2.api ele...

w1366352655的博客 943

MenuItemImage的使用

auto manMenuItem =  MenuItemImage::create("uncheck.png","check.png",CC_CALLBACK_1(PersonInfo::button1,this)); auto womanMenuItem =  MenuItemImage::create("uncheck.png","check.png",CC_CALLBACK_1(Perso

lianghui0811 705

扫码器USB键盘报告描述符数据格式解析

Byte0用于判断Shift是否按下,当按下时Byte0的Bit1会置1,即0x02,若未按下,Bit为0,即0x00。0x00 0x00 0x00 0x00 0x00 0x00 0x00--->>未按下Shift。0x00 0x00 0x00 0x00 0x00 0x00 0x00--->>按下Shift。0x00 0x04 0x00 0x00 0x00 0x00 0x00--->>输出A。0x00 0x04 0x00 0x00 0x00 0x00 0x00--->>输出a。

m0_65548585的博客 1141

YOLOv8改进-bifpn

跨尺度连接通过添加一个跳跃连接和双向路径来实现,自此实现了加权融合和双向跨尺度连接。该结构是加权且双向连接的,即自顶向下和自底向上结构,通过构造双向通道实现跨尺度连接,将特征提取网络中的特征直接与自下而上路径中的相对大小特征融合,保留了更浅的语义信息,而不会丢失太多的深层语义信息。传统的特征融合时将尺度不同的特征图以相同权重进行加权,但是当输入的特征图分辨率不同时,以相同的权重进行加权对输出的特征图不平等。所以BiFPN根据不同输入特征的重要性设置不同的权重,同时反复采用这种结构来加强特征融合。

weixin_45303602的博客 8136

第四节:菜单的使用

MenuItemFont的使用: 这是一种最简单的文字菜单,只用设置内容,字号,字体即可,下面是代码: //为菜单选项设置字体名称 MenuItemFont::setFontName("Arial"); //创建一个菜单选项,第一个参数是选项名字,第二个参数是点击了以后,回调的方法 //这里,一共创建了三个菜单选项,start gamen,setting

carlos1992的专栏 596

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

见缝插针????

本周任务是选取见缝插针或坦克大战等游戏进行学习制作并了解其功能实现所需要的代码和各种操作,联系unity里边的各种处理方式,对物品的旋转、移动、交互、等等已经有了初步的学习。

ID810975的博客 140

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Cocos2dx游戏教程(十一):“见缝插针”,主场景实现

前面是节介绍了Cocos2dx的相关知识,也实现了相关场景,这一节设计的游戏的具体实现啦,我们看一下新增的类,主要有小球类ball,定义类define,全局方法类GlobalManage,主场景类GameScene 这一节完成后大家就可以初步进行游戏啦,前介绍过的相关功能在本章节中都有体现哦,这章节主要就上代码吧。 下面我们看下文件列表,可以看到红框中新增的文件,下面介绍文件的具体实现。 大家将第...

小白的专栏 747

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Cocos2d-X中的CCAction

CCAction用于创建各种动作

meishadevs的个人博客 1488

见缝插针案例制作

Demo介绍了见缝插针的核心玩法,还有很大的扩展性,比如:特效、声音、基于UGUI良好的UI界面。。。 案例玩法介绍:如下图所示,游戏开始后小球围绕大球旋转,点击鼠标发射小球,当所有小球发射完毕后进入下一关,如果在发射小球后发生碰撞,游戏失败。效果图如下图1所示。 图1:准备工具:Unity 5.4.0进入正题:一、界面UI的布局摄像机采用正交投影,用cube,sphere,和3D Text

马小宇的博客 8847

见缝插针游戏--实现转圈

#include "stdafx.h"#include &lt;graphics.h&gt;      // 引用图形库头文件#include &lt;conio.h&gt;#include &lt;math.h&gt;int main(){ int i; int x=500, y=580; int cta = 20; initgraph(1000, 640);   // 创建绘图窗口,大小为 6...

恒持此志成永志 1101

HTML5见缝插针小游戏

用H5与cocos-js结合编写的小游戏,见缝插针。 游戏截图 ​点击鼠标发射针,插在中间的球体当中进行旋转。 onTouchBegan:function(touch, event){         var target =event.getCurrentTarget();         if(target.playerBall.lenght  

bright_mmmmmmmmmmmm的专栏 1766

见缝插针

HTML &lt;!doctype html&gt; &lt;html lang="en"&gt; &lt;head&gt;     &lt;meta charset="UTF-8"&gt;     &lt;title&gt;见缝插针&lt;/title&gt;     &lt;style&gt;         .container{          

逍遥的博客 1138

从零开始实现自己的Kalimba——Cocos Creator新手教程系列(零)前言

由于作者也是第一次摸索,在趟雷无数后终于艰难地实现了自己的第一个小程序。废话不多说,从接下来的系列中我们会尝试使用Cocos Creator创建一个游戏流程完善的,基于Tiledmap瓦片地图的Kalimba游戏。游戏介绍:Kalimba是Microsoft Studios出品的PC平台单机游戏,玩家需要使用方向键操控两个方块人进行横版过关游戏。由于同时控制两个小人,所以需要各种特殊技巧才能最终到...

renwenhao123456的博客 2545

Cocos2dx游戏教程(四):“见缝插针”,第一个场景的建立

从这一篇开始就正是进入游戏具体实现啦,前面都了解了核心类的基本操作,那么现在我们开始具体实现吧 一、见缝插针的玩法 简单的说,玩家有一些小球,将这些小球弹射到大球上且不能碰到大球上的小球哦,前面介绍的“口红机”就是这样的玩法,只不过我们把小球换成了口红而已。 看看广告词,说的还是很清楚的么 又是一款简单而不简略的游戏,游戏画面简略但玩法新颖。玩家手中有一定数量的针头,必须把所有的针头都插进旋转的球...

小白的专栏 736
上一篇: Cocos2dx游戏教程(五):“见缝插针”,第二个场景的建立
下一篇: Cocos2dx游戏教程(七):“见缝插针”,Label标签的使用
胖胖的战士
博客等级 码龄18年 104粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值