第一个塔防游戏--学习笔记

来源:互联网 发布:快图浏览 知乎 编辑:程序博客网 时间:2024/04/27 23:26
屏幕适配:(在AppDelegate.cpp)
 CCEGLView* pEGLView =CCEGLView::sharedOpenGLView();
pEGLView->setDesignResolutionSize(480, 320, kResolutionNoBorder);


kResolutionExactFit:会靠拉伸来填满屏幕,本例来说背景图会变形来填充屏幕,因为1024:768=1.3, 480:320=1.5,宽高比不同,图片也就无法等比缩放来填满屏幕,只能变形了。
kResolutionNoBorder: 看不到黑边,实际就是宽高等比缩放,但缩放比例取宽比和高比之中大的那一个。
kResolutionShowAll:全部显示,可以理解为保证内容都显示在屏幕之内,实际也是宽高等比缩放,但缩放比例取宽比和高比之中小的那一个



全局变量(可以通过这个来方便新建)
  CC_SYNTHESIZE(int,level,Level);这个宏会创建getLevel()和setLevel(int)两个方法。
 CC_SYNTHESIZE_RETAIN();也很容易理解,是具有retain属性的变量。

加入的cpp文件都需要在android.mk里添加


资源配置等最好写在一个Resource.h里,cpp文件可以引入。h直接使用,方便以后修改

//判断碰撞

bool Army::collisionWithCircle(CCPoint circlePoint, float radius, CCPoint circlePointTwo, float radiusTwo)

{

    float xdif = circlePoint.x - circlePointTwo.x;

    float ydif = circlePoint.y - circlePointTwo.y;


    float distance = sqrt(xdif * xdif + ydif * ydif);


    if(distance <= radius + radiusTwo)

    {

        return true;

    }

    return false;

}

定时器schedule

调用update方法,需要在类生成时候加入scheduleUpdate(),对应终止方法为unscheduleUpdate();
定时执行
this->schedule(schedule_selector(Garden::myCallBack),1.0f);   //1秒执行
延时执行
在myCallBack中加入unschedule(schedule_selector(Garden::myCallBack));则可以做成延时执行
如果是action延时执行,则可以通过CCSequence::create(CCDelayTime::create(3.0f),XXX,NULL);

回调函数CCCallFunc

CCCallFunc   不带参数回调void

CCCallFuncN   带调用的对象自己去函数

CCCallFuncDN    带参数调用


my->runAction(CCCallFunc::create(thiscallfunc_selector(AirPort::damageTarget)));     //this为airport对象

my->runAction(CCCallFuncN::create(this, callfuncN_selector(AirPort::damageTarget)));   //传进去的my对象


void AirPort::damageTarget(CCSprite *arrow){}

my->runAction(CCCallFuncND::create(this, callfuncND_selector(AirPort::damageTarget), (void*)mInt))

跑酷:

1、schedule:在游戏中,要检测两个运动的物体什么时候否碰撞,就必须在每一帧中对两个物体的矩阵范围进行判断,是否出现相交。同样的,一些游戏动画,为了做出动画效果,我们在设置动作的同时,还需要对每一帧的画面进行布局,在cocos2d-x中就可以使用schedule()函数实现了。
跑酷中,时刻监控玩家触摸屏幕,需要执行角色jump的方法,包括位置和触摸屏幕的时间等等,相当于void update(float dt);函数,每一帧进行刷新,实时监控。
第一个参数schedule_selector,刷新时所要调用的方法,第二个参数为间隔的时间。
2、进行自定义宏  如:
#define INIT_BASIC_VIEW if(!BasicView::init()) \
{\
return false;\
}\
3、setScale:进行缩放,参数为负数的时候将掉转方向。
4、scheduleUpdate,同样可以进行更新,以帧为单位,同时写update方法。
5、锚点设置0~1,如果是精灵,默认为(0.5,0.5),即精灵的正中心;如果是layer,则默认为左下角(0,0)。
5、做为一个游戏,获取结点操作相当频繁,如果一直使用getchildbytag来取得,有时会使得游戏变得很卡,浪费了很多的cpu时间。从那以后的开发尽量少用或不用这个函数,改为成员变量比较好,减少了父结点遍历子结点的时间。从而提高程序的效率。


原创粉丝点击