1、所有的源文件统一新建到Classes里,否则无法找到源文件,这样也便于跨平台编译
 
2、绘图坐标系,与opengl采用相同坐标系,左下角为原点
纹理坐标系,以左上角为原点
 
3、最近有在学习COCOS2D,看到书中有使用SCENE_FUNC_CREATE这个宏
经查找,发现SCENE_NODE_FUNC这个宏在这个版本中并不存在(至少我没有找到)
抱着试一试的想法,直接换成CREATE_FUNC这个宏,发现程序可以正常运行。
如果有遇到这个问题的朋友,可以尝试将SCENE_NODE_FUNC 替换成CREATE_FUNC。
 
4、今天在项目中,又看了一下MoveTo和MoveBy,我以前理解错了一些!CCMoveBy::actionWithDuration(2, CCPointMake(80,80));这里的ccp(80,80)不是像ActionTo中的一样(屏幕上的目标坐标点);这里是偏移量(80,80) ? 这里不是点吗? 对,它对于CCMoveBy是相对于CCNode原先的坐标点横坐标向右偏移80个像素,纵坐标也偏移80个像素。
 
5、windows phone不支持MP3
 
6、真正的随机数??
关于随机数 cocos2d-x 定义了一个宏 CCRANDOM_0_1 生成的是 [0, 1] 之间的值
因此,要生成  [0-100] 之间的数    CCRANDOM_0_1 * 100
生成 [1,5]  之间的float 数,  就是 CCRANDOM_0_1 * 4 + 1
但是这个随机并不是真正的随机,你多试几次就会发现,每次都是固定的顺序产生,对于随机数我们一般都需要指定一个种子,让它依据这个种子产生。
这里采用当前时间生成随机种子:
srand(GetTickCount()+ rand()); 可惜的是GetTickCount()属于win,打包apk的时候会报错,经测试,简单点的方法是 srand(int(time(0))+ rand());
    cc_timeval psv; 
    CCTime::gettimeofdayCocos2d(&psv, NULL); 
    unsigned long int rand_seed = psv.tv_sec*1000 + psv.tv_usec/1000; 
    srand(rand_seed);
 
7、乱序数组内容
#include <vector>
#include <algorithm>
std::vector<int> randVector;
for(int i=1;i<=10;i++)
    {
        randVector.push_back(i);
    }
    std::random_shuffle(randVector.begin(),randVector.end());
 
8、检测触摸点是否在精灵内部
        if(sp->getBoundingBox().containsPoint(sp->convertTouchToNodeSpace(touch)))
        {
            touchNode = sp;
            break;
        }
 
9、
1. 当使用create的时候,都是被加入了autorelease的,所以如果需要使用的话,要记得retain一下啊,addchild自动retain了;
2. 如果使用的是new,那么就要记得不用的时候一定要release啊;
3. 一般来说cocos2dx的CCNode都是有create的,比如CCArray不用担心释放问题;
4. vector这些c++函数不要忘记释放内存啊;
5. 最好是不要混用,如果你对他们很清楚,ok,可以的;
6. 为了格式统一,我一般喜欢自己创建create函数。
 
10、避免手打输入项目cpp文件到android.mk里面编译
FILE_LIST := hellocpp/main.cpp
FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp)
LOCAL_SRC_FILES := hellocpp/main.cpp
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%) 
 
11、CClayer的锚点在0,0,而精灵的默认锚点为中点(0.5,0.5)
 
12、对象层添加触摸
this->setTouchEnabled(true);
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
在头文件添加函数
    bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
    void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
    void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
 
13、NDK调试
 
14、触摸屏蔽
在窗口弹出的情况下,要屏蔽底层的触摸,调用该层的setTouchEnable即可,注意,init在OnEnter之前调用,runing在OnEnter中这是true,所以在init函数中设置是否触摸没用。
 
