Cocos2d-x碰撞检查与消灭的实现

Cocos2d-x碰撞检查与消灭的实现,第1张

概述#ifndef __HELLOWORLD_SCENE_H__   #define __HELLOWORLD_SCENE_H__      #include "cocos2d.h"   using namespace cocos2d;      class HelloWorld : public cocos2d::CCLayerColor   {   public:       // Method 
#ifndef__HELLOWORLD_SCENE_H__ #define__HELLOWORLD_SCENE_H__ #include"cocos2d.h" usingnamespacecocos2d; classHelloWorld:publiccocos2d::cclayercolor { public: //Method'init'incocos2d-xreturnsbool,insteadof'ID'incocos2d-iphone(anobjectpointer) virtualboolinit(); //there'sno'ID'incpp,sowerecommendtoreturntheclassinstancepointer staticcocos2d::CCScene*scene(); //aselectorcallback voIDmenuCloseCallback(CCObject*pSender); //preprocessormacrofor"staticcreate()"constructor(node()deprecated) CREATE_FUNC(HelloWorld); voIDaddTarget(); voIDspriteMoveFinished(CCNode*sender); voIDgameLogic(cocos2d::CCTimedt); voIDcctouchesEnded(CCSet*touches,CCEvent*event); CCArray*aarayTarget;//敌人 CCArray*arrayProjectile;//飞镖 voIDupdate(CCTimedt); }; #endif//__HELLOWORLD_SCENE_H__
HelloWorldScence.cpp

[objc] view plain copy @L_502_2@ ? #include"HelloWorldScene.h" #include"SimpleAudioEngine.h" namespacecocos2d; namespaceCocosDenshion; CCScene*HelloWorld::scene() //'scene'isanautoreleaSEObject CCScene*scene=CCScene::create(); //'layer'isanautoreleaSEObject HelloWorld*layer=HelloWorld::create(); //addlayerasachildtoscene scene->addChild(layer); //returnthescene returnscene; } //on"init"youneedtoinitializeyourinstance boolHelloWorld::init() ////////////////////////////// //1.superinitfirst if(cclayercolor::initWithcolor(ccc4(255,255,255))) CCSizewinSize=CCDirector::sharedDirector()->getWinSize();//获取屏幕大小 arrayProjectile=CCArray::create(); aarayTarget=CCArray::create(); floatsprite_scale=2.0; CCSprite*Player=CCSprite::create("Player.png"); Player->setScale(sprite_scale); Player->setposition(ccp(Player->getContentSize().wIDth*sprite_scale/2.0,winSize.height/2.0)); this->addChild(Player); aarayTarget->retain(); arrayProjectile->retain(); this->schedule(schedule_selector(HelloWorld::gameLogic),1.0); this->schedule(schedule_selector(HelloWorld::update)); this->settouchEnabled(true); returntrue; } else{ false; voIDHelloWorld::gameLogic(cocos2d::CCTimedt){ this->addTarget(); HelloWorld::addTarget(){ CCSizewinSize=CCDirector::sharedDirector()->getWinSize(); CCSprite*target=CCSprite::create("Target.png"); //随机位置 intminY=target->getContentSize().height/2.0; intmaxY=winSize.height-target->getContentSize().height/2.0; intrangeY=maxY-minY; intactualY=rand()%rangeY+minY; target->setposition(ccp(winSize.wIDth-target->getContentSize().wIDth/2.0,actualY)); target->setTag(1); this->addChild(target); aarayTarget->addobject(target); //随机速度 floatminDuration=2.0; floatmaxDuration=4.0; intrangeDuration=maxDuration-minDuration; floatactualDuration=rand()%rangeDuration+minDuration; CCFiniteTimeAction*actionMove=CCMoveto::create(actualDuration,ccp(0-target->getContentSize().wIDth/2.0,actualY));//0代表屏幕外,这句表示在3秒内从初始位置移动到屏幕外 //增加一个回调函数,回收移动到屏幕外的精灵 CCFiniteTimeAction*actionMoveDone=CCCallFuncN::create(this,callfuncN_selector(HelloWorld::spriteMoveFinished)); target->runAction(CCSequence::create(actionMove,actionMoveDone,NulL)); HelloWorld::spriteMoveFinished(cocos2d::CCNode*sender){ CCSprite*sprite=(CCSprite*)sender; //this->removeChild(sprite,true); if(sprite->getTag()==1){ aarayTarget->removeObject(sprite);//清除敌人 }elseif(sprite->getTag()==2){ arrayProjectile->removeObject(sprite);//清除飞镖 //发射飞镖 HelloWorld::cctouchesEnded(cocos2d::cocos2d::CCEvent*event){ CCtouch*touch=(CCtouch*)touches->anyObject(); CCPointlocation=touch->getLocationInVIEw(); location=this->converttouchToNodeSpace(touch); CCSprite*projectile=CCSprite::create("Projectile.png"); projectile->setposition(ccp(20,winSize.height/2)); floatoffX=location.x-projectile->getpositionX(); floatoffY=location.y-projectile->getpositionY(); if(offX<=0){ return; projectile->setTag(2); this->addChild(projectile); arrayProjectile->addobject(projectile); floatangle=offY/offX; floatrealX=winSize.wIDth+projectile->getContentSize().wIDth/2; floatrealY=realX*angle+projectile->getpositionY(); CCPointfinalposition=ccp(realX,realY); //获取飞镖飞行时间 floatlength=sqrtf(realX*realX+realY*realY); floatveLocity=480; floatrealMoveDuration=length/veLocity; projectile->runAction(CCSequence::create(CCMoveto::create(realMoveDuration,finalposition),CCCallFuncN::create(this,callfuncN_selector(HelloWorld::spriteMoveFinished)),153); background-color:inherit; Font-weight:bold">NulL)); //碰撞检测,消除飞镖和敌人 HelloWorld::update(cocos2d::CCTimedt){ for(inti=0;i<aarayTarget->count();i++){ CCSprite*target=(CCSprite*)aarayTarget->objectAtIndex(i); intj=0;j<arrayProjectile->count();j++){ CCSprite*projectile=(CCSprite*)arrayProjectile->objectAtIndex(j); if(target->boundingBox().intersectsRect(projectile->boundingBox())){ aarayTarget->removeObjectAtIndex(i); arrayProjectile->removeObjectAtIndex(j); this->removeChild(target); this->removeChild(projectile); break; HelloWorld::menuCloseCallback(CCObject*pSender) { CCDirector::sharedDirector()->end(); #if(CC_TARGET_PLATFORM==CC_PLATFORM_IOS) exit(0); #endif } 总结

以上是内存溢出为你收集整理的Cocos2d-x碰撞检查消灭的实现全部内容,希望文章能够帮你解决Cocos2d-x碰撞检查与消灭的实现所遇到的程序开发问题。

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

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

原文地址:https://www.54852.com/web/1028804.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存