(cocos2dx)使用__Array容器检测碰撞时间

(cocos2dx)使用__Array容器检测碰撞时间,第1张

概述同样是学了别人教学视屏上的代码,但是在执行的时候发现在使用CCArray的时候,运行会报错。 然后我就翻了一下书,CCArray是2.x版本的,3.x是用__Array。 两者在创建时是有所不同的。 后来我就把里面用CCArray定义的都改成__Array来定义,就能正常运行。 #include "HelloWorldScene.h"USING_NS_CC;Scene* HelloWorl

同样是学了别人教学视屏上的代码,但是在执行的时候发现在使用CCArray的时候,运行会报错。

然后我就翻了一下书,CCArray是2.x版本的,3.x是用__Array。

两者在创建时是有所不同的。

后来我就把里面用CCArray定义的都改成__Array来定义,就能正常运行。


#include "HelloWorldScene.h"USING_NS_CC;Scene* HelloWorld::createScene(){    // 'scene' is an autorelease object    auto scene = Scene::create();        // 'layer' is an autorelease object    auto layer = HelloWorld::create();    // add layer as a child to scene    scene->addChild(layer);    // return the scene    return scene;}// on "init" you need to initialize your instancebool HelloWorld::init(){    //////////////////////////////    // 1. super init first	if ( !Layercolor::initWithcolor(ccc4(255,255,255)) )//红 绿 蓝 Alpha(透明度)    {        return false;    }#if 0        Size visibleSize = Director::getInstance()->getVisibleSize();    Vec2 origin = Director::getInstance()->getVisibleOrigin();    /////////////////////////////    // 2. add a menu item with "X" image,which is clicked to quit the program    //    you may modify it.    // add a "close" icon to exit the progress. it's an autorelease object    auto closeItem = MenuItemImage::create(                                           "Closenormal.png","CloseSelected.png",CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));    	closeItem->set@R_404_4612@(Vec2(origin.x + visibleSize.wIDth - closeItem->getContentSize().wIDth/2,origin.y + closeItem->getContentSize().height/2));    // create menu,it's an autorelease object    auto menu = Menu::create(closeItem,NulL);    menu->set@R_404_4612@(Vec2::ZERO);    this->addChild(menu,1);    /////////////////////////////    // 3. add your codes below...    // add a label shows "Hello World"    // create and initialize a label        auto label = Label::createWithTTF("Hello World","Fonts/Marker Felt.ttf",24);        // @R_404_4612@ the label on the center of the screen    label->set@R_404_4612@(Vec2(origin.x + visibleSize.wIDth/2,origin.y + visibleSize.height - label->getContentSize().height));    // add the label as a child to this layer    this->addChild(label,1);    // add "HelloWorld" splash screen"    auto sprite = Sprite::create("HelloWorld.png");    // @R_404_4612@ the sprite on the center of the screen    sprite->set@R_404_4612@(Vec2(visibleSize.wIDth/2 + origin.x,visibleSize.height/2 + origin.y));    // add the sprite as a child to this layer    this->addChild(sprite,0); #endif  	CCSize screenSize=CCDirector::sharedDirector()->getVisibleSize();//在导演类中获取屏幕高度    CCSprite* player=CCSprite::create("Player.png");	player->set@R_404_4612@(ccp(0+20,screenSize.height/2)); 	this->addChild(player);	#if 0	CcmenuItemImage* item=CcmenuItemImage::create("button2.png","button2.png",this,menu_selector(HelloWorld::responseFunc));	item->set@R_404_4612@(ccp(30,30));	Ccmenu* menu=Ccmenu::create(item,NulL);	this->addChild(menu);#endif	this->schedule(schedule_selector(HelloWorld::gameLogic),2);	this->schedule(schedule_selector(HelloWorld::update));	this->settouchEnabled(true);	settouchMode(touch::dispatchMode::ONE_BY_ONE);	//_proJs=new CCArray;	//_targets=new CCArray;	_proJs=__Array::createWithCapacity(100);	_targets=__Array::createWithCapacity(100);	//在cocos2d.3x中创建Array需要用__Array,不应该用CCArrray不然会报错	_proJs->retain();//需要保持内存	_targets->retain();	return true;}voID HelloWorld::update(float delta){	__Array* targetToDelete=__Array::createWithCapacity(100);	__Array* projToDelete=__Array::createWithCapacity(100);	CCObject* itarget;	CCObject* iproj;	CCARRAY_FOREACH(_targets,itarget)	{	CCSprite* target=(CCSprite*)itarget;	CCRect targetzone=CCRectMake(target->get@R_404_4612@X(),target->get@R_404_4612@Y(),target->getContentSize().wIDth,target->getContentSize().height);		CCARRAY_FOREACH(_proJs,iproj)	{		CCSprite* proj=(CCSprite*)iproj;		CCRect projzone=CCRectMake(proj->get@R_404_4612@X(),proj->get@R_404_4612@Y(),proj->getContentSize().wIDth,proj->getContentSize().height);		if(projzone.intersectsRect(targetzone))		{			projToDelete->addobject(iproj);			targetToDelete->addobject(itarget);		}	}	}	CCARRAY_FOREACH(projToDelete,iproj)	{		_proJs->removeObject(iproj);		CCSprite* proj=(CCSprite*)iproj;		proj->removeFromParentAndCleanup(true);	}	CCARRAY_FOREACH(targetToDelete,itarget)	{		_targets->removeObject(itarget);		CCSprite* target=(CCSprite*)itarget;		target->removeFromParentAndCleanup(true);	}	//targetToDelete->release();	//projToDelete->release();	targetToDelete->removeAllObjects();	projToDelete->removeAllObjects();}	HelloWorld::~HelloWorld(){	/*	if(_proJs!=NulL)		_proJs->release();	if(_targets!=NulL)		_targets->release();		*/	_proJs->removeAllObjects();	CC_SAFE_RELEASE_NulL(_proJs);//先释放在赋予nullptr	_targets->removeAllObjects();	CC_SAFE_RELEASE_NulL(_targets);}bool HelloWorld::ontouchBegan(touch *ptouches,CCEvent *pEvent){	//touch* touch=(touch*)ptouches->getLocation();		Vec2 location=ptouches->getLocation();	//Point LocinVIEw=touch->getLocationInVIEw();	//Point loc=Director::sharedDirector()->convertToGL(LocinVIEw);	if(location.x<=20)	{		return 1;	}	CCSize screenSize=CCDirector::sharedDirector()->getVisibleSize();		CCSprite* proj=CCSprite::create("Projectile.png");	proj->set@R_404_4612@(ccp(20,screenSize.height/2.0));	this->addChild(proj);	proj->setTag(2);	_proJs->addobject(proj);			double dx=location.x-20;	double dy=location.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/520,ccp(endx,endy));	CCCallFuncN* moveFinish=CCCallFuncN::create(this,callfuncN_selector(HelloWorld::mydefine));	CCSequence* actions=CCSequence::create(move,moveFinish,NulL);	proj->runAction(actions);}voID HelloWorld::gameLogic(float dt){	this->createTarget();}voID HelloWorld::createTarget(){	CCSize screenSize=CCDirector::sharedDirector()->getVisibleSize();	CCSprite* target=CCSprite::create("Target.png");	int y=rand()%(int)screenSize.height;	target->set@R_404_4612@(ccp(screenSize.wIDth-20,y));	this->addChild(target);	target->setTag(1);	_targets->addobject(target);		CCMoveto* move=CCMoveto::create(2,ccp(0,y));	CCCallFuncN* disappear=CCCallFuncN::create(this,disappear,NulL);	target->runAction(actions);}voID HelloWorld::responseFunc(Ref* obj){	//cclOG("menu item clicked");	CCMoveto* move=CCMoveto::create(2,40));	CCCallFuncN* disappear=CCCallFuncN::create(this,NulL);	target->runAction(actions);}voID HelloWorld::mydefine(Node* who){	//who->set@R_404_4612@(ccp(10,10));	//who->setScale(2);	who->removeFromParentAndCleanup(true);    	int tag=who->getTag();	if(tag==1)	{		_targets->removeObject(who);	}	else if(tag==2)	{		_proJs->removeObject(who);	}}voID HelloWorld::menuCloseCallback(Ref* pSender){#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)	MessageBox("You pressed the close button. windows Store Apps do not implement a close button.","Alert");    return;#endif    Director::getInstance()->end();#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)    exit(0);#endif}
总结

以上是内存溢出为你收集整理的(cocos2dx)使用__Array容器检测碰撞时间全部内容,希望文章能够帮你解决(cocos2dx)使用__Array容器检测碰撞时间所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1065331.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存