15、Button添加点击监听的函数
void StartSence::startGame1(CCObject *sender,TouchEventType eventType)
{
    if (eventType == TOUCH_EVENT_BEGAN)
    {
 
    }
    if (eventType == TOUCH_EVENT_MOVED)
    {
        
    }
    if (eventType == TOUCH_EVENT_ENDED)
    {
 
    }
    if(eventType==TOUCH_EVENT_CANCELED)
    {
 
    }
}
 
16、
场景: cocos2dx 跨平台开发, 移植Android版本时, 当进行到build_native.sh步骤后
 
ndk版本: android-ndk-r9
 
开发环境: mac os 64bit, Android+Eclipse
 
BUG:
 
  CCCommon.cpp:54:77: error: format not a string literal and no format arguments [-Werror=format-security]
 
原因:
 
  android-ndk-r9与Eclipse的版本不兼容问题
 
方案之一(我搜到的):
 
  在对应项目的proj.android/jni/Application.mk添加一句话
 
  APP_CFLAGS += -Wno-error=format-security
 
  意思就是无视这个error
 
可以解决编译出错问题, 如有更好方案, 请不吝赐教.
 
17、开启重力感应
this->setKeypadEnabled(true);
GameUILayer::didAccelerate(CCAcceleration* pAccelerationValue)
 
18、异步加载plist
CCTextureCache::sharedTextureCache()->addImageAsync("ui_text.png",this,callfuncO_selector(CTestLayer::showSprite));
 
CCTexture2D* texture_ui_text=(CCTexture2D*)obj;//传入的obj即是异步生成的纹理
    CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("ui_text.plist",texture_ui_text);//通过纹理和.plist文件加入CCSpriteFrameCache
    CCSprite* raffle_b_friend=CCSprite::createWithSpriteFrameName("raffle_b_friend.png");//尽情使用小图片吧
 
19、动作序列的延迟,回调
CCSequence::create( CCDelayTime::create(0.3f),CCHide::create(),NULL)
(1).无发送者无数据回调:CCCallFunc,示例如下
(2).有发送者无数据回调:CCCallFuncN  (N是CCNode),示例如下
(3).有发送者有数据回调:CCCallFuncND  (N是CCNode,D是data,是void *类型)
 
20、error LNK2001: 无法解析的外部符号
最佳答案首先可以肯定地告诉你,出现这种错误,原因不在于编程平台或者编译器的某些文件,是你自己程序有问题。请检查一下自己的程序。上面提到的那几个函数,可能在你的class KSwordOnLineSever类里面定义了,但它的实现部分还没有写,看看是不是忘了?看看你是不是犯了如下所示的错误:class a{int x;public:void set(int p);};/*漏掉函数的实现部分:void a::set (int p){x = p;}*/这种错误不会在编译时被显示,因为它符合语法规则,但无法build!

