cocos2d-x学习五结合四增加音乐、场景


新场景

#pragma once

#include "cocos2d.h"

class GmOvLayer : public cocos2d::CCLayerColor
{
public:
	GmOvLayer(void);
	virtual ~GmOvLayer(void);
	bool init();
	CREATE_FUNC(GmOvLayer);
	static cocos2d::CCScene* scene();
	void setLableCont(char *str);
	void menuHandle(CCObject* pSender);

private:
	cocos2d::CCLabelTTF *m_lb;
};




要让cocos2d-x 来管理内存对象 ,你所写的每一个对象必须继承 于ccobject .

如果是new 出来的对象 ,初始retainCount 为1 , 这个对象 默认是由你 手动来释放的 (调用ccobject 的release , 如果retainCount 为0 ,cocos2d-x会delete 掉这个对象)。

如果new 出来的对象调用 了autorelease(),对象 就完全由cocos2d-x来管理,你不需要去手动release ,它会在某一时刻来自动release.

注意:

1. 当对象没有调用autorelease 时,retainCount 还为1, 那么需要你手动release.否则内存溢出。

2. 如果对象调用 了autorelease ,但是后面你如果还想用到这个对象你需要手工retain一下。 retain 会导致retainCount 加1 ,所以retain后,如果你不想用了记得release掉。


#include "GmOvLayer.h"
#include "HelloWorldScene.h"

USING_NS_CC;

GmOvLayer::GmOvLayer(void)
{
}


GmOvLayer::~GmOvLayer(void)
{
	if(m_lb)
	{
		m_lb->release();
	}
}

CCScene* GmOvLayer::scene()
{
	CCScene *scene = CCScene::create();
	GmOvLayer *layer = GmOvLayer::create();
	layer->setTag(100);
	scene->addChild(layer);

	return scene;
}

bool GmOvLayer::init()
{
	if(!CCLayerColor::initWithColor(ccc4(255,0,0,255)))
	{
		return false;
	}

	CCSize size = CCDirector::sharedDirector()->getVisibleSize();

	CCMenuItemImage *pBackItem = CCMenuItemImage::create(
                                        "button2.png",
                                        "button2.png",
                                        this,
                                        menu_selector(GmOvLayer::menuHandle));
	pBackItem->setPosition(pBackItem->getContentSize().width/2,pBackItem->getContentSize().height/2);
    CCMenu* pMenu = CCMenu::create(pBackItem, NULL);
	pMenu->setPosition(CCPointZero);
    this->addChild(pMenu, 1);	
		
	m_lb = CCLabelTTF::create("word","artial",40);
	m_lb->setPosition(ccp(size.width/2,size.height/2));
	this->addChild(m_lb);
	m_lb->retain();//保证m_lb跟类对象有相同生命周期

	return true;
}

void GmOvLayer::menuHandle(CCObject* pSender)
{
	CCDirector::sharedDirector()->replaceScene(HelloWorld::scene());
}

void GmOvLayer::setLableCont(char *str)
{
	m_lb->setString(str);
}



主场景

添加背景音乐

bool HelloWorld::init()
{
    //
    // 1. super init first
    if ( !CCLayerColor::initWithColor(ccc4(255,255,255,255)))
    {
        return false;
    } 
	m_arrTar = new CCArray;
	m_arrPro = new CCArray;
	m_nSucessedCount = 0;

	CCSize screenSize = CCDirector::sharedDirector()->getVisibleSize();

	CCSprite *pSprite = CCSprite::create("Player.png");
	pSprite->setPosition(ccp(20.0,screenSize.height/2));
	this->addChild(pSprite);   

	this->schedule(schedule_selector(HelloWorld::time),2);
	this->schedule(schedule_selector(HelloWorld::update));
	this->setTouchEnabled(true);

	CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("background-music-aac.wav",true);      

    return true;
}


添加发射子弹音乐

