读书人

【cocos2d-x入门实战】微信飞机大战之

发布时间: 2013-10-08 16:55:16 作者: rapoo

【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了

转载请表明地址:http://blog.csdn.net/jackystudio/article/details/11730601

不过明眼人一看就知道起飞的不是飞机,是背景,相对运动引起的错觉。


1.cocos2d-x引擎的坐标系

在这之前我们先了解一下cocos2d-x引擎中的坐标系:

(1)openGL & openGL ES坐标系。这也是触摸事件中使用的坐标系,原点在左上,坐标值往右下方向递增。

(2)世界坐标系。这是cocos2d-x中使用的坐标系。也是我们平常编程所使用的,原点在左下,坐标值往右上方向递增。

(3)节点坐标系。这是一个相对坐标系,是指节点一旦移动,和它关联的节点也会随之移动。

(1)和(2)之间的转换是我们经常要处理的,其实它们的纵坐标和即是屏幕的高。当然Cocos2d-x也提供了非常方便的转换函数给我们使用。



3.飞机要起飞了

不,背景要起飞了。

这里我们采用的办法是让2张一样的背景循环进行滚动,然后通过每次滚动的时间间隔和像素间隔来控制背景滚动的速度,也就是飞机飞行的速度。注意图1和图2是一模一样的,所以最后一步是用图1替换了图2。记住图片的高度必须比屏幕高度高,不然在图2走到(0,0)的时候会有黑边出现。。。

【cocos2d-x入门实战】微信飞机大战之三:飞机要起航了

bool GameLayer::init(){bool bRet=false;do {CC_BREAK_IF(!CCLayer::init());//png加入全局cache中CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("shoot_background.plist");//加载background1background1=CCSprite::create(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("background.png"));background1->setAnchorPoint(ccp(0,0));background1->setPosition(ccp(0,0));this->addChild(background1);//加载background2background2=CCSprite::create(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("background.png"));background2->setAnchorPoint(ccp(0,0));background2->setPosition(ccp(0,background2->getContentSize().height-2));//这里减2的目的是为了防止图片交界的黑线this->addChild(background2);//执行任务计划,实现背景滚动this->schedule(schedule_selector(GameLayer::backgroundMove),0.01f);bRet=true;} while (0);return bRet;}//背景滚动void GameLayer::backgroundMove(float dt){background1->setPositionY(background1->getPositionY()-2);background2->setPositionY(background1->getPositionY()+background1->getContentSize().height-2);if (background2->getPositionY()==0)//要注意因为背景图高度是842,所以每次减去2最后可以到达0,假如背景高度是841,那么这个条件永远达不到,滚动失败{background1->setPositionY(0);}}
调试运行,背景滚动的还不错,比较流畅。

1楼hankouhao3昨天 17:17
大神 这个教程一共要分几次
Re: jackyvincefu昨天 17:19
回复hankouhao3n我不是大神。。。我也不知道,把要点写完了就算完了。然后再写其他的。。。谢谢关注~

读书人网 >操作系统

热点推荐