当前位置:  编程技术>综合
本页文章导读:
    ▪cocos2d-x初探学习笔记(30)2.1新特性之CCClippingNode              从本篇起介绍一些cocos2d-x的新功能,包括CocosBuilder动画等功能,还包括从2.1版本添加的一些新特性,本篇文章就介绍一下2.1中我非常喜欢的一个新特性--可以根据一个模板.........
    ▪排列组合       public class XPermutation { private int _length; private int _number; private int[] _current; private bool _first; /// <summary> /// 排列组合数据 /// </summary> .........
    ▪一个经典的递归算法题(实例+源码)      目的:动手做小程序 需求:这里有一组数:1、1、2、3、5、8、13、21、34、55......要求计算用这个递归算法,计算出这组数的第40个数是多少? 分析:分析这组数的规律,可以得知,每个数字是.........

[1]cocos2d-x初探学习笔记(30)2.1新特性之CCClippingNode
    来源: 互联网  发布时间: 2013-11-19

        从本篇起介绍一些cocos2d-x的新功能,包括CocosBuilder动画等功能,还包括从2.1版本添加的一些新特性,本篇文章就介绍一下2.1中我非常喜欢的一个新特性--可以根据一个模板切割图片的节点--CCClippingNode。这个类提供了一种不规则切割图片的方式,在这种方式以前,我们可以使用纹理类自带的setTextureRect函数来切割矩形区域,这种方式就像是J2me的setClip方法一样整块的切割图片,比如我们要实现一个血条的时候,就可以使用这种方式进行切割,切掉我们不想显示的部分,而新特性中提供的CCClippingNode最大的不同之处就是裁减将不仅仅局限于矩形,可以根据任何形状进行裁减,而你要做的只是给一个“裁减模板”,这就好比是我们用剪刀剪形状,需要一个模具类的东西,然后我们拿着模具和要被裁减的纸顺着模具的边缘用剪刀剪就可以剪出一个模具的样子一样,首先来看这个类的常用函数(需要说明的是,这里介绍的函数只是这个类独有的,这个类继承自CCNode节点类,因此节点类有的函数也就不做介绍了):

getStencil:返回一个节点对象,这个对象就是之前提到的“裁减模板”。

setStencil:设置“裁减模板”。

getAlphaThreshold::这种裁减是可以改变裁减的透明度的,修改这个透明度就是通过设置这个阈值。

setAlphaThreshold:获得这个透明度阈值。

isInverted:之前说过的剪刀剪形状的例子,剪完形状以后,是显示被剪掉的部分,还是显示剩余的部分呢,默认isInverted值是false,是显示被剪掉的部分,设置为true则是显示剩余的部分。这个函数获得这个值。

setInverted:设置isInverted值。

       使用这个效果,一般的过程是这样的:

       

//创建“裁减模板”

    CCNode*stencil = this->stencil();

    stencil->setTag( kTagStencilNode);

    stencil->setPosition( ccp(50,50) );

    //创建裁减节点类

    CCClippingNode*clipper = this->clipper();

    clipper->setTag( kTagClipperNode);

    clipper->setAnchorPoint(ccp(0.5,0.5));

    clipper->setPosition( ccp(s.width / 2 -50, s.height/ 2 - 50) );

    //为设置裁减节点类设置“裁减模板”

    clipper->setStencil(stencil);

    this->addChild(clipper);

    //设置裁减节点类所放的内容

    CCNode*content = this->content();

    content->setPosition( ccp(50,50) );

    clipper->addChild(content);

        通过这个新特性可以实现出很多有意思的效果,首先来学习一下cocos2D-x中的testApp的使用实例首先是一个类似ScrollView的滚动效果,在这之前,介绍cocos2D-x的另一个新特性—CCDrawNode,这个类不是一个新的功能,而是对原来功能的封装,在这之前,如果我们需要绘制矩形,圆形,点等形状,需要重新写一个类继承自节点或布景层,然后重写draw函数,现在使用CCDrawNode,可以直接使用这个类来绘制相应图形,相关函数如下所示:

     drawDot:绘制点,参数给出坐标位置。

    drawSegment:绘制片断,给出起始点,结束点,半径等参数。

     drawPolygon:绘制矩形,可以分别给出填充颜色和边框颜色,还可以设置边框宽度。

     实现类似ScrollView的滚动效果的代码如下:

   //创建裁减节点类

    CCClippingNode *clipper= CCClippingNode::create();

    clipper->setTag( kTagClipperNode);

    clipper->setContentSize( CCSizeMake(200, 200) );

    clipper->setAnchorPoint( ccp(0.5, 0.5) );

    clipper->setPosition( ccp(this->getContentSize().width / 2, this->getContentSize().height/ 2) );

    clipper->runAction(CCRepeatForever::create(CCRotateBy::create(1, 45)));

    this->addChild(clipper);

    /

    
[2]排列组合
    来源: 互联网  发布时间: 2013-11-19
    public class XPermutation
    {
        private int _length;
        private int _number;
        private int[] _current;
        private bool _first;

        /// <summary>
        /// 排列组合数据
        /// </summary>
        public int[] Current { get { return _current; } }
        /// <summary>
        /// 数据长度
        /// </summary>
        public int Length { get { return _length; } }
        /// <summary>
        /// 数据个数
        /// </summary>
        public int Number { get { return _number; } }

        /// <summary>
        /// 数据可以重复的排列组合
        /// </summary>
        /// <param name="length">数据长度</param>
        /// <param name="number">数据个数</param>
        public XPermutation(int length,int number)
        {
            _length = length;
            _number = number;
            _current = new int[length];
            Reset();
        }

        public bool Next()
        {
            if (_first)
            {
                _first = false;
                return true;
            }
            for (int i = 0; i < _length; ++i)
            {
                ++_current[i];
                if (_current[i] == _number) _current[i] = 0;
                else break;
            }
            for (int i = 0; i < _length; ++i) if (_current[i] != 0) return true;
            _first = true;
            return false;
        }

        /// <summary>
        /// 重新初始化
        /// </summary>
        public void Reset()
        {
            for (int i = 0; i < _current.Length; ++i) _current[i] = 0;
            _first = true;
        }
    }


    public class Permutation
    {
        private int _length;
        private int[] _current;
        private bool _stop;
        /// <summary>
        /// 排列组合数据
        /// </summary>
        public int[] Current { get { return _current; } }
        /// <summary>
        /// 数据长度
        /// </summary>
        public int Length { get { return _length; } }

        /// <summary>
        /// 排列组合
        /// </summary>
        /// <param name="length">数据长度</param>
        public Permutation(int length)
        {
            _length = length;
            _current = new int[length];
            for (int i = 0; i < _current.Length; ++i) _current[i] = i;
            _stop = true;
        }

        /// <summary>
        /// 重新初始化
        /// </summary>
        public void Reset()
        {
            for (int i = 0; i < _current.Length; ++i) _current[i] = i;
            _stop = true;
        }

        /// <summary>
        /// 获取一个排列组合的数据
        /// </summary>
        /// <returns></returns>
        public bool Next()
        {
            if (_stop)
            {
                _stop = false;
                return true;
            }
            else
            {
                calc(0);
                _stop = false;
                if (_current[0] == _length) return false;
                return true;
            }
        }

        private void calc(int index)
        {
            if (index == _current.Length)
            {
                _stop = true;
                return;
            }
            if ((_current[index]!=-1) && ((index + 1) != _current.Length)) calc(index + 1);
            if (_stop) return;
            for (++_current[index]; _current[index] < _length; ++_current[index])
            {
                int n = 0;
                for (; n < index; ++n) if (_current[n] == _current[index]) break;
                if (n == index) calc(index + 1);
                if (_stop) return;
            }
            if (index != 0) _current[index] = -1;
        }
    }

作者:adream307 发表于2013-1-13 18:04:51 原文链接
阅读:0 评论:0 查看评论

    
[3]一个经典的递归算法题(实例+源码)
    来源: 互联网  发布时间: 2013-11-19

目的:动手做小程序

需求:这里有一组数:1、1、2、3、5、8、13、21、34、55......要求计算用这个递归算法,计算出这组数的第40个数是多少?

分析:分析这组数的规律,可以得知,每个数字是它之前两个数字之和(若该数前面不足两个数,则不足的数省为0)

实现:按照下图,在窗体中添加4个lable控件,用来显示文本和计算结果,1个button控件,1个textBox控件,控件的name属性和text属性值可以参考下面的图和源代码。

以下是可参考的程序源代码(C#):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Arithmetic
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }

        private void btn_Cal_Click(object sender, EventArgs e)
        {
            int P_int_temp;//定义整型变量
            if (int.TryParse(txt_value.Text, out P_int_temp))//为变量赋值
            {
                lb_result.Text =Get(P_int_temp).ToString();//输出计算结果
            }
            else
            {
                MessageBox.Show(//提示输入正确数值
                    "请输入正确的数值!", "提示!");
            }
        }

        /// <summary>
        /// 递归算法
        /// </summary>
        /// <param name="i">参与计算的数值</param>
        /// <returns>计算结果</returns>
        int Get(int i)
        {
            if (i <= 0)       //判断数值是否小于0
                return 0;      //返回数值0
            else if (i >= 0 && i <= 2)   //判断位数是否大于等于0并且小于等于2
                return 1;      //返回数值1
            else        //如果不满足上述条件执行下面语句
                return Get(i - 1) + Get(i - 2); //进行递归运算,返回指定位数前两位数的和
        }

    }
}

 

作者:xifeijian 发表于2013-1-13 18:43:53 原文链接
阅读:7 评论:0 查看评论

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3