cocos 杂记

一、Tile map

http://www.cocoachina.com/bbs/read.php?tid=196685

PointHelloWorld::tileCoordForPosition(Point position)

{

intx =position.x / _tileMap->getTileSize().width;

inty =((_tileMap->getMapSize().height * _tileMap->getTileSize().height) -position.y) / _tileMap->getTileSize().height;

returnPoint(x,y);

}

voidHelloWorld::setPlayerPosition(Pointposition)

{

Point tileCoord =this->tileCoordForPosition(position);

inttileGid= _blockage->getTileGIDAt(tileCoord);

if(tileGid){

autoproperties= _tileMap->getPropertiesForGID(tileGid).asValueMap();

if(!properties.empty()){

autocollision = properties["Blockage”].asString();

if("True"== collision) {

return;

}

}

}

_player->setPosition(position);

}

boolHelloWorld::init()

{

``````

for(auto&eSpawnPoint: objects->getObjects()){

ValueMap& dict =eSpawnPoint.asValueMap();

if(dict["Enemy"].asInt()== 1){

x =dict["x"].asInt();

y =dict["y"].asInt();

this->addEnemyAtPos(Point(x,y));

}

}``````

}

autocollectable =properties["Collectable"].asString();

if("True"==collectable) {

_blockage->removeTileAt(tileCoord);

_foreground->removeTileAt(tileCoord);

_player->setPosition(position);

}

二、创建一个新项目

D/work/andriod/android-ndk-r9d

D:\work\andriod\apache-ant-1.9.4

cdD:\work\Cocos2d_x\cocos2d-x-3.0

.\setup.py

cocosnew StageTool -p com.MyCompany.StageTool-l cpp -d .\tests

@echo off

echo =============新建项目==============

set /p name=请输入项目的名称:

echo 项目名为: %name%

echo 正在创建新项目...

set pk=com.mycom.

D:\work\Cocos2d_x\cocos2d-x-3.0\tools\project-creator\cocosnew %name% -p %pk%%name% -l cpp -d .\tests

echo 创建完成正在打开....

D:\work\Cocos2d_x\cocos2d-x-3.0\tests\%name%\proj.win32\%name%.vcxproj

Pause

TexturePacker

1. CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("images.plist");

2.CCSprite*sprite=CCSprite::createWithSpriteFrameName("grossini_dance_01.png");

使用16-bit纹理

最快速地减少纹理内存占用的办法就是把它们作为16位颜色深度的纹理来加载。cocos2d默认的纹理像素格式是32位颜色深度。如果把颜色深度减半,那么内存消耗也就可以减少一半。并且这还会带来渲染效率的提升,大约提高10%。

你可以使用CCTexture2D对象的类方法setDefaultAlphaPixelFormat来更改默认的纹理像素格式,代码如下:

你可以使用CCTexture2D对象的类方法setDefaultAlphaPixelFormat来更改默认的纹理像素格式,代码如下:

[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGB5A1];
[[CCTextureCache sharedTextureCache] addImage:@"ui.png"];
generate 32-bit textures: kCCTexture2DPixelFormat_RGBA8888 (default)
generate 16-bit textures: kCCTexture2DPixelFormat_RGBA4444
generate 16-bit textures: kCCTexture2DPixelFormat_RGB5A1
generate 16-bit textures: kCCTexture2DPixelFormat_RGB565 (no alpha)
 

理解在什么时候、在哪里去清除缓存

不要随机清除缓存,也可以心想着释放一些内存而去移除没有使用的纹理。s那不是好的代码设计。有时候,它甚至会增加加载次数,并多次引发“间歇内存飙高”。分析你的程序的内存使用,看看内存里面到底有什么,以及什么应该被清除,然后只清除该清除的。

你可以使用dumpCachedTextureInfo方法来观察哪些纹理被缓存了:

[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];

这个方法的输出如下:(为了清楚起见,我把那些与-hd后缀有关的信息屏蔽掉了)

cocos2d: "ingamescorefont.png" rc=9 name=ingamescorefont-hd.png id=13 128 x 64 @ 32 bpp => 32 KB
cocos2d: "ui.png" rc=15 name=ui-hd.png id=5 2048 x 2048 @ 16 bpp => 8192 KB
cocos2d: "ui-ingame.png" rc=36 name=ui-ingame-hd.png id=8 1024 x 1024 @ 16 bpp => 2048 KB
cocos2d: "digits.png" rc=13 name=digits-hd.png id=10 512 x 64 @ 16 bpp => 64 KB
cocos2d: "hilfe.png" rc=27 name=hilfe-hd.png id=6 1024 x 2048 @ 32 bpp => 8192 KB
cocos2d: "settings.png" rc=8 name=settings-hd.png id=9 1024 x 1024 @ 16 bpp => 2048 KB
cocos2d: "blitz_kurz.png" rc=1 name=(null) id=12 50 x 50 @ 32 bpp => 9 KB
cocos2d: "gameover.png" rc=8 name=gameover-hd.png id=7 1024 x 2048 @ 32 bpp => 8192 KB
cocos2d: "home.png" rc=32 name=home-hd.png id=4 2048 x 2048 @ 16 bpp => 8192 KB
cocos2d: "particleTexture.png" rc=2 name=(null) id=11 87 x 65 @ 32 bpp => 22 KB
cocos2d: "stern.png" rc=2 name=(null) id=2 87 x 65 @ 32 bpp => 22 KB
cocos2d: "clownmenu.png" rc=60 name=clownmenu-hd.png id=1 1024 x 2048 @ 32 bpp => 8192 KB
cocos2d: CCTextureCache dumpDebugInfo: 13 textures using 60.1 MB (纹理总共占用的内存大小!!!)

上面包含了非常多有用的信息。纹理的大小、颜色深度(bpp)和每一个被缓存的纹理在内存中所占用大小等。这里的“rc”代表纹理的“引用计数”。如果这个引用计数等于1或2的话,那么意味着,这个纹理当前可能不会需要使用了,此时,你可以放心地把它从纹理cache中移除出去。

SpriteFrames retain textures!

上面提到的例子中,纹理的引用计数可能有点让人看不懂。你会发现,纹理集有很高的retain count,即使你知道这些纹理集中的纹理当前并没有被使用。

你可能忽略了一件事:CCSprteFrame会retain它的纹理。因此,如果你使用了纹理集,你要完全移除它不是那么容易。因为,由这个纹理集产生的sprite frame还是保留在内存中。所以,你必须调用CCSpriteFrameCache的removeSpriteFramesFromTexture方法,能彻底清除纹理缓存中的纹理集。(译注:记住,不是你调用对象的release方法了,对象的内存就会被释放掉,而是引用计数为0了,内存才会被删除)

[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromTexture:uncachedTexture];

你也可以使用removeSpriteFramesFromFile,并指定一个纹理集的.plist文件来清除缓存起来的精灵帧(spriteframes).

s

杂记:

@Override是什么意思

@Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处:

1、可以当注释用,方便阅读

2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错比如你如果没写@Override而你下面的方法名又写错了,这时你的编译器是可以通过的(它以为这个方法是你的子类中自己增加的方法)

example:

在重写父类的onCreate时,在方法前面加上@Override系统可以帮你检查方法的正确性。

例如,public void onCreate(BundlesavedInstanceState){…….}这种写法是正确的,

如果你写成public void oncreate(BundlesavedInstanceState){…….}

这样编译器回报如下错误——

The method oncreate(Bundle) of type HelloWorld must override orimplement a supertype method

以确保你正确重写onCreate方法。(因为oncreate应该为onCreate

而如果你不加@Override,则编译器将不会检测出错误,而是会认为你新定义了一个方法oncreate

final函数和类

C++11的关键字final有两个用途。第一,它阻止了从类继承;第二,阻止一个虚函数的重载。

__declspec(deprecated )


用__declspec(deprecated ) 说明一个函数,类型,或别的标识符在新的版本或未来版本中不再支持,你不应该用这个函数或类型。它和#pragma deprecated作用一样。

C++11新特性:Range-based for loops

收藏我要投稿

很多语言都有Range-based forloops这个功能,现在C++终于知道把这个重要功能加进语法中了。这个功能实在不知道该怎么翻译,语文没有学到家。

基本语法

[cpp]
for ( range_declaration : range_expression)loop_statement

比如说:
[cpp]
vector<int> vec;
vec.push_back( 1 );
vec.push_back( 2 );

for (int i : vec )
{
cout << i;
}
for
语言这么写可以很方便地遍历vector这类的容器。具体什么样的东西可以遍历呢?这个留在后面说。

对于比较复杂的容器可以用auto语句来简化类型声明

[cpp]
map<string,string> complexVector;
for ( auto complexVectorEntry : complexVector )
{
cout<< complexVectorEntry.first << " < " <<complexVectorEntry.second << ">" << endl;
}


这两个例子中都没有修改遍历元素的值。如果你要想修改它们的值,请使用引用类型
[cpp]
vector<int> vec;
vec.push_back( 1 );
vec.push_back( 2 );

for (auto& i : vec )
{
i++;
}

请注意,你依然可以用continue语句来开始下一次迭代,使用break跳出循环。这一点和普通的for循环一样。

深入分析
[cpp]
for ( range_declaration : range_expression)loop_statement

“等价于”
[cpp]
{
auto && __range = range_expression ;
auto __begin = begin_expr(__range);
auto __end = end_expr(__range);
for (;__begin != __end; ++__begin) {
range_declaration =*__begin;
loop_statement
}
}


请注意,“等价于”并不表示编译器就是这么实现range-based for loops的。只是说两者的运行效果等价
上面最重要的就是 begin_expr 和 end_expr 的定义如下:
对于数组类型 begin_expr和end_expr分别等于(__range)和(__range + __bound)
对于STL中的容器,两者分别等于__range.begin()和__range.end()
对于其他类型,两者分别等于begin(__range)和end(__range)。编译器将会通过参数类型来找到合适的begin和end函数
让自定义的类可以迭代

通过ranged-based for loops的等价语句可以看出,可以知道只要符合一定的要求,那么自己定义的类也可以放在ranged-based for loops中进行迭代。事实上要想进行迭代,一个类需要满足以下条件:
begin函数和end函数,作用是分别指向第一个数据和最后一个数据。返回值是一个可以自己定义的迭代器。既可以是成员函数,也可以是非成员函数。
迭代器本身支持* ++ !=运算符,既可以是成员函数,也可以是非成员函数。
比如说下面这个类:


[cpp]
#include <iostream>

using namespace std;


class IntVector;

class Iter
{
public:
Iter (const IntVector* p_vec,int pos)
: _pos( pos )
,_p_vec( p_vec )
{ }

// these three methods form the basis of an iterator for usewith
// a range-based for loop
bool
operator!= (const Iter& other) const
{
return _pos != other._pos;
}

// this method must be defined after the definition ofIntVector
// since it needs to use it
int operator* () const;

const Iter& operator++ ()
{
++_pos;
return *this;
}

private:
int _pos;
const IntVector *_p_vec;
};

class IntVector
{
public:
IntVector ()
{
}

int get (int col) const
{
return _data[ col ];
}
Iter begin () const
{
return Iter( this,0 );
}

Iter end () const
{
return Iter( this,100 );
}

void set (int index,int val)
{
_data[ index ] = val;
}

private:
int _data[ 100 ];
};

int
Iter::operator* () const
{
return _p_vec->get( _pos );
}


int main()
{
www.2cto.com
IntVector v;
for ( int i = 0; i < 100; i++ )
{
v.set( i,i );
}
for ( int i : v ) { cout << i << endl; }
}

JDK:配置环境变量:

新建环境变量:JAVA_HOME值为:D:\Program Files\Java\jdk1.7.0

新建环境变量:CLASSPATH值为:.;%JAVA_HOME%\lib;(注意:点号表示当前目录,不能省略)

在系统变量Path的值的前面加入以下内容:%JAVA_HOME%\bin;(注意:这里的分号不能省略)到这里,JDK安装完毕。

单击开始”—>“运行”—>输入:cmd命令,在CMD窗口中输入:java –version

python

1. 首先需要在系统中注册python环境变量:假设python的安装路径为c:\python2.6,则修改我的电脑->属性->高级->环境变量->系统变量中的PATH为:

(为了在命令行模式下运行Python命令,需要将python.exe所在的目录附加到PATH这个环境变量中。)

PATH=PATH;c:\python26

上述环境变量设置成功之后,就可以在命令行直接使用python命令。或执行"python *.py"运行python脚本了。

2. 此时,还是只能通过"python *.py"运行python脚本,若希望直接运行*.py,只需再修改另一个环境变量PATHEXT:

PATHEXT=PATHEXT;.PY;.PYM

3. 另外,在使用python的过程中,可能需要经常查看某个命令的帮助文档,如使用help('print')查看print命令的使用说明。默认安装的python无法查看帮助文档,尚需进行简单的配置:

在python安装目录下,找到python25.chm,使用hh -decompile .python26.chm将其反编译出来,然后将其所在的目录加入到上面提到的PATH环境变量中即可。

Android 运行

你可以运行一下示例...

使用命令行:

$ cd cocos2d-x
$ ./setup.py
$ cd build
$ ./android-build.py cpp-empty-test -p 10
$ adb install cocos2d-x/tests/cpp-empty-test/proj.android/bin/CppEmptyTest-debug.apk
 
$ cd cocos2d-x/build
$ python ./android-build.py cpp-empty-test -p 10
$ adb install ../tests/cpp-empty-tst/proj.android/bin/CppEmptyTest-debug.apk

然后点击安卓设备上的程序运行测试例,-p指定了 Android API 等级,cocos2d-x 支持 level10 以上。

使用Eclipse

$ cd cocos2d-x
$ ./setup.py
$ cd build
$ ./android-build.py cpp-empty-test -p 10

然后

  • 把 cocos2d-x Android 项目导入 Eclipse 中,导入的路径是cocos/2d/platform/android
  • cpp-empty-testAndroid 项目导入 Eclipse 中,导入的路径是tests/cpp-empty-test/proj.android
  • 编译cpp-empty-testAndroid 项目,然后运行即可

·cocos2d-x TiledMap黑边问题

· 在用TiledMap作为地图,当放大或者缩小时,会出现黑点或者黑边,解决办法:将ccConfig.h中

·#ifndefCC_FIX_ARTIFACTS_BY_STRECHING_TEXEL
#define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 1

·#endif

黑边

SetAliasTexParameters

20131213日补充】:

对于裂缝、黑边、模糊、透明等问题,这里Himi再详细描述补充下:

1.首先如果你使用TPTexturepacker)进行的图片打包的话:

首先确定是否打包时,帧之间保证了>=1像素距离。

然后确定是否勾选了”premultplyalhpa”这一项(应该勾选)

最后确认你项目中是否设置了如下代码:

CCTexture2D::PVRImagesHavePremultipliedAlpha(true);

如上代码设置的作用是

2.图片缩放后模糊透明问题

首先cocos2d/cocos2dx引擎中,默认的贴图设置了抗锯齿,如下函数:

setAntiAliasTexParameters()//设置抗锯齿(但是会模糊透明)

那么缩放后的图片由于设置了抗锯齿会造成图片边缘模糊透明,所以对此的解决方式,我们单独处理缩放的图进行设置非抗锯齿,如下函数:

setAliasTexParameters() //设置非抗锯齿(但是不抗锯齿)

3.图片感觉模糊不清晰

首先对于此问题的原因是:引擎默认使用的是透视投影模式,此模式的效果为近大远小的效果,所以远处的则模糊不清晰

所以我们如果想让整体所有贴图清晰,那么我们可以设置引擎为正交投影模式即可,如下代码设置:

CCDirector::sharedDirector()->setProjection(kCCDirectorProjection2D);

OK,完美解决;

简化ANDROID.MK 一次加*cpp

#遍历目录及子目录的函数

define walk

$(wildcard$(1)) $(foreach e,$(wildcard $(1)/*),$(call walk,$(e)))

endef

#遍历Classes目录

ALLFILES = $(call walk,$(LOCAL_PATH)/../../Classes)

FILE_LIST := hellocpp/main.cpp

#从所有文件中提取出所有.cpp文件

FILE_LIST += $(filter %.cpp,$(ALLFILES))

LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes

详解cocos2dx 3.0的release版本在android平台的签名过程

当您的游戏准备发布前,需要编译成为release版本,命令中需要增加 -m release,编译命令如下:

cocoscompile -p android -m release

在编译结束后,生成xxx_release_unsigned.apk,此时会提示进行签名,需要输入.keystore的路径。

.keystore的生成方法

使用keytool,命令如下:

keytool -genkey -v -keystoremy-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity10000



Keytool 选项

描述

-genkey

生成一个key pair (公钥和私钥)

-v

允许详细内容输出.

-alias <alias_name>

key的别名.只会用到前8个字符.

-keyalg <alg>

生成key时的加密算法.支持 DSA RSA.

-keysize <size>

生成的key的大小(bits).如果不提供,Keytool使用默认的Key大小:1024.
通常情况下,我们推荐使用 2048或者更大的key尺寸.

-dname <name>

描述key的创建者的标识名称. 在自签名证书中,本参数会出现在发布者和主题字段.
注意, 不要在命令行下指定这个选项. 此时 Jarsigner会提示你输入每一个标识名称字段(CN,OU,)

-keypass <password>

key的密码.安全起见,不要在命令行中包含这个选项. 此时Keytool会提示你输入密码.
这种方式中, 密码不会被保存在shell历史数据中.

-validity <valdays>

key的有效期,以天数为单位.注意:推荐使用10000或更大的数字.

-keystore <keystore-name>.keystore

保存私钥的keystore名称.

-storepass <password>

keystore的密码. 安全起见,不要在命令行中包含这个选项.
此时,Keytool会提示输入这个密码.
在这种方式中, 密码不会被保存在shell历史数据中.




生成keystore后,按照提示输入即可,注意此处输入的alias_name要与.keystore中的一致。



cocos2dx 3.0 事件分发机制详解

540人阅读 评论(0) 收藏 举报


首先3.0中使用两个vector来存储事件监听器:

std::vector<EventListener*>* _fixedListeners; 存储fixedListener

std::vector<EventListener*>* _sceneGraphListeners; 存储SceneGraphListener

然后事件通过cocos2dx的EventDispatcher中的dispatchEvent函数来传递,

传递主要针对上述两个ListenerVector

是对fixedListener 和 sceneGraphListener进行排序(fixedListeners按照fixedPriority从小到大的顺序进行排序,sceneGraphListeners按照priority由大到小排序,这里估计是按照显示层级来排序了)

其次,对排序后的两个listeners 数组进行事件传递,传递的原则是首先把事件传递到fixedLisener中优先级<0的Lisener中,如果事件被处理则break终止传递,如果不被处理则传递到sceneListener中,同理不被处理继续传递到fixedListener中优先级>0的Listener中,直到事件被处理或者被丢弃(没有任何节点处理)。

至此完成了一个事件传递过程。

cocos2d-x 3.0 获取时间的方式

1.获取时间的方式是:

gettimeofday(&start,NULL);


2.计算两个时间的差的方法需要自己写

double timersubCocos2d(struct timeval *start,struct timeval *end) { if (! start || ! end) { return 0; } return ((end->tv_sec*1000.0+end->tv_usec/1000.0) - (start->tv_sec*1000.0+start->tv_usec/1000.0)); }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


    本文实践自 RayWenderlich、Ali Hafizji 的文章《How To Create Dynamic Textures with CCRenderTexture in Cocos2D 2.X》,文中使用Cocos2D,我在这里使用Cocos2D-x 2.1.4进行学习和移植。在这篇文章,将会学习到如何创建实时纹理、如何用Gimp创建无缝拼接纹
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@163.com微信公众号:HopToad 欢迎转载,转载标注出处:http://blog.csdn.netotbaron/article/details/424343991.  软件准备 下载地址:http://cn.cocos2d-x.org/download 2.  简介2.1         引用C
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从Cocos2D-x官网上下载,进入网页http://www.cocos2d-x.org/download,点击Cocos2d-x以下的Download  v3.0,保存到自定义的文件夹2:从python官网上下载。进入网页https://www.python.org/downloads/,我当前下载的是3.4.0(当前最新
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发引擎,易学易用,支持多种智能移动平台。官网地址:http://cocos2d-x.org/当前版本:2.0    有很多的学习资料,在这里我只做为自己的笔记记录下来,错误之处还请指出。在VisualStudio2008平台的编译:1.下载当前稳
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《最强大脑》娱乐节目。将2048改造成一款挑战玩家对数字记忆的小游戏。邮箱:appdevzw@163.com微信公众号:HopToadAPK下载地址:http://download.csdn.net/detailotbaron/8446223源码下载地址:http://download.csdn.net/
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试以QtCreatorIDE来进行CMake构建。Cocos2d-x3.X地址:https://github.com/cocos2d/cocos2d-x1.打开QtCreator,菜单栏→"打开文件或项目...",打开cocos2d-x目录下的CMakeLists.txt文件;2.弹出CMake向导,如下图所示:设置
 下载地址:链接:https://pan.baidu.com/s/1IkQsMU6NoERAAQLcCUMcXQ提取码:p1pb下载完成后,解压进入build目录使用vs2013打开工程设置平台工具集,打开设置界面设置: 点击开始编译等待编译结束编译成功在build文件下会出现一个新文件夹Debug.win32,里面就是编译
分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net前言上次用象棋演示了cocos2dx的基本用法,但是对cocos2dx并没有作深入的讨论,这次以超级马里奥的源代码为线索,我们一起来学习超级马里奥的实
1. 圆形音量button事实上作者的本意应该是叫做“电位计button”。可是我觉得它和我们的圆形音量button非常像,所以就这么叫它吧~先看效果:好了,不多解释,本篇到此为止。(旁白: 噗。就这样结束了?)啊才怪~我们来看看代码:[cpp] viewplaincopyprint?CCContro
原文链接:http://www.cnblogs.com/physwf/archive/2013/04/26/3043912.html为了进一步深入学习贯彻Cocos2d,我们将自己写一个场景类,但我们不会走的太远,凡是都要循序渐进,哪怕只前进一点点,那也至少是前进了,总比贪多嚼不烂一头雾水的好。在上一节中我们建
2019独角兽企业重金招聘Python工程师标准>>>cocos2d2.0之后加入了一种九宫格的实现,主要作用是用来拉伸图片,这样的好处在于保留图片四个角不变形的同时,对图片中间部分进行拉伸,来满足一些控件的自适应(PS: 比如包括按钮,对话框,最直观的形象就是ios里的短信气泡了),这就要求图
原文链接:http://www.cnblogs.com/linji/p/3599478.html1.环境和工具准备Win7VS2010/2012,至于2008v2版本之后似乎就不支持了。 2.安装pythonv.2.0版本之前是用vs模板创建工程的,到vs2.2之后就改用python创建了。到python官网下载版本2.7.5的,然后
环境:ubuntu14.04adt-bundle-linux-x86_64android-ndk-r9d-linux-x86_64cocos2d-x-3.0正式版apache-ant1.9.3python2.7(ubuntu自带)加入环境变量exportANDROID_SDK_ROOT=/home/yangming/adt-bundle-linux/sdkexportPATH=${PATH}:/$ANDROID_SDK_ROOTools/export
1开发背景游戏程序设计涉及了学科中的各个方面,鉴于目的在于学习与进步,本游戏《FlappyBird》采用了两个不同的开发方式来开发本款游戏,一类直接采用win32底层API来实现,另一类采用当前火热的cocos2d-x游戏引擎来开发本游戏。2需求分析2.1数据分析本项目要开发的是一款游
原文链接:http://www.cnblogs.com/linji/p/3599912.html//纯色色块控件(锚点默认左下角)CCLayerColor*ccc=CCLayerColor::create(ccc4(255,0,0,128),200,100);//渐变色块控件CCLayerGradient*ccc=CCLayerGradient::create(ccc4(255,0,0,
原文链接:http://www.cnblogs.com/linji/p/3599488.html//载入一张图片CCSprite*leftDoor=CCSprite::create("loading/door.png");leftDoor->setAnchorPoint(ccp(1,0.5));//设置锚点为右边中心点leftDoor->setPosition(ccp(240,160));/
为了答谢广大学员对智捷课堂以及关老师的支持,现购买51CTO学院关老师的Cocos2d-x课程之一可以送智捷课堂编写图书一本(专题可以送3本)。一、Cocos2d-x课程列表:1、Cocos2d-x入门与提高视频教程__Part22、Cocos2d-x数据持久化与网络通信__Part33、Cocos2d-x架构设计与性能优化内存优
Spawn让多个action同时执行。Spawn有多种不同的create方法,最终都调用了createWithTwoActions(FiniteTimeAction*action1,FiniteTimeAction*action2)方法。createWithTwoActions调用initWithTwoActions方法:对两个action变量初始化:_one=action1;_two=action2;如果两个a
需要环境:php,luajit.昨天在cygwin上安装php和luajit环境,这真特么是一个坑。建议不要用虚拟环境安装打包环境,否则可能会出现各种莫名问题。折腾了一下午,最终将环境转向linux。其中,luajit的安装脚本已经在quick-cocos2d-x-develop/bin/中,直接luajit_install.sh即可。我的lin
v3.0相对v2.2来说,最引人注意的。应该是对触摸层级的优化。和lambda回调函数的引入(嗯嗯,不枉我改了那么多类名。话说,每次cocos2dx大更新。总要改掉一堆类名函数名)。这些特性应该有不少人研究了,所以今天说点跟图片有关的东西。v3.0在载入图片方面也有了非常大改变,仅仅只是