Cocos2d-x 开发手记的更多相关文章

  1. [分享]源代码&开发手记:SAE应用“车百科” (Python + SAE + Bottle + Bootstrap) - Bottle - Python4cn(news, jobs)

    [分享]源代码&开发手记:SAE应用"车百科" (Python + SAE + Bottle + Bootstrap) - Bottle - Python4cn(news, ...

  2. cocos2d 游戏开发实战

    文章转自:http://uliweb.clkg.org/tutorial/read/40 6   cocos2d 游戏开发实战 6.1   创建cocos2d项目 6.2   cocos2d v3 & ...

  3. HoloLens开发手记 - HoloLens真机上手简评

    千呼万唤始出来,终于今天拿到了HoloLens真机. 使用体验 使用自带的应用录制了一段使用视频,如下 设备概览 包装盒 本体 试戴 实际效果 GalaxyExplorer试玩 全息图像贴到现实场景表 ...

  4. [转]Unity3D新手引导开发手记

    直接跳转吧  Unity3D新手引导开发手记 看到还不错就直接转过来了,我是有多懒啊

  5. [转]Nodejs开发框架Express4.x开发手记

    Express: ?web application framework for?Node.js? Express 是一个简洁.灵活的 node.js Web 应用开发框架, 它提供一系列强大的特性,帮 ...

  6. Doris开发手记4:倍速性能提升,向量化导入的性能调优实践

    最近居家中,对自己之前做的一些工作进行总结.正好有Doris社区的小伙伴吐槽向量化的导入性能表现并不是很理想,就借这个机会对之前开发的向量化导入的工作进行了性能调优,取得了不错的优化效果.借用本篇手记 ...

  7. 大型B2B网站开发手记 1

    本手记记录所有该B2B网站开发中遇到的问题和解决方法,一方面给大家一些思路,一方面提升自己,记录整个过程 1. 测试环境部署问题 部署环境是server2012 R2,部署上去发现WCF报错如下 sv ...

  8. APP开发手记01(app与web的困惑)

    文章链接:http://quke.org/post/app-dev-fragment.html (转载时请注明本文出处及文章链接) 最近在用博客园的wcf服务做博客园的android和ios的app, ...

  9. Doris开发手记2:用SIMD指令优化存储层的热点代码

    最近一直在进行Doris的向量化计算引擎的开发工作,在进行CPU热点排查时,发现了存储层上出现的CPU热点问题.于是尝试通过SIMD的指令优化了这部分的CPU热点代码,取得了较好的性能优化效果.借用本 ...

随机推荐

  1. 解决iptables和vsftpd设置的问题

    解决iptables和vsftpd设置的问题 博客分类: linux/centos/ubuntu 防火墙J#工作 解决iptables和vsftpd设置的问题 修改 vi /etc/sysconfig ...

  2. codeforces 439D Devu and Partitioning of the Array(有深度的模拟)

    题目 //参考了网上的代码 注意答案可能超过32位 //要达成目标,就是要所有数列a的都比数列b的要小或者等于 //然后,要使最小的要和最大的一样大,就要移动(大-小)步, //要使较小的要和较大的一 ...

  3. POJ 1470 Closest Common Ancestors (最近公共祖先LCA 的离线算法Tarjan)

    Tarjan算法的详细介绍,请戳: http://www.cnblogs.com/chenxiwenruo/p/3529533.html #include <iostream> #incl ...

  4. git的安装使用和代码自动部署

    1.安装 http://www.cnblogs.com/sunada2005/archive/2013/06/06/3121098.html http://www.cnblogs.com/zhcncn ...

  5. 屏蔽wordpress升级提示

    根据自己的需要,挑选适合的代码放在主题的functions.php文件中就可以了 /* 去除 WordPress 後台升級提示 */ // 2.8 ~ 2.9: add_filter('pre_tra ...

  6. C# TryXXXX模式

    public static int? TrayParse(string text) { int ret; if (int.TryParse(text,out ret)) { return ret; } ...

  7. 使用动态SQL语句实现简单的行列转置(动态产生列)

    原始数据如下图所示:(商品的销售明细)date=业务日期:Item=商品名称:saleqty=销售数量: -- 建立测试数据(表)create table test (Date varchar(10) ...

  8. PHP 反射机制Reflection

    简介 PHP Reflection API是PHP5才有的新功能,它是用来导出或提取出关于类.方法.属性.参数等的详细信息,包括注释. class Reflection { } interface R ...

  9. 对QT的理解——能在公司里不做Java,不做很偏门的产品,不使用偏门的语言,还有钱挣,要有感恩的心

    我的理解: QT做应用软件可以很强大,界面足够漂亮(最有意思的是QSS,让我刮目相看),应该是足够了.同时QT也提供了源码,不过超级复杂,难以理解,所以还是无法深入底层.另外它提供了一个额外的好处,就 ...

  10. ORACLE基本语法

    ORACLE基本语法 一.ORACLE的启动和关闭1.在单机环境下要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下su - oraclea.启动ORACLE系统oracle>s ...