void HelloWorld::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent) 
{
	CCTouch *touch = (CCTouch *)pTouches->anyObject();
	CCPoint locInVw = touch->getLocationInView();
	CCPoint locInGl = CCDirector::sharedDirector()->convertToGL(locInVw);

	CCSize screenSize = CCDirector::sharedDirector()->getVisibleSize();
	CCSprite *proj = CCSprite::create("Projectile.png");
	proj->setPosition(ccp(20.0,screenSize.height/2.0));
	this->addChild(proj);
	m_arrPro->addObject(proj);
	proj->setTag(2);
	CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("pew-pew-lei.wav");      

	double dx = locInGl.x - 20;
	double dy = locInGl.y - screenSize.height/2.0;
	double d = sqrt(dx*dx + dy*dy);

	double D = sqrt(screenSize.width * screenSize.width + screenSize.height * screenSize.height);
	double ratio = D/d;
	double endx = ratio * dx + 20;
	double endy = ratio *dy + screenSize.height/2.0;

	CCMoveTo *move = CCMoveTo::create(D/320,ccp(endx,endy));
	CCCallFuncN *sd = CCCallFuncN::create(this,callfuncN_selector(HelloWorld::selfdefinedAc));
	CCSequence *actions = CCSequence::create(move,sd,NULL);
	proj->runAction(actions);
}	


添加打怪5个切换成功界面

void HelloWorld::update(float val)
{
	CCObject *tar,*pro;
	if(5 == m_nSucessedCount)
	{
		switchScene("success");
	}
	CCARRAY_FOREACH(m_arrTar,tar)
	{
		CCSprite *pTar = (CCSprite *)tar;
		CCRect rtTar = CCRectMake(pTar->getPosition().x,pTar->getPosition().y,pTar->getContentSize().width
			,pTar->getContentSize().height);

		CCARRAY_FOREACH(m_arrPro,pro)
		{
			CCSprite *pPro = (CCSprite *)pro;
			CCRect rtPro = CCRectMake(pPro->getPosition().x,pPro->getPosition().y,pPro->getContentSize().width
				,pPro->getContentSize().height);
			if(rtPro.intersectsRect(rtTar))
			{
				m_arrTar->removeObject(pTar);
				m_arrPro->removeObject(pPro);		
				pTar->removeFromParentAndCleanup(true);
				pPro->removeFromParentAndCleanup(true);
				m_nSucessedCount ++;
				break;
			}
		}
	}
}


添加有没打到的怪切换失败界面

void HelloWorld::selfdefinedAc(CCNode* pSender)
{
	pSender->removeFromParentAndCleanup(true);
	int tag = pSender->getTag();
	if(1 == tag)
	{
		m_arrTar->removeObject(pSender);
		switchScene("failed");
	}
	else if(2 == tag)
	{
		m_arrPro->removeObject(pSender);
	}
}


添加切换界面方法

void HelloWorld::switchScene(char* str)
{	
	CCScene *scene = GmOvLayer::scene();
	GmOvLayer *goLayer = (GmOvLayer *)scene->getChildByTag(100);
	goLayer->setLableCont(str);
	CCDirector::sharedDirector()->replaceScene(scene);
	m_nSucessedCount = 0;
}




基于SSM框架的智能家政保洁预约系统,是一个旨在提高家政保洁服务预约效率和管理水平的平台。该系统通过集成现代信息技术,为家政公司、家政服务人员和消费者提供了一个便捷的在线预约和管理系统。 系统的主要功能包括: 1. **用户管理**:允许消费者注册、登录,并管理他们的个人资料和预约历史。 2. **家政人员管理**:家政服务人员可以注册并更新自己的个人信息、服务类别和服务时间。 3. **服务预约**:消费者可以浏览不同的家政服务选项,选择合适的服务人员,并在线预约服务。 4. **订单管理**:系统支持订单的创建、跟踪和管理,包括订单的确认、完成和评价。 5. **评价系统**:消费者可以在家政服务完成后对服务进行评价,帮助提高服务质量和透明度。 6. **后台管理**:管理员可以管理用户、家政人员信息、服务类别、预约订单以及处理用户反馈。 系统采用Java语言开发,使用MySQL数据库进行数据存储,通过B/S架构实现用户与服务的在线交互。系统设计考虑了不同用户角色的需求,包括管理员、家政服务人员和普通用户,每个角色都有相应的权限和功能。此外,系统还采用了软件组件化、精化体系结构、分离逻辑和数据等方法,以便于未来的系统升级和维护。 智能家政保洁预约系统通过提供一个集中的平台,不仅方便了消费者的预约和管理,也为家政服务人员提供了一个展示和推广自己服务的机会。同时,系统的后台管理功能为家政公司提供了强大的数据支持和决策辅助,有助于提高服务质量和管理效率。该系统的设计与实现,标志着家政保洁服务向现代化和网络化的转型,为管理决策和控制提供保障,是行业发展中的重要里程碑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MyObject-C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值