cocos2d-x3.0打飞机发子弹

来源:互联网 发布:mac java 安装 编辑:程序博客网 时间:2024/04/29 17:22

如有雷同,我是抄袭 偶尔e网事 童鞋的。偷笑

其实我就是讨厌cocos2d-x滥用单例类,作用划分的不清晰。。。。。

在GameLayer里加入planeLayer和BulletLayer。同时因为BulletLayer里子弹的初始位置在飞机sprite的头部,所以需要持有sprite,所以要把planeLayer的实例传给BulletLayer。

因此BulletLayer是酱紫:

class BulletLayer : public Layer{public:BulletLayer(PlaneLayer* apGameLayer);~BulletLayer();void AddBullet(float dt);void StartShoot(float dt);void MoveFinished(Node* pSender);private:SpriteBatchNode* m_pBulletBatchNode;CCArray* m_pAllBulletArray;PlaneLayer* m_pPlaneLayer;};#include "BulletLayer.h"#include "GameLayer.h"#include <functional>BulletLayer::BulletLayer(PlaneLayer* apGameLayer): m_pPlaneLayer(apGameLayer){bool res = cocos2d::Layer::init();Texture2D* lpTexTure = TextureCache::sharedTextureCache()->addImage("shoot.png");m_pBulletBatchNode = SpriteBatchNode::createWithTexture(lpTexTure);addChild(m_pBulletBatchNode);m_pAllBulletArray = Array::create();}void BulletLayer::AddBullet( float dt ){Sprite* bullet = Sprite::createWithSpriteFrameName("bullet1.png");m_pBulletBatchNode->addChild(bullet);Point planePoint = m_pPlaneLayer->getChildByTag(1)->getPosition();Size planeSize = m_pPlaneLayer->getChildByTag(1)->getContentSize();const Point bulletPos = ccp(planePoint.x, planePoint.y+planeSize.height/2); bullet->setPosition(bulletPos);float length = CCDirector::sharedDirector()->getWinSize().height + planeSize.height/2-bulletPos.y;float velocity = 420/1;float realMoveDuration = length/velocity;FiniteTimeAction* actionMove = MoveTo::create(realMoveDuration,ccp(bulletPos.x,CCDirector::sharedDirector()->getWinSize().height + planeSize.height/2));FiniteTimeAction* actionDone = CCCallFuncN::create(this,callfuncN_selector(BulletLayer::MoveFinished));Sequence* sequence = Sequence::createWithTwoActions(actionMove,actionDone);bullet->runAction(sequence);}void BulletLayer::StartShoot( float dt ){schedule(schedule_selector(BulletLayer::AddBullet),0.2f, kRepeatForever,dt);}void BulletLayer::MoveFinished(Node* pSender){Sprite* bullet = static_cast<Sprite*>(pSender);m_pBulletBatchNode->removeChild(bullet, true);bullet->release();}BulletLayer::~BulletLayer(){}

这里一点经验,如果有互相包含的话,一定要用前置声明,这里我偷懒了,不过编译没问题。好吧,大家要看源码,去下载吧。

http://pan.baidu.com/share/link?shareid=4044277731&uk=153311302



原创粉丝点击